Latest web development tutorials

Ruby wysyłania poczty - SMTP

SMTP (Simple Mail Transfer Protocol), czyli Simple Mail Transfer Protocol, który jest zbiorem zasad przekazywania wiadomości od źródła do miejsca przeznaczenia, który musi kontrolować sposób listów tranzycie.

Ruby dostarcza Net :: SMTP do wysyłania poczty i oferuje dwie metody i nowy początek:

Nowa metoda ma dwa parametry:

  • Domyślnanazwa serweralocalhost
  • Domyślnynumer portuto 25

Metodastartu ma następujące parametry:

  • Serwer -IP serweraSMTP,domyślnie jest to localhost
  • port -numer portu, domyślnie jest to 25
  • domeny -domena email nadawcy, domyślnie ENV [ "host"]
  • Konto -nazwa użytkownika, domyślnie jest zerowa
  • Hasło -hasło użytkownika, domyślnie jest zerowa
  • AuthType -typ uwierzytelniania, domyślnym jestcram_md5

Metoda zwraca obiekt instancji SMTP Sendmail następujących parametrach:

  • Źródło -Ciąg znaków lub tablicą każdej iteracji lub cokolwiek w dowolnym momencie w zamian.
  • Nadawca -ciąg znaków, który pojawia się w postaci pola e-mail.
  • Odbiorcy -ciągiem znaków lub tablicą ciągów reprezentujących adres odbiorcy.

Przykłady

Poniżej przedstawiono prosty Ruby skrypt do wysyłania poczty:

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

W powyższym przykładzie, skonfigurowaniu podstawowe wiadomości e-mail, należy zwrócić uwagę na odpowiedni format tytułu. Wiadomość e-mail, aby być Od, Do i Temat, między tekstem i informacje nagłówka wymaga pusty wiersz.

Użyj Net :: SMTP, aby połączyć się z serwerem SMTP na lokalnej maszynie do wysyłania wiadomości za pomocą procesu send_message, parametrów procesowych dla nadawcy wiadomości z poczty odbiorcy.

Jeśli nie są uruchomione na serwerze SMTP urządzenia, można skorzystać z komunikacji Net :: SMTP ze zdalnego serwera SMTP. W przypadku korzystania z usługi poczty internetowej (takich jak Hotmail czy Yahoo Mail), dostawca e-mail będzie podać dane wysyłającego serwera poczty dla Ciebie:

Net::SMTP.start('mail.your-domain.com')

Powyższy kod będzie łączyć szereg mail.your-domain.com, numer portu 25 serwera pocztowego, jeśli trzeba wpisać nazwę użytkownika i hasło, kod jest w następujący sposób:

Net::SMTP.start('mail.your-domain.com', 
                25, 
                'localhost', 
                'username', 'password', :plain)

Powyższe przykłady użyć nazwy użytkownika i hasła, aby połączyć się z określonym hostem mail.your-domain.com, numer portu 25 serwera pocztowego.


Wyślij e-mail w formacie HTML z Ruby

Net :: SMTP zapewnia również wsparcie dla wysyłania wiadomości w formacie HTML.

Podczas wysyłania wiadomości e-mail można ustawić wersję MIME, typ dokumentu, zestaw znaków do wysyłania wiadomości w formacie HTML.

Przykłady

Poniższe przykłady służą do wysyłania wiadomości w formacie HTML:

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

Wyślij mail z załącznikami

Jeśli chcesz wysłać mieszaną treść wiadomości e-mail, trzeba ustawić Content-type jest wieloczęściowy / mieszany. Więc można dodać załącznik w treści wiadomości.

Akcesorium przed przeniesieniem wymaga pakiet użytkowania ( "M") konwertuje jego zawartość w formacie base64.

Przykłady

Poniższy przykład wysyłać załączniki jak /tmp/test.txt e-mail:

require 'net/smtp'

filename = "/tmp/test.txt"
# 读取文件并编码为base64格式
filecontent = File.read(filename)
encodedcontent = [filecontent].pack("m")   # base64

marker = "AUNIQUEMARKER"

body =<<EOF
This is a test email to send an attachement.
EOF

# 定义主要的头部信息
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

# 定义消息动作
part2 =<<EOF
Content-Type: text/plain
Content-Transfer-Encoding:8bit

#{body}
--#{marker}
EOF

# 定义附件部分
part3 =<<EOF
Content-Type: multipart/mixed; name=\"#{filename}\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename="#{filename}"

#{encodedcontent}
--#{marker}--
EOF

mailtext = part1 + part2 + part3

# 发送邮件
begin 
  Net::SMTP.start('localhost') do |smtp|
     smtp.sendmail(mailtext, '[email protected]',
                          ['[email protected]'])
  end
rescue Exception => e  
  print "Exception occured: " + e  
end  

Uwaga: Można określić adres wielu transmisji, ale wymaga użycia przecinkami.