English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Invio Email SMTP Ruby

SMTP (Simple Mail Transfer Protocol) è il protocollo di trasmissione di posta semplice, è un insieme di regole utilizzate per trasmettere email da un indirizzo sorgente a un indirizzo destinatario, controlla il modo di trasmissione delle lettere.

Ruby fornisce Net::SMTP per inviare email e fornisce due metodi new e start:

new Il metodo ha due parametri:

  • nome del server predefinito a localhost

  • numero di porta predefinito a 25

start Il metodo ha i seguenti parametri:

  • server  - IP del server SMTP, predefinito a localhost

  • port  - Porta, predefinita a 25

  • domain - Dominio del mittente dell'email, predefinito a ENV["HOSTNAME"]

  • account - Nome utente, predefinito a nil

  • password - Password dell'utente, predefinito a nil

  • authtype - Tipo di verifica, predefinito a cram_md5

L'esempio di oggetto SMTP ha chiamato sendmail con i seguenti parametri:

  • sorgente  - Una stringa, un array o qualsiasi cosa restituita da un iteratore in qualsiasi momento.

  • mittente - Una stringa che appare nei campi di forma dell'email.

  • destinatari - Una stringa o un array di stringhe che rappresenta gli indirizzi dei destinatari.

Esempio online

Di seguito è fornito uno script Ruby semplice per inviare posta elettronica:

Esempio online

require 'net/smtp'
 
message = <<MESSAGE_END
Da: Persona privata <[email protected]>
A: Un utente di test <[email protected]>
Oggetto: Test di posta elettronica SMTP
 
Questo è un messaggio di posta elettronica di test.
MESSAGE_END
 
begin
  smtp.send_message message, '[email protected]', 
                             '[email protected]'
fine

Nell'esempio sopra, avete configurato un messaggio di posta elettronica di base, notate il formato corretto del titolo. Un messaggio di posta elettronica deve avere From, To e Oggetto, e tra il contenuto del messaggio e le informazioni di intestazione deve esserci una riga vuota.

Per connettersi al server SMTP locale utilizzando Net::SMTP, utilizzare il metodo send_message per inviare una posta elettronica, i parametri del metodo sono l'indirizzo email del mittente e del destinatario.

Se non avete un server SMTP in esecuzione sul vostro computer, potete utilizzare Net::SMTP per comunicare con un server SMTP remoto. Se utilizzate un servizio di posta elettronica online (come Hotmail o Yahoo Mail), il vostro fornitore di posta elettronica vi fornirà i dettagli del server di invio:

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

Il codice sopra connette il server di posta elettronica mail.your-domain.com sulla porta 25. Se è necessario inserire un nome utente e una password, il codice è il seguente:

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

Nell'esempio sopra, è stato utilizzato un nome utente e una password specifici per connettersi al server di posta elettronica mail.your-domain.com sulla porta 25.

Invio di posta elettronica in HTML con Ruby

Net::SMTP offre anche il supporto per l'invio di posta elettronica in formato HTML.

Quando si invia una posta elettronica, è possibile impostare la versione MIME, il tipo di documento e il set di caratteri per inviare una posta elettronica in formato HTML.

Esempio online

Ecco un esempio per inviare una posta elettronica in formato HTML:

Esempio online

require 'net/smtp'
 
message = <<MESSAGE_END
Da: Persona privata <[email protected]>
A: Un utente di test <[email protected]>
MIME-Version: 1.0
Content-type: text/html
Oggetto: Test di posta elettronica SMTP
 
Questo è un messaggio di posta elettronica da inviare in formato HTML
 
<b>This is HTML message.</b>
<h1>This is headline.</h1>
MESSAGE_END
 
begin
  smtp.send_message message, '[email protected]', 
                             '[email protected]'
fine

Invio di email con allegato

Per inviare email con contenuti misti, è necessario impostare Content-type su multipart/mixed. In questo modo è possibile aggiungere il contenuto dell'allegato all'email.

L'allegato deve essere codificato in formato base64 prima della trasmissione. pack("m") La funzione converte il contenuto in formato base64.

Esempio online

Esempio seguente invierà una email con allegato /tmp/test.txt:

Esempio online

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.
--#{marker}--
 
# 定义主要的头部信息
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}
--#{marker}--
 
# 定义消息动作
part2 =<<EOF
Content-Type: text/plain
Content-Transfer-Encoding:8bit
 
#{body}
--#{marker}
--#{marker}--
 
# 定义附件部分
part3 =<<EOF
Content-Type: multipart/mixed; name=\"#{filename}\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename="#{filename}"
 
Content-Disposition: allegato; nomefile="#{filename}"
#{encodedcontent}
--#{marker}--
 
EOF
 
mailtext = part1 + part2 + part3
# Invio email 
  begin
     Net::SMTP.start('localhost') do |smtp|
                          ['[email protected]'])
  fine
rescue Exception => e  
  print "Eccezione occorsa: " + e  
fine

Attenzione:Puoi specificare più indirizzi di destinazione, ma è necessario utilizzare la virgola per separarli.