[>a2403.html>] [<a2401.html<] [^a2.html^]


Capitolo 316.   Posta elettronica

316.1   Scaricare, smistare e statistica messaggi scaricati

Qualcuno mi può descrivere configurazioni funzionanti di fetchmail e procmail per scaricare e smistare la posta?

---------

Ecco la mia configurazione. Qui c'è un esempio relativo allo scaricamento e allo smistamento dei miei messaggi dai diversi server di posta. I messaggi scaricati (qui c'è l'esempio della mailing list angolinux) possono essere spostati, reindirizzati o cancellati in base a filtri.

Io faccio tutto con uno script chiamato MAIL:

---------- BEGIN: /script/MAIL ---------

#!/bin/bash

# creo i file temporanei (a zero byte) per contare quante mail sono
# arrivate. 
cat /dev/null > .angolinux.count

# scarico la posta
fetchmail -v

# scrivo il report
echo
echo "      +--------+"
echo "      | report |"
echo "      +--------+"
echo
echo "angolinux mail:`wc -w < ~/.angolinux.count`"

# rimuovo i file temporanei di conteggio
rm ~/.angolinux.count 2> /dev/null

---------- END: /script/MAIL ---------

nella mia directory home c'è il file .fetchmailrc per dire a fetchmail come scaricare la posta tramite POP3 (server, login, pass, ecc.) e smistarla tra i vari utenti (nel mio caso sono io -oltre a root- l'unico utente):

---------- BEGIN: /home/fritz/.fetchmailrc ---------

poll "mail.dada.it" proto pop3 user "fritz" with pass "CENSORED" is
        "fritz" here forcecr smtpaddress localhost
poll "mail.mdsnet.it" proto pop3 user "fritz2" with pass
        "CENSORED" is "fritz" here forcecr smtpaddress localhost

# così per tutti gli altri account pop3 [...]

---------- END: /home/fritz/.fetchmailrc ---------

e .procmailrc:

---------- BEGIN: /home/fritz/.procmailrc ---------

DATE=`date +%m-%y`
PATH=/bin:/usr/bin:/usr/bin
MAILDIR=$HOME/mail      #you'd better make sure it exists
DEFAULT=/usr/spool/mail/fritz
LOGFILE=~/.log_procmail   #recommended

# -- BACKUP DI TUTTE LE MAIL IN backup/all.gz --
# quando si maneggia con la posta, è sempre meglio fare un backup
# preventivo di tutto, per evitare di poter perderla a causa di una cattiva
# configurazione. Queste due righe mi hanno salvato due volte appena ho iniziato a
# giocare con procmail, causa cattiva impostazione e e-mail sparite.
:0 c
| gzip >> backup/all.$DATE.gz

# -- ANGOLINUX --
# funziona così: se c'è una mail incrementa il file contatore di una
# parola (1 o oblurasci sarebbe stato equivalente, poiché dopo
# «wc -w» conta solo il numero di parole presenti) senza cancellarla,
# poi una copia la mette nella cartella angolinux, e un'altra la mette come
# backup (sì sono un po' paranoico, pena l'esperienza) nel file
# backup/angolinux.$DATE.gz, che le salva in base al mese.
:0 c
* ^To.*angolinux@systems.it
| echo 1 >> ~/.angolinux.count
:0 Ac:
angolinux
:0 A:
| gzip >> backup/angolinux.$DATE.gz


[...] (tutte le altre mailing list)

# -- MISC: tutte le altre --
# le mail che arrivano fino qui non appartengono a nessuna mailing list,
# sono le mie personali, quindi lascio che il client (nel mio caso
# Pine) le prenda da /var/spool/mail/fritz

:0 c
| echo 1 >> ~/.misc.count
:0 Ac:
| gzip >> backup/misc.$DATE.gz


---------- END: /home/fritz/.procmailrc ---------

questa è la mia configurazione, adatta per Pine, ma abbastanza uniforme per molti gestori di posta.

A rigor di cronaca, ecco il risultato del comando MAIL non connessi, quindi non scarica nulla, perché non riesce a connettersi al server pop3:

darkstar:~$ MAIL
fetchmail: 5.1.2 querying mail.dada.it (protocol POP3) at Thu, 10 Feb 2000
17:21:27 +0100 (CET)
fetchmail: POP3 connection to mail.dada.it failed: temporary name server
error
fetchmail: Query status=2
fetchmail: normal termination, status 2

[...]

      +--------+
      | report |
      +--------+

angolinux mail:      0
 n3wblist mail:      0
 sppgroup mail:      0
 blacksun mail:      0
  bugtraq mail:      0
 pizza_ml mail:      0
    md_ml mail:      0
     misc mail:      0

316.2   Configurazione fetchmail

Come faccio a configurare Fetchmail in modo che scarichi anche la posta di altri utenti e la ridistribuisca (agli altri utenti)?

---------

defaults proto pop3
poll <POP3> user <ut1> pass <pass1> is <localhost> here mda \ 
"procmail -d <ut1>"
poll <POP3> user <ut2> pass <pass2> is <localhost> here mda \
"procmail -d <ut2>"
...............

(procmail ti serve se vuoi filtrare la posta in diversi modi...)

Ovviamente i termini entro parentesi acute nascondono i corrispondenti valori reali. I valori POP3 saranno diversi, se i provider sono diversi.

316.3   .fetchmailrc, un esempio

Come si configura .fetchmailrc?

---------

Il mio file di configurazione (.fetchmailrc) ha una serie di voci (una per ciascun server di posta, ovviamente) con il seguente aspetto:

#----------------------------
poll "pop.tiscalinet.it"
protocol pop3
username "tuo_nomeutente_presso_tiscali"
password "tua_password"
#----------------------------

e con tale configurazione non ho problemi con alcuno dei server di posta che utilizzo.

Inoltre la riga di comando con cui viene avviato fetchmail è:

# fetchmail -d 300[Invio]

che controlla la presenza di posta sul server ogni 300 secondi. Spesso è necessario un pò di attesa (1 minuto circa) prima che fetchmail cominci effettivamente a scaricare la posta.

316.4   Esempio di file di configurazione fetchmail e procmail

Qulacuno mi mostra i propri .fetchmailrc e .procmailrc funzionanti?

---------

fetchmailrc

poll pop.tiscalinet.it with proto POP3 user "user" password "pass" \
   mda '/usr/bin/procmail -d  %T'

.procmailrc

PATH=/bin:/usr/bin:/usr/bin
MAILDIR=$HOME/mail       #you'd better make sure it exists
DEFAULT=$MAILDIR/altre   #completely optional
LOGFILE=$MAILDIR/log     #recommended

:0:
* ^TOmioindirizzodiposta@mioprovider.it
inbox

316.5   Spedire messaggi in una rete locale facendo risultare un indirizzo esterno

Cosa devo configurare il sistema per gestire i messaggi interni ad una rete locale con il dominio Internet? Se devo mandare un messaggio ad un mio collega e voglio inviarlo come utente@provider_Internet.it senza farlo però uscire dalla rete locale, cosa devo configurare?

---------

Devi modificare il sendmail.cf in modo che includa la caratteristica use_cw. Quindi nel file sendmail.cw scriverai i domini da trattare come locali. Per fare questo, dovrai però aver configurato anche un name server locale che gestisca per finta la zona provider_Internet.it, con il Mail eXchanger (l'host dedicato alla gestione della posta per un dominio indicato nei file di zona del bind con MX) che punta all'host del tuo server di posta locale e gli altri (www e altri, se esistono) che puntano ai loro effettivi IP Internet, onde evitare spiacevoli disguidi. Poiché per esempio utente@provider_Internet.it non corrisponderà all'utente locale utente, avrai bisogno di impostare anche la virtusertable del sendmail (con la caratteristica omonima nel sendmail.cf) che ti permette di associare gli indirizzi virtuali a quelli locali esistenti, nella forma:

utente@provider_Internet.it     utente_locale

(il separatore è un tab)

316.6   procmail e reindirizzamento sbagliato dei messaggi

Utilizzando procmail, questi mi mette la posta in /var/spool/mail/enrico. La vorrei in ~/Maildir. Come faccio?

---------

Puoi risolvere facilmente creando un file .procmailrc con:

$ touch .procmailrc[Invio]

nella directory home dell'utente. Nel file, specificherai le variabili di ambiente che ti interessano, ad esempio:

PATH=3D/bin:/usr/bin:/usr/bin
MAILDIR=3D$HOME/Maildir
DEFAULT=3D$MAILDIR/mbox

316.7   You have new mail all'avvio - come leggere i messaggi

Ad ogni avvio mi appare You have new mail , ma digitando 'mail' la risposta è command not found.

---------

Non hai installato il comando mail o un qualsiasi MUA, un semplice programma di posta elettronica. Se lo state facendo per root, è giusto così (per motivi di sicurezza è bene che root non usi programmi per la posta), e potete usare:

# less /var/spool/mail/root[Invio]

altrimenti è consigliabile installare un programma per la posta (non tanto mail, che è piuttosto poco intuitivo, quanto ad esempio mutt).

316.8   Blocco della macchina su sendmail

Ogni volta che accendo la macchina, durante l'avvio mi si blocca su sendmail e devo aspettare qualche minuto. È molto noioso, posso evitarlo?

---------

Se la macchina non è direttamente connessa alla rete, modifica il file /etc/hosts affinché contenga:

127.0.0.1 localhost

Se invece è connessa costantemente alla rete ed ha un IP fisso, sendmail si blocca se /etc/hosts contiene la riga:

127.0.0.1  localhost   host_name

modificalo così:

127.0.0.1  localhost
w.x.y.z    host_name

316.9   Sendmail e antispam

Qual è l'indirizzo cui fare telnet per verificare la configurazione di sendmail relativamente all'antispamming?

---------

mail-abuse.org

316.10   Associare un file di testo ad un messaggio da riga di comando

Conosco il comando mail -s "soggetto del messaggio" ma poi non riesco a capire come fare per associare anche un testo al messaggio.

---------

$ mail utente@server -s "Soggetto del messaggio" < file.txt[Invio]

oppure:

$ cat file.txt | mail -s "Soggetto del messaggio" utente@server[Invio]

316.11   Inviare messaggi ad intervalli di tempo regolare

Vorrei spedire lo stesso messaggio allo stesso indirizzo ogni 30 minuti per un periodo indeterminato di tempo. Come posso fare?

---------

Lo puoi fare con questo script (shell tcsh):

#!/bin/tcsh

touch go_on
while(1)
        if (-f go_on)   then    
                mail indirizzo < file.in
                sleep 3 
        else
                break
        endif
end

così, fino a quando non cancelli il file go_on, ogni tre secondi verrà spedito un messaggio contenente il file file.in (in cui puoi scrivere quello che vuoi) all'indirizzo che scrivi al posto di indirizzo.

316.12   Applicazione per eliminare duplicati di posta elettronica

Come faccio ad eliminare i duplicati dei messaggi di posta elettronica?

---------

Il programma formail ha un'opzione per togliere i duplicati, controllando la stringa di identificazione che viene via via memorizzata in un file temporaneo durante la scansione della mailbox.

In particolare, ecco lo script che ho costruito:

#!/usr/bin/bash
> cache.tmp
cp $1 $1.original
formail -D 2000000 cache.tmp -s <$1 > x.tmp
cp x.tmp $1
rm x.tmp

Lo script l'ho chiamato dedup. Occorre lanciarlo nella directory dove stanno le cartelle (in formato MBOX), tipicamente ~/Mail, mettendo come argomento il nome della cartella stessa. Il parametro dopo -D rappresenta la dimensione massima (impostabile a piacere) che deve avere il file temporaneo.

Nel caso di più cartelle di posta, ecco qui un altro script che automatizza ogni cosa:

#!/usr/bin/bash
export MAILDIR=~/Mail
export PROGDIR=~/scripts
cd $MAILDIR
rm cmd
rm .*.index
ls -1 > lista
awk '$1!="lista" && match($1,"dedup")==0 {printf("echo \042Esamino mailbox
%s.\042\n$PROGDIR/dedup %s\n",$1,$1);}' lista > cmd
chmod 755 cmd
./cmd
rm -f cmd cache.tmp lista
cd

ovviamente cambiando le directory secondo il proprio ambiente. Lo script, che ho chiamato dedup_all, in pratica prepara la lista delle cartelle, poi con awk crea uno script che richiama lo script mostrato prima per ogni cartella da ripulire. Alla fine dell'elaborazione, oltre alle cartelle ripulite, si hanno a disposizione anche le cartelle originali (qualora qualcosa fosse andato storto). Esse, col suffisso .original, possono benissimo essere cancellate se si vede che l'operazione è andata a buon fine.

316.13   File .forward

Quale è la sintassi esatta del file .forward, per poter reindirizzare le e-mail che mi arrivano ad un indirizzo e-mail verso un altro indirizzo?

---------

devi specificare l'utente (o gli utenti separati da una virgola), se vuoi ad esempio che venga fatto un reindirizzamento completo imposta il file $HOME/.forward a:

indirizzo destinatario

se invece vuoi un duplicato delle mail:

indirizzo1, indirizzo2

316.14   Scegliere la signature in modo casuale

Come è possibile scegliere la signature in maniera casuale?

---------

Con sig_rotate.pl (su <http://www.Freshmeat.net>)

316.15   I client di una rete non riescono ad inviare i messaggi al di fuori della rete stessa

Ho una rete interna con gateway e server di posta sulla stessa macchina. Non riesco ad inviare la posta dall'interno della rete verso l'esterno; dal server invece, tutto funziona.

---------

Devi abilitare il relay per i client. Se non specificato diversamente, sendmail dovrebbe leggere gli ip abilitati nel file /etc/mail/relay-domains. Se non ce l'hai, crealo e inserisci gli ip delle macchine che dovranno usare il gateway come server di posta.

Esempio:

192.168.1.1
192.168.1.2
192.168.1.3

316.16   Scaricare la posta con mutt

Sto cercando di configurare mutt. Riesco a spedire i messaggi, ma se provo a scaricarli, ricevo il messaggio:

l'host POP non è stato definito.

In .fetchmailrc ho messo:

poll popmail.iol.it
proto pop3
user skywalker2 password miapassword
keep

Perché non riesco?

---------

Utilizza questa sintassi:

poll popmail.iol.it proto POP3
user skywalker2 password "tua_password" is tua_login here

In questo modo le e-mail vanno direttamente nella mailbox del tuo utente.

Se invece intendi configurare mutt per scaricare direttamente dal server pop della iol, devi ricompilarlo col supporto per il pop e scrivere in .muttrc:

set pop_delete #per cancellare le mails dal server
set pop_host="popmail.iol.it"
set pop_port=110
set pop_pass="tua_pass"
set pop_user="skywalker2 

316.17   Come spedire un file allegato con mutt da riga di comando

È possibile spedire un allegato con mutt da riga di comando?

---------

Sì, lo puoi fare con:

$ echo "testo messaggio" | mutt -a "nome_attachment" -s "soggetto" destinatario@dominio.net[Invio]

316.18   mutt, configurare la stringa che introduce il messaggio riportato

Come si fa in mutt a cambiare la stringa di risposta (quella che dice "On Wed, 31 Feb 2010 xyz wrote" o qualcosa del genere)?

---------

Inserisci nel file ~/.muttrc:

set attribution = "On %d, %n wrote"

316.19   mutt, configurare la stringa che indica il vecchio soggetto del messaggio in caso di sostituzione

Quando rispondo e cambio il soggetto del messaggio, vorrei che mutt aggiungesse [Was vecchiosoggetto] come fa pine. Come si fa?

---------

Inserisci nel file ~/.muttrc:

set reply_regexp="^(re([\\[0-9\\]+])*|aw):[ \t]*"

316.20   Colori di mutt nei terminali grafici

Che cosa devo impostare per vedere i colori di mutt anche nel terminale grafico di Gnome?

---------

Prova a scrivere:

$ export TERM=linux[Invio]

e poi lancia mutt.

316.21   Scaricare la posta in automatico

Presto andrò in vacanza e vorrei che il computer scaricasse la posta. Vorrei che tutto funzionasse senza problemi e penso che Linux lo possa fare. (utilizzo fetchmail) Come?

---------

Un crontab chiama un solo script più o meno così:

#!/bin/sh
pon
while ! (/sbin/ifconfig | grep -q ppp0)
do
        sleep 1
done
fetchmail
poff

dove pon è lo script che inizializza il collegamento, e poff chiude il collegamento. Lo script non fa altro che aspettare, scaricare la posta e chiudere il collegamento. Se non c'è posta il collegamento viene chiuso subito, e se ci sono problemi tecnici, fetchmail va in timeout dopo circa un minuto, dopo di che il collegamento viene comunque chiuso.

316.22   File allegati alle e-mail codificati

Mi capita talvolta di ricevere via e-mail degli allegati mime inseriti direttamente nel testo e quindi non decodificati automaticamente dal client e-mail.

---------

Non sono allegati mime ma uuencode e li decodifichi salvando il messaggio e usando il comando:

$ uudecode -o nomefile filesalvato[Invio]

316.23   Alcune configurazioni di postfix

Vorrei chiedere due cose su postfix:

  1. Come faccio a ricevere la posta in locale (tipo /etc/sendmail.cf) perché mi restituisce il solito 'relay denied'.

  2. Procmail non mi divide più le mail in base al mio file  ~/.procmailrc, devo impostare qualcosa in /etc/postfix/main.cf ? tipo:

    mailbox_command = /some/where/procmail</p>

---------

Devi impostare la variabile $mynetworks in main.cf. Oltre a mynetwork devi anche impostare la variabile $mydestination

# The mydestination parameter specifies the list of domains that this
# machine considers itself the final destination for.
#
# The default is $myhostname + localhost.$mydomain.  On a mail domain
# gateway, you should also include $mydomain. Do not specify the
# names of domains that this machine is backup MX host for. Specify
# those names via the relay_domains or permit_mx_backup settings for
# the SMTP server (see sample-smtpd.cf.
#
# The local machine is always the final destination for mail addressed
# to user@[the.net.work.address] of an interface that the mail system
# receives mail on (see the inet_interfaces parameter).
#
# Specify a list of host or domain names, /file/name or type:table
# patterns, separated by commas and/or whitespace. A /file/name
# pattern is replaced by its contents; a type:table is matched when
# a name matches a lookup key.  Continue long lines by starting the
# next line with whitespace.
#
#mydestination = $myhostname, localhost.$mydomain

316.24   Messaggio di errore: Impossibilità di inviare messaggi al di fuori dell'intranet. (unknown recipient)

Ho una piccola rete e ho problemi con la posta elettronica. Se invio una e-mail al di fuori dell'intranet mi risponde che il server SMTP non riconosce il 'recipient' e mi chiede di modificarlo. Accetta soltanto e-mail verso altri utenti dello stesso server. Perché?

---------

Perché la versione di sendmail ha sicuramente un filtro chiamato anti-relay, perciò devi creare un file

/etc/sendmail.cR

e dichiararlo in /etc/sendmail.cf.

in /etc/sendmail.cf:

#######                          #########
####### start antispamming rules #########
#######                          #########
FR-o /etc/sendmail.cR

Scheck_rcpt
# anything terminating locally is ok
R<$+@$=w>       $@ OK
R<$+@$=R>       $@ OK

# anything originating locally is ok
R$*             $: $(dequote "" $&{client_name} $)
R$=w            $@ OK
R$=R            $@ OK
R$@             $@ OK

# anything else i bogus
R$*             $#error $: "550 Relaing Denied"
#######                          #########
####### end antispamming rules   #########

mentre il file /etc/sendmail.cR (nota la R maiuscola) deve avere la struttura

pc1.name.it [192.168.0.2]
pc2.name.it [192.168.0.3]
pc3.name.it [192.168.0.4]
pc4.name.it [192.168.0.5]
LDR --- Copyright © 1999-2000 Gaetano Paolone --  bigpaul @ pluto.linux.it

[>a2403.html>] [<a2401.html<] [^a2.html^]