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
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: