Molti ISP oggi forniscono accesso alla mailbox tramite il protocollo POP3. In questo documento tratteremo unicamente tale protocollo dato che gli altri sono usati meno spesso. Inoltre non ci addentreremo nei dettagli di tale protocollo in quanto non è compito di questo documento farlo.
Volendo descrivere in breve il protocollo POP3 potremmo dire che il server è in costante ascolto sulla porta TCP/IP 110. Nel momento in cui c'è una connessione da parte di un client su tale porta, il server richiede un'autenticazione (generalmente del tipo nome utente + password in chiaro), quindi da accesso alla mailbox tramite una serie di comandi che servono principalmente a
In genere queste operazioni vengono svolte tutte in modo automatico da un apposito software. Vediamo quali tra questi sono i più usati e come configurarli.
L'ultima versione di popclient è prelevabile via ftp da
sunsite.unc.edu. Nel momento in cui scrivo la versione corrente
è la 3.0 ed il file relativo si chiama popclient-3.0.tar.gz
.
Per un'uso base di popclient basta chiamarlo con le seguenti opzioni:
popclient -3 -u utente -p password -o /path/per/la/mia/mailbox
nomehost
Dunque, vediamo un po' di analizzare questa linea di comando:
-3
sta ad indicare che usiamo il protocollo POP3;-u
deve essere seguito dal nostro nome-utente (il login);-p
deve essere seguito dalla nostra password sull'host remoto;-o
indica il percorso completo per la nostra mailbox (il file dove si
trova la posta sul nostro computer, non quello remoto). Di solito il
percorso è /var/spool/mail/nome-utente
dove
nome-utente
è il nostro login sulla macchina Linux locale;nomehost
deve essere sostituito dal nome del server POP3.Facciamo un esempio:
Il mio nome-utente è pippo
, la password baudo
, la mia mailbox
sulla macchina locale si trova sotto /var/spool/mail/pippo
ed il
nome dell'host cui devo collegarmi per prelevare la posta è
katia.rai.it
... dunque:
popclient -3 -u pippo -p baudo -o /var/spool/mail/pippo
katia.rai.it
popclient
per default cancella la posta sull'host remoto dopo averla
scaricata. Per disabilitare questa funzione aggiungi -k
tra le opzioni.
Come mi ha fatto giustamente notare Alberto Menegazzi (flash.egon@iol.it),
fetchmail
sostituisce popclient
, dal quale deriva. E' anche bene
fare presente che fetchmail
, a differenza di popclient
, ha bisogno
di un MDA locale per cui, se abbiamo modificato la configurazione di
sendmail
per l'uso della coda (come spiegato successivamente), ci
troveremmo in difficoltà e l'unica soluzione consiste nell'interfacciare
fetchmail
a procmail
inceve che a sendmail
. Scusa il giro di
parole :)
Per interfacciare direttamente popclient
a procmail
dobbiamo usare
l'opzione -c
invece di -o
per cui un esempio di sintassi corretta
potrebbe essere:
popclient -3 -u pippo -p baudo -c katia.rai.it | procmail
Per ulteriori spiegazioni:
popclient
senza opzioni per avere un elenco delle
opzioni passabili da linea di comando;man popclient
per avere una descrizione dettagliata di tutte
le funzioni.
L'ultima versione di fetchpop è prelevabile via ftp da
sunsite.unc.edu. Nel momento in cui scrivo la versione corrente
è la 1.9 (ci sono già in giro delle patch per risolvere alcuni
bug di questa versione) ed il file relativo si chiama
fetchpop1.9.tar.gz
.
Uno dei vantaggi di fetchpop consiste nella possibilità di essere
interfacciato direttamente a procmail (maggiori dettagli su procmail
successivamente) usando l'opzione -p
sulla linea di comando.
Per poter usare fetchpop
dovremo farlo partire una prima volta senza
parametri sulla linea di comando. Ci verranno chiesti nell'ordine: indirizzo
del server POP3, login e password sul server POP3, tempo di
inattività espresso in secondi che passa prima di controllare
nuovamente l'arrivo di nuova posta quando fetchpop
viene lanciato come
daemon (opzione -d
). All'ultima domanda rispondere con 300 che è
il valore minimo specificabile, tanto dal momento che usiamo la posta
off-line non useremo mai l'opzione -d
. Non fate caso all'errore che si
verifica dopo aver inserito quest'ultimo parametro: è normale in
quanto fetchpop cerca di collegarsi al server POP3 e non ci riesce (a
meno che non siamo collegati in quel momento).
A questo punto fetchpop
si è creato un file nella nostra home directory
chiamato .fetchhost
dove risiedono le informazioni che gli abbiamo dato
in questa prima fase. D'ora in poi sarà sufficiente essere collegati alla
rete e chiamare fetchpop
con le opzioni -r
e -a
per poter
ricevere la nostra posta, inclusi i messaggi eventualmente già letti
(opzione -a
) e, allo stesso tempo, rimuovere i messaggi sul server dopo
averli prelevati (opzione -r
).
Quindi la sintassi corretta sarà:
fetchpop -a -r
e, nel caso vogliamo usare procmail:
fetchpop -a -r -p
Per ulteriori spiegazioni:
fetchpop -h
per avere un elenco delle opzioni su linea
di comando;man fetchpop
per avere una descrizione dettagliata di tutte
le funzioni.
Probabilmente in questo momento fetchmail
è il migliore client
in circolazione. Ritengo giusto tradurre e riportare le parti salienti del
file README:
----------------------------------------------------------------------------
fetchmail è un programma di utilità per il forwarding/prelievo
della posta con POP2, POP3, APOP e IMAP, completo, robusto e ben
documentato, inteso per essere usato su collegamenti TCP/IP su-richiesta
(come connessioni SLIP o PPP). Esso preleva la posta da server remoti e la
invia al sistema di smistamento locale della tua macchina, in modo da
permettere a MUA come elm o Mail di leggerla.
Questa sono le caratteristiche principali di fetchmail. Quelle uniche di
fetchmail sono marcate con **.
* Supporto per i protocolli **POP2, POP3, **APOP, **IMAP.
** Supporto Kerberos per l'autenticazione dell'utente.
** La macchina viene auto-scandagliata in modo da trovare un server
funzionante se non è stato specificato alcun server per la
connessione. Così non hai bisogno di sapere in anticipo quali tipi di
server stanno girando sulla macchina; l'opzione verbose ti può
mostrare quale sta funzionando.
** Smistamento tramite SMTP alla porta 25 della macchina client. Questo
significa che la posta viene automaticamente inviata all'MDA locale come se
fosse normalmente arrivata dall'esterno via SMTP.
** Timeout se la connessione con il server viene a mancare.
** Supporto per prelevare e forwardare da caselle postali multiple che
garantisce di non causare loop con la posta.
* Semplice controllo tramite linea di comando o file di controllo di
esecuzione libero-dal-formato.
* Modo Daemon -- fetchmail può essere lanciato in background per
richiedere la posta da uno o più server ad un intervallo specificato.
* Gli header From:, To:, Cc:, e Reply-To: sono riscritti in modo che nomi
utenti relativi alla macchina di fetchmail diventino indirizzi Internet
completamente qualificati (l'originale Inglese rende meglio: fully-qualified
Internet addresses, ndt). Questo fa in modo che le risposte funzionino
correttamente. (Sarebbe stata una funzione unica di fetchmail se non
l'avessi aggiunta a fetchpop).
* Stretto rispetto degli RFC rilevanti e buone opzioni di debugging.
Potresti usare fetchmail per fare un debug sulle implementazioni di un
server.
* Pagina di manuale scritta con cura, comprensiva ed aggiornata, la quale
descrive non solo i modi di operazione ma anche (**) come diagnosticare i
problemi più comuni e cosa fare riguardo server deficienti.
* Codice sorgente a prova di bomba, semplice e ben sperimentato -- l'autore
ne fa uso tutti i giorni e non ha mai perso un messaggio, anche nelle
versioni sperimentali.
* Larga comunità di utenti -- fetchmail ha ereditato una
significativa base di utenti dalla comunità di popclient, scritto da
Carl Harris. Questo significa che il feedback è rapido e i bachi sono
scovati e corretti rapidamente.
Puoi facilmente prelevare l'ultima versione di fetchmail via FTP da:
ftp://ftp.ccil.org/pub/esr/fetchmail-1.9.tar.gz
Oppure puoi prelevarla dalla home page dell'autore:
http://www.ccil.org/~esr
----------------------------------------------------------------------------
Bene, spero di averti convinto che fetchmail
vale la pena di essere
usato nei casi in cui un semplice client POP non è sufficiente.
In ogni caso tieni presente il problema già accennato alla fine della
sezione relativa a popclient
: fetchmail
ha bisogno di un MDA
locale per consegnare la posta quindi, se hai configurato sendmail
per
l'uso della coda (opzione defer), dovrai usare procmail
come MDA.
Inoltre alcuni server POP recenti non implementano più il comando LAST (gli
utenti di Italia On Line lo sanno bene) per cui per loro si impone l'uso di
fetchmail
.
Se hai scaricato il pacchetto con i sorgenti dall'URL indicato qui sopra, allora probabilmente vorrai installarlo. Niente di più semplice! L'autore di fetchmail è un hacker riconosciuto
attenzione a non confondere la parola hacker con cracker!e, come tale, sa come rendere più facile la vita di quelli che non lo sono :)
Facciamo un cd /usr/src
e un tar vxzf
/percorso/per/fetchmail-1.9.tar.gz
in modo da ritrovarci il pacchetto
originale scompattato sotto /usr/src/fetchmail-1.9
Ora entriamo nella directory di fetchmail
e digitiamo
configure
Lo script farà un po' di ricerche sulle caratteristiche del nostro
sistema e, alla fine, ci riporterà al prompt. Dopo esserci assicurati
che il nostro sistema abbia flex versione 2.5.3 o maggiore (è
necessario per la compilazione) scrivamo semplicemente make
La compilazione dura molto poco (sul mio P60 con 16MB di RAM meno di un
minuto). A questo punto basta diventare root e digitare make
install
per installare il programma in /usr/local/bin
e la
pagina di manuale in /usr/local/man/man1
. Per cambiare queste
directory bisogna modificare il Makefile dopo aver lanciato
configure
e prima di aver fatto partire la compilazione con
make
.
Per finire dobbiamo andarci a creare il file ~/.fetchmailrc
dandogli i giusti permessi con:
chmod go-rwx,u=rw ~/.fetchmailrc
Un esempio di ~/.fetchmailrc
è:
poll host_remoto with protocol POP3:
user tizio there with password secret1 is caio here;
In questo modo stiamo dicendo a fetchmail
di usare tutti i default
(leggi la pagina di manuale al riguardo) e collegarsi al server
host_remoto per prelevare tramite il protocollo POP3 la posta di
tizio, il quale ha come password secret1 e sulla macchina locale
ha come login caio.
Per ulteriori spiegazioni:
fetchmail --help
per avere un elenco delle opzioni su
linea di comando;man fetchmail
per avere una descrizione dettagliata di tutte
le funzioni.
Nell'ambito della gestione della posta off-line, procmail può rivelarsi di estremo aiuto nel caso in cui il volume di email quotidiano superi il normale (non è raro che si verifichi un caso simile: basta iscriversi ad un paio di mailing list dal traffico intenso).
Procmail può smistare automaticamente la posta nei folder appropriati filtrando in base a qualsiasi parte di un messaggio (intestazione, uno dei campi dell'intestazione, corpo del messaggio, ecc) oppure può inviarla in pasto (ovvero tramite un pipe) ad un altro programma che potrebbe occuparsi ad esempio di archiviare i messaggi secondo un certo criterio e magari inserendo dei campi opportuni per determinati scopi... insomma le possibilità sono davvero infinite, l'unico limite è la fantasia.
Per dire a procmail come smistare la posta andiamo a crearci il file
~/.procmailrc
Il file ~/.procmailrc
è composto da una serie di regole. Per
semplificare le cose, diciamo che ogni regola inizia con una riga contenente
:0
seguita da una o più righe che descrivono una condizione (tali
righe iniziano con un asterisco seguito da una espressione regolare estesa
compatibile con egrep
), quindi da un'altra riga che descrive l'azione
da compiere se le condizioni sono verificate. Vediamo un esempio pratico:
:0
* ^From.*tizio
* ^Subject:.*patagarro
patagarro
Se il messaggio viene da tizio ed ha come soggetto patagarro, allora mettilo nella mailbox patagarro. Altro esempio:
:0:
* Pluto-meeting
`date +%m-%y`/Pluto-meeting
Se gli header del messaggio contengono la parola magica Pluto-meeting
allora mettili in una folder che ha come nome la data corrente nel formato
mese-anno più /Pluto-meeting
:0
* From.*print-server
| lpr
In questo caso i messaggi provenienti da print-server vengono inviati direttamente in pasto alla stampante.
Per ulteriori spiegazioni:
man procmail
per avere una descrizione dettagliata di tutte
le funzioniman procmailrc
per avere una descrizione del formato del file
~/.procmailrc
man procmailex
per avere una serie di esempi da usare nel
file ~/.procmailrc
man grep
per avere una descrizione delle espressioni regolari
estese compatibili con egrep
Come avevo già accennato nell'introduzione, è mia intenzione parlare per
il momento solo di POP3. Ma voglio fare una piccola eccezione e farvi
leggere questo articolo molto interessante scritto da Luca Polo e da me
pescato su it.comp.linux
:
----------------------------------------------------------------------------
> Mi avete incuriosito :-) Cos'è l'IMAP 4?
Diamine, ma è soltanto il buon vecchio Internet Message Access
Protocol versione 4!! :-)
Praticamente un super-superset di POP, ma più orientato verso un
effettivo client-server (con POP si ha un download, punto), supporto
multi-client (io leggo la posta da più macchine in posti diversi),
multi-server, ecc.
Un altro punto di forza sta nel fatto che è il server IMAP a gestire
MIME & Co. (client molto più semplici, e inoltre c'è solo
una macchina da tenere aggiornata); inoltre, mediante il protocollo
ACAP in fase di sviluppo alla Carnegie Mellon, anche i file di
configurazione (personalizzazioni, bookmark, alias) possono risiedere
sul server, così anche loro risultano indipendenti dalla singola
macchina.
La pacchia degli amministratori di sistema, insomma... :-P
Poi... beh, guardatevi http://www.imap.org/
Lì c'è tutto, compresi tutti i client conosciuti o in fase di
sviluppo; poi ditemi se non vale la pena tenerlo d'occhio... BTW, i server
IMAP di mia conoscenza sono anche POP server (alcuni dicono che siano
perfino molto meglio del "classico" qpopper).
Saluti,
Luca Polo
--
/ Luca Polo : jake@gest.unipd.it || System administrator \
| (http://www.gest.unipd.it/~jake for || Ist. di Ingegneria Gestionale |
\ address and phone numbers) || Universita` di Padova, Italy /
----------------------------------------------------------------------------