[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]

94. Messaggi giunti presso recapiti remoti

I messaggi di posta elettronica non vengono sempre recapitati presso l'elaboratore che si utilizza abitualmente. Questa è la situazione tipica in cui ci si trova quando si è collegati a Internet tramite un ISP, per mezzo di una linea commutata. Di solito si ottiene un accesso (account) presso un elaboratore dell'ISP e questo diventa solitamente anche il recapito per la posta elettronica.

Il problema è comunque generale: si può avere la necessità di scaricare la posta ricevuta presso un recapito remoto.

La prima idea che può venire in mente può essere quella di usare Telnet e leggere così la posta remota. Ma questa non è la soluzione corretta. Per trasferire la posta da un recapito a un altro, si usa il protocollo POP3 (a volte POP2) oppure IMAP. Come si può immaginare, si tratta di un servizio che deve essere gestito da un demone.

Il modo con cui vengono scaricati messaggi e inseriti nel sistema locale ha dei risvolti importanti. Infatti, questi messaggi possono essere scaricati in un file locale, che normalmente corrisponde alla casella postale dell'utente, il quale può leggerla attraverso mail o un altro programma che sfrutta lo stesso meccanismo. In alternativa, i messaggi potrebbero essere inseriti nel sistema locale attraverso un servizio SMTP, che in tal caso però, dovrebbe essere attivato necessariamente.

94.1 Concetti generali

Quando la posta elettronica è giunta presso un recapito remoto, senza essere stata ridiretta da lì attraverso un alias o un forward per la sua prosecuzione, può essere prelevata per mezzo di vari protocolli, tra cui i più importanti sono POP2, POP3 e IMAP.

Il prelievo fatto in questo modo, può tradursi poi:

Ognuna delle scelte possibili ha dei vantaggi e degli svantaggi. Il primo tipo di operazione, non richiede la presenza di un server SMTP locale, e nemmeno di un MDA, cioè di un Mail Delivery Agent, per la consegna locale del messaggio. Così si presta perfettamente all'uso presso nodi isolati che possono connettersi a Internet attraverso una linea commutata, e solo allora trasmettono e ricevono la posta elettronica.

Il secondo tipo di operazione richiede la presenza di un MDA, composto generalmente da un programma in grado di ricevere i messaggi attraverso lo standard input, che poi sia in grado di recapitarli localmente, ed eventualmente di farli proseguire altrove attraverso gli alias e i forward eventuali. In pratica però, l'MDA a cui si fa riferimento è quasi sempre Sendmail, o un altro sistema compatibile. Il vantaggio di questa scelta è che per attuarla non occorre attivare il servizio SMTP, cioè non è necessario che Sendmail sia stato avviato come demone in ascolto della porta SMTP.

L'ultimo caso richiede invece che localmente sia presente un MTA completo, in grado di ricevere le connessioni SMTP. I motivi per cui non si riceve la posta direttamente nel nodo locale, possono essere vari: la connessione con l'esterno potrebbe essere discontinua, come nel caso di un collegamento PPP attraverso linea commutata; il sistema remoto presso cui giunge la posta per qualche motivo, potrebbe avere delle politiche che impediscono la prosecuzione dei messaggi (il forward); il sistema locale potrebbe essere irraggiungibile dall'esterno a causa delle politiche di sicurezza adottate, e per lo stesso motivo, la posta elettronica potrebbe non essere trasferita localmente, lasciando l'onere a ogni nodo di prelevarsela da un server principale.

Quando si utilizza l'ultimo tipo di trasferimento, e anche quando si utilizza il secondo, il programma che lo fa interviene come se fosse un MTA vero e proprio. In tal senso, potrebbe essere attivato periodicamente attraverso il sistema Cron, a intervalli brevi, oppure come un demone.

94.1.1 Autenticazione

Il prelievo della posta remota è un'operazione personale dell'utente che ha l'accesso presso il sistema remoto. Il programma che si usa per accedere a uno di questi servizi che lo permettono, deve identificarsi in qualche modo, e di solito si tratta di fornire l'identità dell'utente remoto e la password.

Il fatto di lasciare viaggiare la password in chiaro, attraverso la rete, è un problema da non trascurare: finché la connessione è diretta (o quasi, come nel caso di una linea commutata), il problema è minimo; quando la connessione attraversa più nodi, il problema diventa delicato.

Oltre a questo, occorre considerare che le informazioni delicate come le password non possono apparire in una riga di comando, perché sarebbero leggibili semplicemente analizzando l'elenco dei processi attivi. Per questo, quando si vuole automatizzare il processo di recupero della posta remota senza dover ogni volta inserire la password, questa può essere annotata soltanto in un file di configurazione, protetto opportunamente contro ogni accesso da parte di altri utenti.

94.2 ipop3d, ipop2d, imapd

ipop3d, ipop2d e imapd, sono i demoni per i servizi di trasferimento della posta locale verso i client che lo richiedono, e che mostrano le credenziali necessarie. Permettono rispettivamente di utilizzare i protocolli POP3, POP2 e IMAP. Sono gestiti dal supervisore inetd e filtrati da tcpd.

Nell'esempio seguente, vengono mostrate le righe di /etc/inetd.conf in cui si dichiara il loro possibile utilizzo.

pop-2   stream  tcp     nowait  root    /usr/sbin/tcpd	ipop2d
pop-3   stream  tcp     nowait  root    /usr/sbin/tcpd	ipop3d
imap    stream  tcp     nowait  root    /usr/sbin/tcpd	imapd

Questi tre demoni fanno parte normalmente di un unico pacchetto di GNU/Linux: Imap.

94.3 Popclient

Popclient è un programma molto semplice che permette di scaricare la posta da un recapito remoto utilizzando il protocollo POP2 o POP3, inserendola in un file che corrisponda alla casella postale dell'utente nel nodo locale, oppure passandola a un MDA (Mail Delivery Agent). In questo modo, una volta scaricata, la posta può essere letta con un programma tradizionale come Mailx.

È importante sottolineare che per questo scopo, non è necessario che sia attivo un server SMTP locale, ed è questo punto che può rendere vantaggioso l'utilizzo di Popclient al posto di Fetchmail.

94.3.1 $ popclient

popclient [<opzioni>] [<host-remoto>]

popclient è l'eseguibile che compie tutto il lavoro di Popclient. Può essere predisposto anche un file di configurazione, che permette l'automazione delle operazioni.

Nelle opzioni della riga di comando, si può osservare che non è stata indicata la possibilità di inserire la password. Infatti, non è possibile; per non dover inserire la password ogni volta che si scarica la posta, è necessario predisporre un file di configurazione.

Alcune opzioni

-2

Viene utilizzato il protocollo POP2.

-3

Viene utilizzato il protocollo POP3.

-k | --keep

Copia i messaggi dal server remoto senza cancellarli da lì.

-s | --silent

Non mostra i messaggi di progressione dell'operazione.

-v | --verbose

Visualizza attraverso lo standard error tutti i messaggi che intercorrono tra il programma e il server remoto.

-u <utente> | --u <utente>

Permette di specificare il nome dell'utente così come è registrato nel sistema remoto. Il valore predefinito è il nome dell'utente così come è conosciuto nel sistema locale.

-r <cartella-remota> | --remote <cartella-remota>

Permette di specificare una cartella della posta nel server remoto, diversa da quella predefinita. Dipende dal server remoto se questa cartella alternativa esiste. Questa opzione può essere utilizzata solo con il protocollo POP2.

-o <cartella-locale> | --local <cartella-locale>

Permette di specificare una cartella della posta locale alternativa. Quando non viene specificata una cartella per la posta ricevuta, si intende quella predefinita dal sistema locale.

-c | --stdout

Permette di emettere attraverso lo standard output la posta, invece di utilizzare la cartella della posta.

Codici di uscita

0   Uno o più messaggi sono stati caricati.

1   Non c'è posta.

2   Errore nell'apertura di un socket.

3   L'autentificazione dell'utente è fallita: il nome dell'utente o la password sono errati.

4   Errore generico nel protocollo di comunicazione.

5   Errore di sintassi nell'uso degli argomenti di popclient.

6   Errore generico nella registrazione della posta nella cartella locale.

7   Errore generico riportato dal server remoto. Riguarda il protocollo POP3.

10   Errore indefinito.

94.3.2 Configurazione

Popclient può essere configurato in modo personale attraverso il file ~/.poprc. In tal modo, l'utente può predisporre tutti i dati necessari ad automatizzare la connessione senza la necessità di utilizzare script o comandi pieni di opzioni. In particolare, attraverso il file personalizzato di configurazione, si può predisporre anche la password necessaria a prelevare la posta.

Si può leggere eventualmente la pagina di manuale popclient(1).

L'esempio seguente mostra uno script che utilizza la riga di comando di popclient per tutto ciò che è possibile fare in questo modo. La password per accedere al server remoto deve essere fornita subito dopo l'avvio dello script .

#!/bin/bash
#======================================================================
# posta-remota
#
# Carica la posta da un elaboratore remoto utilizzando il protocollo
# pop-3 e la deposita in un file «inbox».
# Non utilizza alcun argomento dalla riga di comando, ma richiede
# l'inserimento della password durante l'esecuzione.
#======================================================================

#======================================================================
# Variabili.
#======================================================================

    #------------------------------------------------------------------
    # Il nome dell'elaboratore dal quale si scarica la posta.
    #------------------------------------------------------------------
    COMPUTER_POP="weizen.mehl.dg"
    #------------------------------------------------------------------
    # Il nome dell'utente così come è registrato nell'elaboratore POP.
    #------------------------------------------------------------------
    UTENTE="tizio"
    #------------------------------------------------------------------
    # Il file in cui si vuole che sia depositata la posta scaricata
    # dall'elaboratore POP.
    #------------------------------------------------------------------
    INBOX="~/mail/inbox"

#======================================================================
# Inizio.
#======================================================================

    #------------------------------------------------------------------
    # Tenta di caricare la posta dall'elaboratore remoto.
    #------------------------------------------------------------------
    if popclient -3 -o $INBOX -u $UTENTE $COMPUTER_POP
    then
	#--------------------------------------------------------------
	# L'operazione è riuscita, avvisa del successo.
	#--------------------------------------------------------------
	echo "È stata scaricata posta da $COMPUTER_POP all'interno \
di $INBOX"
    else
	#--------------------------------------------------------------
	# L'operazione non è riuscita.
	#--------------------------------------------------------------
	echo "Non ci sono messaggi nuovi nel server $COMPUTER_POP."
    fi

#======================================================================
# Fine.
#======================================================================

Prima di poter eseguire uno script è importante ricordare di attribuirgli i permessi di esecuzione necessari.

chmod +x <nome-del-file>

---------

In alternativa, per ottenere lo stesso risultato dello script, si può realizzare un file di configurazione come quello seguente, dove, in particolare, è possibile inserire anche la password.

# .poprc

server	weizen.mehl.dg		\
	proto pop3		\
	user tizio		\
	pass tazza		\
	localfolder /home/tizio/mail/inbox

94.4 Fetchmail

Fetchmail è un sistema di recupero della posta remota molto complesso. Permette di inserire i messaggi ottenuti nel sistema di consegna locale attraverso un MDA come Sendmail; oppure può utilizzare direttamente il protocollo SMTP per ottenere lo stesso risultato, o per inserire i messaggi in un sistema di trasporto più vicino (quale quello di una rete locale).

Può funzionare anche come demone personale (di un utente) in modo da provvedere regolarmente allo scarico dei messaggi.

Fetchmail ha il vantaggio di poter utilizzare una grande varietà di protocolli fatti per questo scopo. In linea di massima ci si può concentrare sui soliti POP2, POP3 e IMAP, ma è bene tenere presente che le possibilità sono maggiori, nel caso si presentasse l'occasione.

L'eseguibile fetchmail può essere gestito molto bene attraverso la riga di comando, ma è consigliabile anche la sua configurazione attraverso il file ~/.fetchmailrc, che permette di agevolare le operazioni di routine.

In queste sezioni vengono mostrati solo alcuni aspetti di Fetchmail, il cui utilizzo può essere approfondito attraverso la consultazione della sua documentazione originale: fetchmail(1).

94.4.1 $ fetchmail

fetchmail [<opzioni>] <host-remoto>

Permette di caricare la posta posta elettronica da un recapito remoto avendo a disposizione la scelta di un gran numero di protocolli per questo scopo. La posta caricata viene immessa automaticamente nel sistema locale di posta del'utente che ha utilizzato il programma.

L'eseguibile fetchmail dovrebbe poter funzionare anche soltanto per mezzo delle indicazioni passate attraverso la riga di comando. In pratica potrebbe non essere così, e si può essere costretti a definire in ogni caso il file di configurazione ~/.fetchmailrc.

Se si pone un conflitto tra quanto specificato tramite le opzioni della riga di comando e le direttive del file di configurazione, le prime prendono il sopravvento.

Alcune opzioni

-a | --all

Scarica tutti i messaggi, compresi quelli che risulta siano già stati visti.

-k | --keep

Non cancella i messaggi che vengono scaricati.

-u <utente-remoto> | --username <utente-remoto>

Specifica precisamente il nome da utilizzare per accedere al server remoto. Se non viene indicata questa informazione (attraverso la riga di comando, oppure attraverso la configurazione), si intende lo stesso nome utilizzato nel sistema locale.

-t <n-secondi> | --timeout <n-secondi>

Permette di stabilire un tempo massimo per la connessione, oltre il quale Fetchmail deve abbandonare il tentativo.

-d <n-secondi> | --daemon <n-secondi>

Avvia Fetchmail in modalità demone, cioè sullo sfondo, allo scopo di eseguire la scansione dei server in modo regolare. L'argomento esprime la durata dell'intervallo tra una scansione e l'altra, espresso in secondi.

Ogni utente può avviare una sola copia dell'eseguibile fetchmail in modalità demone; tuttavia, se si tenta di avviare una nuova copia di fetchmail, quando è già attivo il demone, ciò fa sì che venga eseguita immediatamente una nuova scansione.

94.4.2 ~/.fetchmailrc

Il file di configurazione di Fetchmail è molto importante. È interessante notare che non esiste un file di configurazione generale, ma solo quelli dei singoli utenti, e questo è ragionevole, dal momento che il recupero della posta elettronica è un'operazione personale.

Per motivi di sicurezza, dal momento che questo file può contenere informazioni delicate, è necessario che questo abbia esclusivamente i permessi di lettura e scrittura per l'utente proprietario (0600). Se il file ha permessi maggiori, Fetchmail avverte e si rifiuta di proseguire.

Prima di analizzare la sintassi che può essere utilizzata al suo interno, si può notare che i commenti vengono espressi nel modo consueto, attraverso il simbolo # che li introduce, dove poi tutto quello che segue, fino alla fine della riga, viene ignorato. Così anche le righe bianche e quelle vuote vengono ignorate.

Ogni direttiva del file ~/.fetchmailrc contiene tutte le specifiche riferite al recupero della posta elettronica da un server determinato. Queste direttive possono impiegare più righe, senza la necessità di indicare simboli di continuazione, e si distinguono perché iniziano con la parola chiave poll, oppure skip.

Una direttiva poll rappresenta un server da interpellare, mentre una direttiva skip, uno da saltare. Di fatto non serve una direttiva skip, ma può essere utile per evitare di cancellarla, riservando per il futuro la possibilità di riutilizzarla rimettendo la parola chiave poll.

Le direttive sono composte da una serie di parole chiave che rappresentano delle opzioni, a volte accompagnate da un argomento. Alcune parole chiave sono speciali, e pur non avendo alcun significato, sono utili per facilitare la lettura delle direttive. Tali parole sono: and, with, has, wants e options. Nello stesso modo, possono essere usati la virgola, il punto e virgola e i due punti, che vengono ignorati ugualmente.

All'interno di ogni direttiva, deve essere rispettato un certo ordine nell'indicazione delle opzioni. Se ne distinguono due tipi: opzioni del server e opzioni dell'utente. Le opzioni del server devono apparire prima di quelle dell'utente.

Per comprendere il senso di queste direttive, è bene fare mente locale al formato generale semplificato, che queste possono avere.

poll <server> [protocol <protocollo>] [username <utente-remoto>] [password <password>]

Gli argomenti delle opzioni che rappresentano delle stringhe, possono essere racchiusi tra apici doppi, in modo da poter contenere simboli particolari, come gli spazi (specialmente quando si tratta di indicare le password).

Alcune opzioni del server

poll <server> | skip <server>

Specifica l'accesso a un server. Se si usa la parola chiave skip, tutta la direttiva viene ignorata.

proto <protocollo> | protocol <protocollo>

Il tipo di protocollo da utilizzare, viene determinato normalmente in modo automatico. Con questa opzione può essere specificato espressamente, e si possono indicare i nomi seguenti.

Si noti anche che queste parole chiave possono essere espresse anche utilizzando solo lettere minuscole.

port <n-porta>

Permette di specificare il numero della porta da utilizzare, nel caso il server ne utilizzi una non standard.

timeout <n-secondi>

Specifica il tempo massimo di inattività, dopo il quale si conclude la connessione, o il suo tentativo.

interface <interfaccia>/<numero-ip>/<maschera>

Permette di specificare un'interfaccia di rete, assieme al gruppo di indirizzi che deve avere, prima di tentare la connessione con il server remoto.

Alcune opzioni dell'utente

user <utente-remoto> | username <utente-remoto>

Specifica il nome da utilizzare per accedere al sistema remoto.

is <utente-remoto> here

Rappresenta il nome dell'utente locale che deve ricevere il messaggio. Di solito non si specifica, essendo quello che effettua l'operazione di recupero.

pass <password> | password <password>

La password per accedere al sistema remoto.

fetchall

Richiede espressamente il recupero di tutti i messaggi, compresi quelli già prelevati, ma mantenuti nel server per qualche motivo.

limit <n-byte>

Fissa la dimensione massima dei messaggi che possono essere prelevati. Quelli che eccedono tale limite, vengono lasciati nel server, e risultano «non letti».

syslog

Utilizza il registro di sistema per annotare gli errori.

Esempi

Negli esempi viene mostrato l'uso di parole chiave che non sono state descritte. In ogni caso, il loro significato dovrebbe risultare intuitivo.

poll roggen.brot.dg protocol pop3 username tizio password "frase segreta"

Rappresenta la scansione del server roggen.brot.dg con il protocollo POP3, utilizzando il nominativo-utente tizio che richiede la password frase segreta (che appare opportunamente tra virgolette).

poll roggen.brot.dg protocol pop3 username tizio password "frase segreta"
poll schwarz.brot.dg username tizio1 password "ciao ciao"

Qui si prevede la scansione di due server, dove nel secondo caso non viene specificato il protocollo, e anche il nominativo utilizzato risulta differente dal primo.

poll roggen.brot.dg
    protocol pop3
    username tizio
    password "frase segreta"

poll schwarz.brot.dg
    username tizio1
    password "ciao ciao"

Come nell'esempio precedente, ma più strutturato, e più facile da leggere.

poll roggen.brot.dg protocol pop3
    username tizio password "frase segreta" is tizio here
    username caio password "ciao caio" is caio2 here
    username pippo password "marameo maramao" is pippo here

In questo caso, per uno stesso server sono stati indicati diversi utenti remoti e locali. Per intendere il senso, si osservi che l'utente remoto caio corrisponde all'utente locale caio2.

Evidentemente, per ottenere un tale risultato, è necessario che l'utente che avvia Fetchmail conosca tutte le password di questi utenti. Probabilmente ciò è possibile quando si tratta di root.

94.5 MUA completi

Trattando l'argomento del trasferimento della posta remota, non bisogna dimenticare i programmi MUA (Mail User Agent) che si arrangiano a scaricarsela. L'esempio più comune è Netscape.

Utilizzando un MUA di questo tipo, se si dispone di un elaboratore connesso saltuariamente a Internet, non serve alcun sistema di gestione della posta elettronica locale, e nemmeno alcun programma per scaricarla dal recapito presso il provider.

D'altro canto, se si vuole gestire la posta elettronica localmente, e si intende usare un programma come Netscape per leggerla e inviarla, si è costretti ad attivare il server SMTP e anche il servizio POP3 per poterla prelevare dallo stesso elaboratore locale.

---------------------------

Appunti Linux 1999.09.21 --- Copyright © 1997-1999 Daniele Giacomini --  daniele @ pluto.linux.it


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]