English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
Di seguito è fornito uno script Ruby semplice per inviare posta elettronica:
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.
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.
Ecco un esempio per inviare una posta elettronica in formato HTML:
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
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 seguente invierà una email con allegato /tmp/test.txt:
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.