Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 8 di 32
  • livello principiante
Indice lezioni

Posta elettronica e SSH

Gestire invio e ricezione delle email
Gestire invio e ricezione delle email
Link copiato negli appunti

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

Ti consigliamo anche