Najlepszy samouczek Ruby wysyłania poczty - SMTP W 2024 r. W tym samouczku możesz dowiedzieć się Wyślij e-mail w formacie HTML z Ruby,Wyślij mail z załącznikami,
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:
Metodastartu ma następujące parametry:
Metoda zwraca obiekt instancji SMTP Sendmail następujących parametrach:
Poniżej przedstawiono prosty Ruby skrypt do wysyłania poczty:
require 'net/smtp' message = <<MESSAGE_END From: Private Person <me@fromdomain.com> To: A Test User <test@todomain.com> Subject: SMTP e-mail test This is a test e-mail message. MESSAGE_END Net::SMTP.start('localhost') do |smtp| smtp.send_message message, 'me@fromdomain.com', 'test@todomain.com' 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.
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.
Poniższe przykłady służą do wysyłania wiadomości w formacie HTML:
require 'net/smtp' message = <<MESSAGE_END From: Private Person <me@fromdomain.com> To: A Test User <test@todomain.com> 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, 'me@fromdomain.com', 'test@todomain.com' end
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.
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 <me@fromdomain.net> To: A Test User <test@todmain.com> 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, 'me@fromdomain.net', ['test@todmain.com']) end rescue Exception => e print "Exception occured: " + e end
Uwaga: Można określić adres wielu transmisji, ale wymaga użycia przecinkami.