Inviare email con Ruby
Come ogni linguaggio di programmazione di buon livello anche Ruby consente l'invio di messaggi di posta elettronica. Per far questo non è necessario digitare tanto codice, è sufficiente invece passare all'interprete del linguaggio un file completo di tutti i parametri necessari all'invio.
Alla base di tutto abbiamo un libreria specifica denominata Net::SMTP che mette a disposizione dell'utente tutte le funzionalità necessarie per inviare email tramite il protocollo SMTP (Simple Mail Transfer Protocol); grazie alla libreria Net::SMTP sarà infatti possibile creare un oggetto in grado di aprire una connessione TCP (Transmission Control Protocol) e di connettersi al server per l'invio. L'oggetto in questione è utilizzato da un metodo specifico denominato start.
E' bene precisare che Net::SMTP non consente di inviare posta elettronica tramite Internet, non svolge cioè una funzione simile a quella che può essere la funzione mail() di un linguaggio di scripting come PHP.
Il suo compito somiglia molto di più a quello di un client di posta che a quello di un Webmail per la corrispondenza on-line.
Detto questo, vediamo un pò di codice; di seguito mostremo un semplice programmino in grado di inviare un'email sulla base dei parametri definiti dall'utente:
#inviare una email con Ruby
#richiamiamo la libreria per la connessione al server
require 'net/smtp'
#specifichiamo i parametri relativi a mittente e destinatario
nome_mittente = 'Mio nome'
email_mittente = 'info@miamail.it'
nome_destinatario = 'Suo nome'
email_destinatario = 'info@suamail.it'
#specifichiamo i parametri di autenticazione al server
host_smtp = 'smtp.provider.it'
porta_smtp = 25
dominio_smtp = 'provider.it'
utente_smtp = 'user'
password_smtp = 'password'
#oggetto e corpo della email
oggetto = 'Inviare una mail con Ruby'
body = "Ciao Mondo!.\n"
#passiamo i parametri ad un variabile
messaggio = <<END_OF_MESSAGE
From: #{nome_mittente} <#{email_mittente}>
To: #{nome_destinatario} <#{email_destinatario}>
Subject: #{oggetto}
#{body}
END_OF_MESSAGE
#inviamo l'email tramite il metodo start
Net::SMTP.start(host_smtp,
porta_smtp,
dominio_smtp,
utente_smtp,
password_smtp, :plain) do |smtp|
smtp.send_message messaggio, utente_smtp, email_destinatario
#chiudiamo il blocco delle istruzioni
end
Riepilogando quanto visto nel codice, possiamo notare che la prima azione da compiere è quella relativa alla chiamata della libreria per la connessione al server di posta.
In secondo luogo è necessario specificare i dati relativi al mittente e al destinatario, nome e indirizzo email di chi spedice e stessi dati per quanto riguarda l'utente che dovrà ricevere il messaggio.
La connessione al server SMTP non potrà avvenire senza che vengano indicati i necessari parametri di autenticazione: il nome dell'host del server, la porta sulla quale il server è in ascolto in attesa di eventuali messaggi, il nome di dominio relativo al server di posta, le credenziali del mittente per l'utilizzo del servizio (username e password).
Si procede poi con l'indicazione dell'oggetto e del corpo del messaggio; questi ultimi dati vengono passati come valori per una variabile che contiene anche gli headers precedentemente specificati.
Infine, viene richiamato il metodo start della libreria Net::SMTP.start che attraverso i parametri di autenticazione si connette al server e tramite l'istruzione do (letteralmente "fai") permette l'invio del messaggio.
Da notare come il simbolo :plain non specifichi la tipologia del messaggio (non corrisponde quindi al plain text del formato della mail), ma la metodologia di autenticazione (o schema).
Propriamente esistono 3 metodologie di autenticazione ad un server di SMTP e Ruby le supporta tutte; esse sono PLAIN, LOGIN e CRAM MD5, parametri che però rigurdano argomento relativi alla gestione dei server di posta e non lo stesso Ruby; i curiosi possono comunque approdire il discorso tramite una delle numerose risorse presenti in Rete a questo riguardo.







