<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Draft//EN"> <HTML> <HEAD> <TITLE>Posta Off-Line HOW-TO: Ricevere la posta</TITLE> </HEAD> <BODY> <A HREF="Posta-OFFline-HOWTO-1.html">Precedente</A> <A HREF="Posta-OFFline-HOWTO-3.html">Successivo</A> <A HREF="Posta-OFFline-HOWTO.html#toc2">Indice</A> <HR> <H2><A NAME="s2">2. Ricevere la posta</A></H2> <P> 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. <P>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 <I>nome utente + password</I> in chiaro), quindi da accesso alla mailbox tramite una serie di comandi che servono principalmente a <P> <UL> <LI>controllare quanti e quali messaggi si trovano nella mailbox</LI> <LI>prelevare i messaggi</LI> <LI>cancellare i messaggi</LI> </UL> <P>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. <P> <H2><A NAME="ss2.1">2.1 Popclient</A></H2> <P> L'ultima versione di popclient è prelevabile via ftp da <A HREF="ftp://sunsite.unc.edu/pub/Linux/system/Mail/pop">sunsite.unc.edu</A>. Nel momento in cui scrivo la versione corrente è la 3.0 ed il file relativo si chiama <CODE>popclient-3.0.tar.gz</CODE>. <P>Per un'uso base di popclient basta chiamarlo con le seguenti opzioni: <P> <BLOCKQUOTE><CODE> popclient -3 -u utente -p password -o /path/per/la/mia/mailbox nomehost </CODE></BLOCKQUOTE> <P>Dunque, vediamo un po' di analizzare questa linea di comando: <P> <UL> <LI><CODE>-3</CODE> sta ad indicare che usiamo il protocollo POP3;</LI> <LI><CODE>-u</CODE> deve essere seguito dal nostro nome-utente (il login);</LI> <LI><CODE>-p</CODE> deve essere seguito dalla nostra password sull'host remoto;</LI> <LI><CODE>-o</CODE> 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 è <CODE>/var/spool/mail/nome-utente</CODE> dove <CODE>nome-utente</CODE> è il nostro login sulla macchina Linux locale;</LI> <LI><CODE>nomehost</CODE> deve essere sostituito dal nome del server POP3.</LI> </UL> <P>Facciamo un esempio: <P>Il mio nome-utente è <CODE>pippo</CODE>, la password <CODE>baudo</CODE>, la mia mailbox sulla macchina locale si trova sotto <CODE>/var/spool/mail/pippo</CODE> ed il nome dell'host cui devo collegarmi per prelevare la posta è <CODE>katia.rai.it</CODE> ... dunque: <P> <BLOCKQUOTE><CODE> popclient -3 -u pippo -p baudo -o /var/spool/mail/pippo katia.rai.it </CODE></BLOCKQUOTE> <P><CODE>popclient</CODE> per default cancella la posta sull'host remoto dopo averla scaricata. Per disabilitare questa funzione aggiungi <CODE>-k</CODE> tra le opzioni. <P>Come mi ha fatto giustamente notare Alberto Menegazzi (flash.egon@iol.it), <CODE>fetchmail</CODE> sostituisce <CODE>popclient</CODE>, dal quale deriva. E' anche bene fare presente che <CODE>fetchmail</CODE>, a differenza di <CODE>popclient</CODE>, ha bisogno di un MDA locale per cui, se abbiamo modificato la configurazione di <CODE>sendmail</CODE> per l'uso della coda (come spiegato successivamente), ci troveremmo in difficoltà e l'unica soluzione consiste nell'interfacciare <CODE>fetchmail</CODE> a <CODE>procmail</CODE> inceve che a <CODE>sendmail</CODE>. Scusa il giro di parole :) <P>Per interfacciare direttamente <CODE>popclient</CODE> a <CODE>procmail</CODE> dobbiamo usare l'opzione <CODE>-c</CODE> invece di <CODE>-o</CODE> per cui un esempio di sintassi corretta potrebbe essere: <P> <BLOCKQUOTE><CODE> popclient -3 -u pippo -p baudo -c katia.rai.it | procmail </CODE></BLOCKQUOTE> <P>Per ulteriori spiegazioni: <P> <UL> <LI>lanciare <CODE>popclient</CODE> senza opzioni per avere un elenco delle opzioni passabili da linea di comando;</LI> <LI><CODE>man popclient</CODE> per avere una descrizione dettagliata di tutte le funzioni.</LI> </UL> <P> <H2><A NAME="ss2.2">2.2 Fetchpop</A></H2> <P> L'ultima versione di fetchpop è prelevabile via ftp da <A HREF="ftp://sunsite.unc.edu/pub/Linux/system/Mail/pop">sunsite.unc.edu</A>. 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 <CODE>fetchpop1.9.tar.gz</CODE>. <P>Uno dei vantaggi di fetchpop consiste nella possibilità di essere interfacciato direttamente a procmail (maggiori dettagli su procmail successivamente) usando l'opzione <CODE>-p</CODE> sulla linea di comando. <P>Per poter usare <CODE>fetchpop</CODE> 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 <CODE>fetchpop</CODE> viene lanciato come daemon (opzione <CODE>-d</CODE>). 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 <CODE>-d</CODE>. 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). <P>A questo punto <CODE>fetchpop</CODE> si è creato un file nella nostra home directory chiamato <CODE>.fetchhost</CODE> dove risiedono le informazioni che gli abbiamo dato in questa prima fase. D'ora in poi sarà sufficiente essere collegati alla rete e chiamare <CODE>fetchpop</CODE> con le opzioni <CODE>-r</CODE> e <CODE>-a</CODE> per poter ricevere la nostra posta, inclusi i messaggi eventualmente già letti (opzione <CODE>-a</CODE>) e, allo stesso tempo, rimuovere i messaggi sul server dopo averli prelevati (opzione <CODE>-r</CODE>). <P>Quindi la sintassi corretta sarà: <P> <BLOCKQUOTE><CODE> <PRE> fetchpop -a -r </PRE> </CODE></BLOCKQUOTE> <P>e, nel caso vogliamo usare procmail: <P> <BLOCKQUOTE><CODE> <PRE> fetchpop -a -r -p </PRE> </CODE></BLOCKQUOTE> <P>Per ulteriori spiegazioni: <P> <UL> <LI>lanciare <CODE>fetchpop -h</CODE> per avere un elenco delle opzioni su linea di comando;</LI> <LI><CODE>man fetchpop</CODE> per avere una descrizione dettagliata di tutte le funzioni.</LI> </UL> <P> <H2><A NAME="ss2.3">2.3 Fetchmail</A></H2> <P> Probabilmente in questo momento <CODE>fetchmail</CODE> è il migliore client in circolazione. Ritengo giusto tradurre e riportare le parti salienti del file README: <P> <BLOCKQUOTE><CODE> <PRE> ---------------------------------------------------------------------------- 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 ---------------------------------------------------------------------------- </PRE> </CODE></BLOCKQUOTE> <P>Bene, spero di averti convinto che <CODE>fetchmail</CODE> vale la pena di essere usato nei casi in cui un semplice client POP non è sufficiente. <P>In ogni caso tieni presente il problema già accennato alla fine della sezione relativa a <CODE>popclient</CODE>: <CODE>fetchmail</CODE> ha bisogno di un MDA locale per consegnare la posta quindi, se hai configurato <CODE>sendmail</CODE> per l'uso della coda (opzione defer), dovrai usare <CODE>procmail</CODE> 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 <CODE>fetchmail</CODE>. <P>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 <BLOCKQUOTE>attenzione a non confondere la parola hacker con cracker!</BLOCKQUOTE> e, come tale, sa come rendere più facile la vita di quelli che non lo sono :) <P>Facciamo un <CODE>cd /usr/src</CODE> e un <CODE>tar vxzf /percorso/per/fetchmail-1.9.tar.gz</CODE> in modo da ritrovarci il pacchetto originale scompattato sotto <CODE>/usr/src/fetchmail-1.9</CODE> <P>Ora entriamo nella directory di <CODE>fetchmail</CODE> e digitiamo <CODE>configure</CODE> <P>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 <CODE>make</CODE> <P>La compilazione dura molto poco (sul mio P60 con 16MB di RAM meno di un minuto). A questo punto basta diventare root e digitare <CODE>make install</CODE> per installare il programma in <CODE>/usr/local/bin</CODE> e la pagina di manuale in <CODE>/usr/local/man/man1</CODE>. Per cambiare queste directory bisogna modificare il Makefile dopo aver lanciato <CODE>configure</CODE> e prima di aver fatto partire la compilazione con <CODE>make</CODE>. <P>Per finire dobbiamo andarci a creare il file <CODE>~/.fetchmailrc</CODE> dandogli i giusti permessi con: <P> <BLOCKQUOTE><CODE> <PRE> chmod go-rwx,u=rw ~/.fetchmailrc </PRE> </CODE></BLOCKQUOTE> <P>Un esempio di <CODE>~/.fetchmailrc</CODE> è: <P> <BLOCKQUOTE><CODE> <PRE> poll host_remoto with protocol POP3: user tizio there with password secret1 is caio here; </PRE> </CODE></BLOCKQUOTE> <P>In questo modo stiamo dicendo a <CODE>fetchmail</CODE> di usare tutti i default (leggi la pagina di manuale al riguardo) e collegarsi al server <I>host_remoto</I> per prelevare tramite il protocollo POP3 la posta di <I>tizio</I>, il quale ha come password <I>secret1</I> e sulla macchina locale ha come login <I>caio</I>. <P>Per ulteriori spiegazioni: <P> <UL> <LI><CODE>fetchmail --help</CODE> per avere un elenco delle opzioni su linea di comando;</LI> <LI><CODE>man fetchmail</CODE> per avere una descrizione dettagliata di tutte le funzioni.</LI> </UL> <P> <H2><A NAME="ss2.4">2.4 Smistare la posta in arrivo, ovvero procmail</A></H2> <P> 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). <P>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. <P>Per dire a procmail come smistare la posta andiamo a crearci il file <CODE>~/.procmailrc</CODE> <P>Il file <CODE>~/.procmailrc</CODE> è composto da una serie di regole. Per semplificare le cose, diciamo che ogni regola inizia con una riga contenente <CODE>:0</CODE> seguita da una o più righe che descrivono una condizione (tali righe iniziano con un asterisco seguito da una espressione regolare estesa compatibile con <CODE>egrep</CODE>), quindi da un'altra riga che descrive l'azione da compiere se le condizioni sono verificate. Vediamo un esempio pratico: <P> <BLOCKQUOTE><CODE> <PRE> :0 * ^From.*tizio * ^Subject:.*patagarro patagarro </PRE> </CODE></BLOCKQUOTE> <P>Se il messaggio viene da <I>tizio</I> ed ha come soggetto <I>patagarro</I>, allora mettilo nella mailbox <I>patagarro</I>. Altro esempio: <P> <BLOCKQUOTE><CODE> <PRE> :0: * Pluto-meeting `date +%m-%y`/Pluto-meeting </PRE> </CODE></BLOCKQUOTE> <P>Se gli header del messaggio contengono la parola magica <I>Pluto-meeting</I> allora mettili in una folder che ha come nome la data corrente nel formato mese-anno più <CODE>/Pluto-meeting</CODE> <P> <BLOCKQUOTE><CODE> <PRE> :0 * From.*print-server | lpr </PRE> </CODE></BLOCKQUOTE> <P>In questo caso i messaggi provenienti da <I>print-server</I> vengono inviati direttamente in pasto alla stampante. <P>Per ulteriori spiegazioni: <P> <UL> <LI><CODE>man procmail</CODE> per avere una descrizione dettagliata di tutte le funzioni</LI> <LI><CODE>man procmailrc</CODE> per avere una descrizione del formato del file <CODE>~/.procmailrc</CODE></LI> <LI><CODE>man procmailex</CODE> per avere una serie di esempi da usare nel file <CODE>~/.procmailrc</CODE></LI> <LI><CODE>man grep</CODE> per avere una descrizione delle espressioni regolari estese compatibili con <CODE>egrep</CODE></LI> </UL> <P> <H2><A NAME="ss2.5">2.5 Un cenno su IMAP</A></H2> <P> 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 <CODE>it.comp.linux</CODE>: <P> <BLOCKQUOTE><CODE> <PRE> ---------------------------------------------------------------------------- > 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 / ---------------------------------------------------------------------------- </PRE> </CODE></BLOCKQUOTE> <P> <P> <HR> <A HREF="Posta-OFFline-HOWTO-1.html">Precedente</A> <A HREF="Posta-OFFline-HOWTO-3.html">Successivo</A> <A HREF="Posta-OFFline-HOWTO.html#toc2">Indice</A> </BODY> </HTML>