SMTP
Procediamo la panoramica sui protocolli di rete con NET::SMTP che ovviamente permette di inviare email. Sono disponibile delle alternative più user friendly; per un elenco parziale si esegua da terminale
# gem search --remote mail
Qui però per ragioni di spazio ci occuperemo solo di net/smtp che fa parte della libreria standard. Per inviare un messaggio basta costruire il corpo dell'email e inviarla semplicemente con il metodo send_message
:
require 'net/smtp' messaggio = <<FIN From: GLS <gls@fakemail.com> To: Qualcuno <qualcuno@example.com> Subject: messaggio di prova Testo del messaggio di prova. FIN Net::SMTP.start('smtp.example.com') do |smtp| smtp.send_message(messaggio, 'user@fakemail.net', 'admin@example.com') end
Il metodo start
prende come argomento il nome del server SMTP e si occupa di aprire una connessione SMTP che verrà chiusa all'uscita dal blocco; se invece non si associa a start
un blocco la sessione va chiusa con finish
.
Opzionalmente è possibile passare ulteriori argomenti a start
per indicare la porta del server, il dominio, le credenziali e il tipo di autenticazione. Il messaggio va inviato con send_message
indicando oltre al corpo del messaggio anche l'indirizzo del mittente e del destinatario entrambi sotto forma di stringa, è possibile indicare più destinatari inserendoli in un array di stringhe.
POP3
Dopo aver visto come inviare la posta vediamo come riceverla tramite il protocollo POP3. Iniziamo mostrando un esempio delle funzionalità base:
require 'net/pop' server = Net::POP3.new('pop3.example.com') server.start('username', 'password') do |pop| puts "Ci sono #{pop.n_mails} messaggi sul server" end
La sessione POP3 viene aperta con start
che prende come argomenti l'username e la password e viene chiusa all'uscita dal blocco; anche in questo caso qualora non si utilizzi il blocco la sessione va chiusa con l'apposito metodo finish
. Il metodo fondamentale è mails
che ritorna un array di oggetti Net::POPMail
che contiene tutte le email presenti sul server.
require 'net/pop' server = Net::POP3.new('pop3.example.com') server.start('username', 'password') do |pop| pop.mails.each do |msg| puts msg.header end end
In alternativa a pop.mails.each è possibile utilizzare il più conciso each_mail. Tra i metodi di Net::POPMail
troviamo tra gli altri header e mail che mostrano rispettivamente l'header e il testo del messaggio. Per cancellare un messaggio dal server va utilizzato il metodo delete
.
SSH
Concludiamo questa panoramica affrontando la classe Net::SSH
, implementata nella gemma net-ssh, che ci permette di gestire il protocollo SSH2.
require 'rubygems' require 'net/ssh' Net::SSH.start('localhost', :username=>'gls', :password=>'mypass') do |ss| sh = ss.shell.sync puts sh.ls.stdout puts sh.uname('-a').stdout end
Come per le altre librerie viste prima start, che prende come argomenti il nome dell'host a cui connettersi, l'username e la password, apre una sessione SSH e passa al blocco ad esso associato un oggetto di tipo Net::SSH::Session
. Nell'esempio, all'interno del blocco non facciamo altro che eseguire alcuni comandi via shell sul server.
La libreria richiede una trattazione adeguata alla complessità dell'argomento. Torneremo a parlarne negli approfondimenti