Capitolo successivo Capitolo precedente Indice

58. E-mail

L'invio di messaggi e-mail si basa su un MTA (Mail Transfer Agent) locale, che, quando riceve una richiesta di invio di un messaggio, si occupa di mettersi in contatto con un suo ``collega'' presso l'indirizzo di destinazione, o se necessario in una destinazione intermedia, che si prenderà cura di consegnare il messaggio o di reinoltrarlo. Tutto quanto sembra molto semplice a dirsi, in realtà la configurazione di un MTA potrebbe essere molto complessa.

Spesso, in presenza di una rete locale, il funzionamento corretto dell'MTA richiede la predisposizione di un name server locale. A tale proposito conviene consultare il capitolo `DNS'.

L'MTA più diffuso nei sistemi Unix è Sendmail.

L'invio di messaggi e-mail avviene solitamente attraverso l'uso di un programma adatto alla loro composizione, che poi si mette in comunicazione con l'MTA per l'inoltro del messaggio. Più precisamente, un messaggio di posta inviato a un utente del computer locale non richiede alcun MTA, mentre l'invio a un altro computer richiede almeno la presenza di un MTA presso l'indirizzo di destinazione.

58.1 Sendmail

Come accennato, Sendmail è l'MTA più diffuso nei sistemi Unix, e anche nelle distribuzioni Linux viene utilizzato in modo predefinito. Il pregio di Sendmail è la sua estrema configurabilità. Il suo difetto è lo stesso pregio: l'estrema configurabilità implica una estrema complessità.

Solitamente, Sendmail viene distribuito già configurato in modo standard e qui si vuole solo vedere quel poco che può valere la pena di modificare.

# sendmail

sendmail [<opzioni>]

sendmail è l'MTA standard dei sistemi Unix Viene usato normalmente in background, come daemon, avviato dalla stessa procedura di inizializzazione del sistema. In questo modo, resta in ascolto della porta smtp (25).

Alcune opzioni

-bd

Fa si che sendmail funzioni in background come daemon. Questo è il tipico modo di utilizzo di sendmail.

/etc/sendmail.cf

Si tratta del file di configurazione di sendmail. La modifica di questo file dovrebbe essere evitata, a meno di non conoscere bene la sua sintassi. In effetti, le potenzialità di sendmail dipendono dalla complessità di questo file.

/etc/aliases

Attraverso questo file è possibile configurare una serie di alias per facilitare l'invio di messaggi e-mail. Segue un esempio di questo file.

#
#       @(#)aliases     8.2 (Berkeley) 3/5/94
#
#  Aliases in this file will NOT be expanded in the header from
#  Mail, but WILL be visible over networks or from /bin/mail.
#
#       >>>>>>>>>>      The program "newaliases" must be run after
#       >> NOTE >>      this file is updated for any changes to
#       >>>>>>>>>>      show through to sendmail.
#

# Basic system aliases -- these MUST be present.
MAILER-DAEMON:  postmaster
postmaster:     root

# General redirections for pseudo accounts.
bin:            root
daemon:         root
games:          root
ingres:         root
nobody:         root
system:         root
toor:           root
uucp:           root

# Well-known aliases.
manager:        root
dumper:         root
operator:       root

# trap decode to catch security attacks
decode:         root

# Person who should get root's mail
#root:          marc

Questo file non viene utilizzato così com'è, deve essere prima tradotto nel file /etc/aliases.db attraverso il comando newaliases.

$ newaliases

newaliases

Si tratta di un link a sendmail. Quando sendmail viene avviato con questo nome genera un nuovo file /etc/aliases.db a partire dal sorgente /etc/aliases.

/var/spool/mqueue/*

La directory /var/spool/mqueue/ è il deposito della posta in attesa di inoltro. Per sapere se un messaggio è stato effettivamente inviato, occorre controllare che questa directory sia vuota. Per questo, si può utilizzare il comando mailq che restituisce lo stato di questa directory.

$ mailq

mailq

Si tratta di un link a sendmail. Quando sendmail viene avviato con questo nome, legge il contenuto di /var/spool/mqueue/ ed elenca in breve i messaggi e-mail rimasti nella coda.

L'esempio seguente, mostra i file di due messaggi che non sono stati recapitati per motivi diversi.

# ls -l /var/spool/mqueue [Invio]

total 4
-rw-------   1 root     mail           16 Sep 12 21:01 dfVAA03244
-rw-------   1 root     mail           10 Sep 12 21:09 dfVAA03507
-rw-------   1 root     mail          507 Sep 12 21:02 qfVAA03244
-rw-------   1 root     mail          535 Sep 12 21:09 qfVAA03507

Con mailq si ottiene invece una visione più chiara, e soprattutto accessibile anche all'utente normale.

In effetti, la directory /var/spool/mqueue/ e il suo contenuto non possono essere accessibili agli utenti normali, altrimenti la posta in partenza potrebbe essere letta.

$ mailq [Invio]

                Mail Queue (2 requests)
--Q-ID-- --Size-- -Priority- ---Q-Time--- -----------Sender/Recipient-----------
VAA03244       16      30065 Sep 12 21:01 root
                 (Deferred: No route to host)
                                          daniele@paperone.zagozigo.dg
VAA03507       10      30066 Sep 12 21:09 root
                 (Deferred: Connection refused by paperone.zagozigo.dg.)
                                          root@paperone.zagozigo.dg

L'uso di mailq è molto importante per verificare che i messaggi siano stati inviati, specialmente quando si utilizza un collegamento su linea commutata: prima di interrompere la comunicazione, conviene verificare che non siano rimasti messaggi in coda.

58.2 E-mail user agent

Per scrivere, inviare e leggere i messaggi e-mail si utilizza normalmente un un programma apposito. Programmi di questo tipo se ne possono trovare in grande quantità. Quello storicamente più importante e comunque quasi sempre presente nei sistemi Unix è Berkeley Mail.

$ mail

mail [<opzioni>] [<destinatario>... ]

È un programma di gestione della posta, originariamente parte dello Unix di Berkeley. Si tratta di un programma piuttosto scomodo da gestire, ma ha il vantaggio di poter utilizzare lo standard input come fonte per un testo da inviare. Di conseguenza, è ottimo per l'utilizzo all'interno di script.

Vedere mail(1).

Opzioni

-v

Visualizza un maggior numero di informazioni.

-i

Ignora i segnali di interruzione. È utile quando si utilizza mail attraverso linee telefoniche disturbate.

-I

Forza un funzionamento interattivo.

-n

Non legge il file /etc/mail.rc quando viene avviato.

-N

Inibisce la visualizzazione delle intestazioni dei messaggi quando viene letta o modificata la cartella della posta.

-s <oggetto>

Permette di definire l'oggetto già nella riga di comando. Se si intendono utilizzare spazi, l'oggetto deve essere racchiuso tra virgolette.

-c <elenco-destinatari>

Permette di definire un elenco di destinatari di una copia (copia carbone) del documento. L'elenco degli indirizzi di destinazione è fatto utilizzando la virgola come simbolo di separazione (comma delimited).

-b <elenco-destinatari>

Permette di definire un elenco di destinatari di una copia carbone che non vengono menzionati nella testata del documento (blind carbon copy). L'elenco degli indirizzi di destinazione è fatto utilizzando la virgola come simbolo di separazione (comma delimited).

-f <cartella-della-posta>

Permette di leggere la posta contenuta all'interno di un file determinato.

Funzionamento

Invio della posta

Per inviare della posta a una o più persone, è sufficiente avviare mail utilizzando come argomento gli indirizzi di destinazione delle persone da raggiungere. Per concludere l'inserimento del testo è sufficiente inserire un punto, . all'inizio di una nuova riga.

Lettura della posta ricevuta

Per controllare la centrale della posta e per leggere la posta eventualmente ricevuta, è sufficiente avviare mail senza argomenti. mail visualizzerà un elenco numerato delle descrizioni dell'oggetto di ogni lettera ricevuta. Una volta avviato mail, questo presenta il suo invito rappresentato da una e-commerciale, &, dal quale è possibile dare dei comandi a mail. In particolare è, possibile inserire il numero del messaggio che si vuole leggere. Per leggere il successivo sarà sufficiente premere il carattere +, mentre per rileggere quello precedente è sufficiente premere il carattere -.

Gestione della posta ricevuta

Dopo aver letto un messaggio, lo si può cancellare con il comando delete o si può rispondere con il comando reply. La cancellazione della posta non è irreversibile. Di solito, si possono recuperare dei messaggi attraverso il comando undelete; però i messaggi cancellati risultano di fatto invisibili.

Gruppi di messaggi

Alcuni comandi di mail accettano l'indicazione di gruppi di messaggi. Per esempio, delete 1 5 cancellerà i messaggi numero 1 e 5, delete 1-5 cancellarà i messaggi da 1 a 5. Il simbolo * viene utilizzato per identificare tutti i messaggi, mentre il simbolo $ rappresenta l'ultimo messaggio. Un tipico caso di utilizzo dell'asterisco come gruppo totale dei messaggi è il seguente: top * che permette così di visualizzare le prime righe di tutti i messaggi ricevuti.

Conclusione della elaborazione della posta

Per concludere la sessione di lavoro con mail è sufficiente utilizzare il comando quit. La posta letta (e non segnata per la cancellazione) viene trasferita nel file ~/mbox, mentre quella non letta rimane nella centrale della posta.

pine

Si tratta di un programma per la gestione della posta più potente e pratico rispetto al normale mail ( mail), che consente anche la lettura dei news (la licenza d'uso è riportata in appendice `Pine').

Avvio di pine

pine [<opzioni>] [<indirizzo>]

Quando viene avviato per la prima volta da un utente, pine si crea una directory ~/mail contenente ~/mail/saved-messages e ~/mail/sent-mail entrambi vuoti e un file di configurazione ~/.pinerc. Dopo una prima schermata di presentazione, pine mostra il suo menu.

       ?     HELP               -  Get help using Pine

       C     COMPOSE MESSAGE    -  Compose and send a message

       I     FOLDER INDEX       -  View messages in current folder

       L     FOLDER LIST        -  Select a folder to view

       A     ADDRESS BOOK       -  Update address book

       S     SETUP              -  Configure or update Pine

       Q     QUIT               -  Exit the Pine program

   Copyright 1989-1996.  PINE is a trademark of the University of Washington.

? Help                     P PrevCmd                  R RelNotes
O OTHER CMDS L [ListFldrs] N NextCmd                  K KBLock

Configurazione

Probabilmente, la cosa più utile da fare la prima volta che si utilizza questo programma, è quella di configurarlo, utilizzando la lettera S come sinonimo di Setup. Si ottiene un sottomenu:

Choose a setup task from the menu below :
? Help        P [Printer]   C Config     S Signature
^C Cancel     N Newpassword U Update

Premendo la lettera C come sinonimo di Config si arriva alla maschera di configurazione. La maschera non può essere contenuta tutta in una sola schermata, di conseguenza, si utilizzano la barra spaziatrice, [Spazio], per scorrerla in avanti, e il segno [-] per scorrerla all'indietro. Quella seguente è la prima parte della configurazione predefinita (cioè quella iniziale) dell'utente paperino.

personal-name            = <No Value Set: using "Paperino">
user-domain              = <No Value Set>
smtp-server              = <No Value Set>
nntp-server              = <No Value Set>
inbox-path               = <No Value Set: using "inbox">
folder-collections       = <No Value Set: using mail/[]>
news-collections         = <No Value Set>
incoming-archive-folders = <No Value Set>
pruned-folders           = <No Value Set>
default-fcc              = <No Value Set: using "sent-mail">
default-saved-msg-folder = <No Value Set>
postponed-folder         = <No Value Set: using "postponed-msgs">
read-message-folder      = <No Value Set>
signature-file           = <No Value Set: using ".signature">
global-address-book      = <No Value Set>
address-book             = <No Value Set: using .addressbook>
...

Vale la pena di definire almeno la prima parte. Per inserire un dato nuovo si usa la lettera [a] come sinonimo di add, mentre per modificare un valore preesistente si uilizza la lettera [c] come sinonimo di change. Per cancellare una voce si utilizza la lettera [d] come sinonimo di delete. Alcune voci consentono l'inserimento di dati multipli utilizzando una successione di richieste di inserimento.

Elementi di configurazione

Segue un elenco parziale della descrizione degli elementi che possono essere configurati.

personal-name

Si riferisce al nome che si vuole fare apparire come mittente della posta inviata.

user-domain

Si tratta del dominio dell'utente, ovvero l'indirizzo del computer presso il quale si vuole ricevere la posta.

smtp-server

Si tratta dell'indirizzo del computer attraverso il quale si invia la posta: potrebbe trattarsi del nome completo del proprio computer, di un altro all'interno della propria rete locale, o di quello dell'ISP (Internet Service Provider).

nntp-server

È l'indirizzo del computer utilizzato per i servizi NNTP (Network News Transfer Protocol), quello che quindi permette di accedere alla lettura di USENET. Possono essere indicati diversi server NNTP.

inbox-path

Indica il percorso (pathname) del file usato come cartella della posta in ingresso. In un sistema normale potrebbe trattarsi di /var/spool/mail/<utente>, oppure di qualunque altro file se il proprio sistema è configurato diversamente per la gestione della posta.

folder-collections

Letteralmente è la raccolta delle cartelle. Si riferisce alle directory contenenti file di posta. pine da solo crea la directory ~/mail, ma ne possono essere usati diversi contemporaneamente. Ogni directory indicata è seguita da due parentesi quadre: una aperta e una chiusa.

news-collections

Permette di definire le collezioni di news a cui si è interessati.

incoming-archive-folders

Permette di definire una serie di coppie di cartelle di posta (le coppie sono separate da uno spazio) per il salvataggio automatico della posta letta. Quando si legge la posta contenuta nelle cartelle di ingresso (la prima cartella di ogni coppia), questa viene automaticamente segnata come letta e trasferita nelle cartelle di archiviazione (la seconda cartella di ogni coppia). Questa funzionalità viene attivata dal flag auto-move-read-messages.

pruned-folders

Permette di definire l'elenco di cartelle che possono essere ``potate'' mensilmente come già definito automaticamente per la cartella della posta inviata. Con questo termine, potatura, si intende l'archiviazione delle cartelle in questione ogni mese, utilizzando un nome preceduto dal nome del mese. Contemporaneamente si intende la cancellazione di eventuali archivi della stessa serie di mesi precedenti.

default-fcc

Definisce il file destinatario di una copia carbone dei messaggi inviati (File Carbon Copy). Il valore predefinito corrisponde in pratica a ~/mail/sent-mail.

default-saved-msg-folder

Definisce il file predefinito per il salvataggio dei messaggi.

postponed-folder

Definisce il file utilizzato per contenere i messaggi sospesi che verranno inviati in seguito. Il valore predefinito corrisponde in pratica a ~/mail/postponed-msgs.

read-message-folder

Permette di definire una cartella (cioè un file) da utilizzare per scaricare automaticamente lì la posta letta.

signature-file

Definisce il nome del file da utilizzare come firma, ovvero come parte terminale standard dei propri messaggi.

address-book

Definisce il nome del file usato come rubrica personale di indirizzi. Il valore predefinito corrisponde a ~/.address-book.

feature-list

Permette di configurare una serie di flag di pine. Per selezionare o deselezionare un flag si utilizza la lettera X.

initial-keystroke-list

Consente di indicare una sequenza di tasti (una macro) da premere automaticamente ogni volta che si avvia pine.

default-composer-hdrs

Permette di definire la parte di intestazione dei messaggi che si intendono utilizzare. Se viene utilizzata questa indicazione, occorre definire tutte le parti dell'intestazione dei messaggi.

customized-hdrs

Definisce la parte di testata aggiuntiva da utillizzare nei messaggi quando si specifica espressamente di voler utilizzare la così detta ``testata ricca''.

sort-key

Permette di definire l'ordine in cui devono apparire i messaggi all'interno delle varie cartelle.

addrbook-sort-rule

Permette di definire l'ordine in cui devono apparire gli indirizzi della rubrica.

character-set

Permette di definire il set di caratteri utilizzato per la composizione del testo. Il valore predefinito è US-ASCII, altri valori potrebbero essere ISO-8859-n, dove n rappresenta un numero compreso tra 1 e 9.

editor

Permette di specificare il nome di un programma per la scrittura di testi alternativo a quello fornito da pine. Per attivare questa funzione, oltre a indicare qui il nome del programma alternativo, occorre impostare anche il flag enable-alternate-editor.

speller

Permette di indicare il programma da utilizzare per il controllo ortografico. Quando il controllo ortografico viene richiesto durante la fase di composizione di un messaggio attraverso la sequenza [Ctrl+t], pine invia al programma indicato un file temporaneo contenente il testo da controllare.

composer-wrap-column

Permette di definire la larghezza massima del testo in fase di composizione dei messaggi.

reply-indent-string

Permette di definire la stringa (ovvero il simbolo) da usare per evidenziare il testo proveniente dal messaggio al quale si sta rispondendo. Se si vuole che questa stringa contenga il nome della persona che l'ha scritto, si può utilizzare la variabile _FROM_ che verrà sostituita con questo nome. Per esempio si potrebbe utilizzare la stringa seguente:

"_FROM_ >"

empty-header-message

Quando si invia posta utilizzando indirizzi solo su Bcc (Blind Carbon Copy) e lasciando quindi vuoti i campi To, Cc e Newsgroup, pine mette un indirizzo speciale nel campo To. Ciò viene fatto per evitare problemi con alcuni programmi per il trasferimento della posta che autonomamente tendono a riempire questo campo con il destinatario apparente del messaggio, vanificando il senso della posta inviata utilizzando il Blind Carbon Copy. Il valore predefinito di questo destinatario inesistente è Undisclosed recipients

image-viewer

Permette di definire il programma da utilizzare per visualizzare le immagini allegate ai messaggi (allegati MIME).

use-only-domain-name

Questa opzione viene utilizzata solo se non viene definita la voce user-domain corrispondente al nome del computer presso il quale si vuole ricevere la posta.

Alla fine, la parte iniziale della maschera di configurazione potrebbe apparire come la seguente.

personal-name            = zio Paperino
user-domain              = paperone.zagozigo.dg
smtp-server              = paperone.zagozigo.dg
nntp-server              = news.notiziario.it
inbox-path               = /var/spool/mail/paperino
folder-collections       = ~/Mail/[]
news-collections         = <No Value Set>
incoming-archive-folders = <No Value Set>
pruned-folders           = <No Value Set>
default-fcc              = sent-mail
default-saved-msg-folder = saved-mail
postponed-folder         = postponed-msgs
read-message-folder      = <No Value Set>
signature-file           = ~/.signature"
global-address-book      = <No Value Set>
address-book             = ~/.addressbook

58.3 E-mail giunta presso account remoti

I messaggi di posta elettronica non vengono sempre recapitati presso l'account del computer che si utilizza abitualmente. Questa è la tipica situazione in cui ci si trova quando si è collegati a Internet tramite un ISP, per mezzo di una linea commutata. Per questo si ottiene un account in un computer dell'ISP e questo diventa anche l'indirizzo di e-mail.

Il problema è comunque generale: si può avere la necessità di scaricare la posta ricevuta presso un account 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 account a un altro, si usa il protocollo pop-3 (a volte pop-2) oppure imap.

Come si può immaginare, si tratta di un servizio che deve essere gestito da un daemon.

# ipop3d

ipop3

È il daemon del servizio di trasferimento della posta attraverso un account remoto, utilizzando il protocollo pop-3. È gestito dal supervisore inetd e filtrato da tcpd.

Nell'esempio seguente, viene mostrata la riga di /etc/inetd.conf in cui si dichiara il suo possibile utilizzo.

pop-3   stream  tcp     nowait  root    /usr/sbin/tcpd  ipop3d

$ popclient

popclient [<opzioni>] <computer-remoto>

Permette di caricare la posta di un account remoto utilizzando il protocollo pop-2 o pop-3. Una volta caricata, la posta dovrebbe essere gestita dal sistema di posta locale.

Opzioni

-2

Viene utilizzato il protocollo pop-2.

-3

Viene utilizzato il protocollo pop-3.

-k

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

-s

Non mostra i messaggi di progressione dell'operazione.

-v

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

-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.

-p password

Permette di specificare la password dell'utente così come è registrato nel sistema remoto. Se questo valore non viene fornito, verrà richiesto al momento del collegamento.

-f <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 se si utilizza il protocollo pop-2.

-o <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

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

Exitcode

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 e/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.

9   Errore indefinito.

Esempi

#!/bin/bash
#======================================================================
# posta-remota
#
# Carica la posta da un computer remoto utilizzando il protocollo
# pop-3 e la deposita in un file ``inbox''.
# Non utilizza alcun argomento dalla riga di comando.
#======================================================================

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

    #------------------------------------------------------------------
    # Il nome del computer dal quale si scarica la posta.
    #------------------------------------------------------------------
    COMPUTER_POP="paperone.zagozigo.dg"
    #------------------------------------------------------------------
    # Il nome dell'utente così come è registrato nel computer POP.
    #------------------------------------------------------------------
    UTENTE="paperino"
    #------------------------------------------------------------------
    # La password per accedere al computer POP.
    #------------------------------------------------------------------
    PASSWORD="sfortuna"
    #------------------------------------------------------------------
    # Il file in cui si vuole che sia depositata la posta scaricata
    # dal computer POP.
    #------------------------------------------------------------------
    INBOX="~/mail/inbox"

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

    #------------------------------------------------------------------
    # Tenta di caricare la posta dal computer remoto.
    #------------------------------------------------------------------
    if popclient -3 -o $INBOX -u $UTENTE -p $PASSWORD $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>

$ fetchmail

fetchmail [<opzioni>] <computer-remoto>

Permette di caricare la posta di un account remoto utilizzando il protocollo pop-2, pop-3 o imap. La posta caricata viene immessa automaticamente nel sistema locale di posta del'utente che ha utilizzato il programma.

Vedere fetchmail(1)

 

1997.10.26 - Scritto da Daniele Giacomini   daniele@calion.com   (vedi copyright: Appunti Linux).


Capitolo successivo Capitolo precedente Indice