Wysyłanie wiadomości e-mail za pomocą Ruby - SMTP
Simple Mail Transfer Protocol (SMTP) to protokół, który obsługuje wysyłanie i kierowanie poczty między serwerami pocztowymi.
Ruby udostępnia klasę Net :: SMTP dla połączenia po stronie klienta protokołu SMTP (Simple Mail Transfer Protocol) i udostępnia dwie metody klas: nowy i start .
Plik new przyjmuje dwa parametry -
Nazwa serwera zalegających na localhost.
Numer portu zalegających do znanego portu 25.
Plik start metoda przyjmuje te parametry -
Serwera - nazwa IP serwera SMTP, zalegających na localhost.
Port - numer portu, zalegających do 25.
Domeny - Domena nadawcy poczty, zalegających ENV [ „host”].
Konto - Nazwa użytkownika, domyślnie jest zerowa.
Hasło - hasło użytkownika, nie stawili się do zera.
AuthType - typ autoryzacji, zalegających na cram_md5 .
Obiekt SMTP ma metodę instancji o nazwie sendmail, która jest zwykle używana do wysyłania wiadomości. Potrzeba trzech parametrów -
Źródło - Ciąg znaków lub tablicą lub cokolwiek ze związkiem każdy iterator powrocie jeden ciąg naraz.
Nadawca - Ciąg znaków, który pojawi się w z dziedziny e-mail.
Odbiorcy - łańcuch A lub szereg strun stanowiących adresata (ów) odbiorców.
Przykład
Oto prosty sposób na wysłanie jednego e-maila za pomocą skryptu Ruby. Spróbuj raz -
require 'net/smtp'
message = <<MESSAGE_END
From: Private Person <[email protected]>
To: A Test User <[email protected]>
Subject: SMTP e-mail test
This is a test e-mail message.
MESSAGE_END
Net::SMTP.start('localhost') do |smtp|
smtp.send_message message, '[email protected]', '[email protected]'
end
Tutaj umieściłeś podstawową wiadomość e-mail w wiadomości, używając dokumentu, dbając o prawidłowe formatowanie nagłówków. E-maile wymagają rozszerzeniaFrom, To, i Subject nagłówek, oddzielony od treści wiadomości e-mail pustą linią.
Aby wysłać pocztę, użyj Net :: SMTP do połączenia się z serwerem SMTP na komputerze lokalnym, a następnie użyj metody send_message wraz z wiadomością, adresem nadawcy i adresem docelowym jako parametrami (nawet jeśli adresy od i do są w samej wiadomości e-mail nie są one zawsze używane do kierowania poczty).
Jeśli nie używasz serwera SMTP na swoim komputerze, możesz użyć Net :: SMTP do komunikacji ze zdalnym serwerem SMTP. O ile nie korzystasz z usługi poczty internetowej (takiej jak Hotmail lub Yahoo! Mail), Twój dostawca poczty e-mail dostarczy Ci dane serwera poczty wychodzącej, które możesz podać Net :: SMTP w następujący sposób -
Net::SMTP.start('mail.your-domain.com')
Ten wiersz kodu łączy się z serwerem SMTP na porcie 25 adresu mail.twoja-domena.com bez użycia nazwy użytkownika ani hasła. Jeśli jednak potrzebujesz, możesz podać numer portu i inne szczegóły. Na przykład -
Net::SMTP.start('mail.your-domain.com',
25,
'localhost',
'username', 'password' :plain)
Ten przykład łączy się z serwerem SMTP pod adresem mail.twoja-domena.com przy użyciu nazwy użytkownika i hasła w formacie zwykłego tekstu. Identyfikuje nazwę hosta klienta jako localhost.
Wysyłanie wiadomości e-mail w formacie HTML za pomocą Rubiego
Kiedy wyślesz wiadomość tekstową za pomocą Rubiego, cała zawartość zostanie potraktowana jako zwykły tekst. Nawet jeśli umieścisz tagi HTML w wiadomości tekstowej, będzie ona wyświetlana jako zwykły tekst, a tagi HTML nie będą sformatowane zgodnie ze składnią HTML. Ale Ruby Net :: SMTP zapewnia opcję wysyłania wiadomości HTML jako rzeczywistej wiadomości HTML.
Wysyłając wiadomość e-mail, możesz określić wersję Mime, typ zawartości i zestaw znaków, aby wysłać wiadomość e-mail w formacie HTML.
Przykład
Poniżej znajduje się przykład wysyłania treści HTML jako wiadomości e-mail. Spróbuj raz -
require 'net/smtp'
message = <<MESSAGE_END
From: Private Person <[email protected]>
To: A Test User <[email protected]>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP e-mail test
This is an e-mail message to be sent in HTML format
<b>This is HTML message.</b>
<h1>This is headline.</h1>
MESSAGE_END
Net::SMTP.start('localhost') do |smtp|
smtp.send_message message, '[email protected]', '[email protected]'
end
Wysyłanie załączników jako e-mail
Aby wysłać wiadomość e-mail z mieszaną zawartością, należy ustawić Content-type nagłówek do multipart/mixed. Następnie można określić sekcje tekstu i załączników wboundaries.
Granicę rozpoczynają dwa łączniki, po których następuje unikatowa liczba, która nie może pojawić się w części wiadomości e-mail z wiadomością. Ostateczna granica oznaczająca ostatnią sekcję wiadomości e-mail musi również kończyć się dwoma łącznikami.
Załączone pliki powinny być zakodowane z rozszerzeniem pack("m") funkcja ma kodowanie base64 przed transmisją.
Przykład
Poniżej znajduje się przykład, który wyśle plik /tmp/test.txt jako załącznik.
require 'net/smtp'
filename = "/tmp/test.txt"
# Read a file and encode it into base64 format
filecontent = File.read(filename)
encodedcontent = [filecontent].pack("m") # base64
marker = "AUNIQUEMARKER"
body = <<EOF
This is a test email to send an attachement.
EOF
# Define the main headers.
part1 = <<EOF
From: Private Person <[email protected]>
To: A Test User <[email protected]>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary = #{marker}
--#{marker}
EOF
# Define the message action
part2 = <<EOF
Content-Type: text/plain
Content-Transfer-Encoding:8bit
#{body}
--#{marker}
EOF
# Define the attachment section
part3 = <<EOF
Content-Type: multipart/mixed; name = \"#{filename}\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename = "#{filename}"
#{encodedcontent}
--#{marker}--
EOF
mailtext = part1 + part2 + part3
# Let's put our code in safe area
begin
Net::SMTP.start('localhost') do |smtp|
smtp.sendmail(mailtext, '[email protected]', ['[email protected]'])
end
rescue Exception => e
print "Exception occured: " + e
end
NOTE - W tablicy można określić wiele miejsc docelowych, ale należy je oddzielić przecinkami.