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.