Maildrop oggi risulta essere una valida alternativa a procmail. Tra i vantaggi che offre riscontriamo una migliore ottimizzazione delle risorse hardware e una sintassi più moderna. Inoltre risulta essere ad oggi attivamente sviluppato mentre procmail è fermo da circa il 2001.

Configurazione

Il file generale è /etc/maildroprc, inoltre a seconda dell'utente può essere essere utilizzato anche il file ~/.mailfilter.

Per utilizzare il formato maildir (molto più funzionale del classico /var/mail/user) è necessario creare le opportune cartelle. Per semplicità esiste anche il comodissimo comando maildirmake che crea in automatico i path necessari. Attenzione anche a settare i permessi corretti: se sbagliati maildrop restituirà errore.

Debuging

Il modo migliore per debuggare è simulare di invocare il programma proprio come se si fosse il MDA (Postfix) grazie ad una pipe:

echo "Hello-la mia email" | maildrop -V 9 -d user

L'opzione -V indica il livello di debug (da 1 a 9), e la -d indica con quale user lavorare. Se questo non fosse sufficiente si potrebbe aggiungere uno strace e utilizzare una mail vera e propria (magari già salvata in un file ad hoc):

cat mail.test | strace maildrop -V 9 -d user

From pinco@pallo.org  Fri May 20 13:18:43 2011
Return-Path: <pinco@pallo.org>
X-Original-To: mio.user@mio.server
Delivered-To: mio.user@mio.server
Received: from gmail.com (localhost [127.0.0.1])
        by mail (Postfix) with SMTP id 2536D345C3
        for <mio.user@mio.server>; Fri, 20 May 2011 13:17:32 +0200 (CEST)
Object: "Prova"
Message-Id: <20110520111812.2536D345C3@mail>
Date: Fri, 20 May 2011 13:17:32 +0200 (CEST)
From: pinco@pallo.org
To: undisclosed-recipients:;

ciao belli!!!

Per avere una simulazione più elaborata, nel caso in cui maildrop sostituisca il demone local di Postfix, utilizziamo allora anche i parametri che verrebbero assegnati con il pipe. Se abbiamo in /etc/postfix/master.cf la seguente opzione:

maildrop  unix  -       n       n       -       -       pipe
  flags=ODRhu user=vmail argv=/usr/bin/maildrop -V 9 -d ${user}@${domain} ${extension} ${recipient} ${user} ${nexthop}

Posto che stiamo simulando la connessione con miouser+extension@dominio, allora utilizziamo il comando:

su vmail
maildrop -V 9 -d miouser@dominio extension miouser+extension@dominio miouser dominio

Se necessario creiamo anche dei log appositi con la seguente configurazione in /etc/maildrop:

# Global maildrop filter file
SHELL="/bin/bash"
#
EXTENSION="$1"
RECIPIENT="$2"
USER="$3"
DOMAIN="$4"

# Uncomment this line to make maildrop default to ~/Maildir for
# delivery- this is where courier-imap (amongst others) will look.
#DEFAULT="$HOME/.Maildir"
MAILPATH="/home/vmail/"
DEFAULT="$MAILPATH$DOMAIN/Mailbox"

SHELL="/bin/bash"
logfile "/var/log/maildrop"
VERBOSE="9"
log "========"
log "EXTENSION: $EXTENSION"
log "RECIPIENT: $RECIPIENT"
log "USER: $USER"
log "DOMAIN: $DOMAIN"
log "----"
# The following autocreate the mailbox if missing
`[ -d $DEFAULT ] || (/usr/bin/maildirmake $DEFAULT && /usr/bin/maildirmake -f Spam $DEFAULT)`

Autenticazione User

Maildrop, se invocato con il parametro -d, richiede l'autenticazione dello user richiesto finalizzata ad identificare lo UID e GID. Per poter eseguire l'autenticazione è necessario installare anche le librerie di autenticazione presenti nei seguenti pacchetti:

È molto importante fare attenzione con quale user viene eseguito il processo maildrop, non è scontato che tutti possano accedere alle risorse necessarie. Se lo user che esegue maildrop non ha i corretti uid e gui potremmo ricevere il seguente errore:

user1000@server:$ maildrop -V 9 -d pincopallo@yahoo.it
maildrop: authlib: groupid=1001
maildrop: authlib: userid=1001
maildrop: authlib: logname=pincopallo@yahoo.it, home=/home/vmail/yahoo.it, mail=/home/vmail/yahoo.it/Mailbox
maildrop: You are not a trusted user.

nota: infatti questo caso il processo è stato eseguito con UID/GID 1000 e non 1001.

Ora, per verificare il corretto funzionamento del sistema di autenticazione, eseguiamo maildrop con uno user autorizzato ad accedere all'utente virtuale e verifichiamo di loggarci correttamente: {{{user1001@server:$ maildrop -V 9 -d pincopallo@yahoo.it maildrop: authlib: groupid=1001 maildrop: authlib: userid=1001 maildrop: authlib: logname=pincopallo@yahoo.it, home=/home/vmail/yahoo.it, mail=/home/vmail/yahoo.it/Mailbox maildrop: Changing to /home/user1001 }}} Funziona! Ora infatti lo user1001 (uid/gid 1001) coincide con gli ID indicati dal sistema di autenticazione.

Per maggiori informazioni sulle modalità di autenticazione degli user si rimanda alla pagina successiva inerente a courier-authdaemon.

Esempi di regole

Logging

SHELL="/bin/bash"
logfile "/var/log/maildrop"
VERBOSE="5"
log "========"

Creazione automatica maildir

`test -e $MAILDIR`
if ( $RETURNCODE != 0 )
{
`/usr/bin/maildirmake $MAILDIR`
`chmod -R 0700 $MAILDIR`
}

Oppure per uno script molto più avanzato: Phamm mailinglist.

Sitografia

MyWiki: Email/Maildrop (last edited 2015-02-17 19:55:34 by risca)