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]' endW 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.