Maildrop est un MDA (Mail Delivry Agent) pouvant se subtituer à Postfix au moment de délivrer les mails.
Postfix lui passera le mail en lui passant en paramètre le nom ou le mail de l'utilisateur pour que celui-ci aille le déposer dans sa boite mail.
virtual_transport = maildrop maildrop_destination_recipient_limit = 1
maildrop unix - n n - - pipe flags=DRhu user=vmail:daemon argv=/usr/bin/maildrop -d **${recipient}**
Remarques :
# hostname - host name of your ldap server hostname ldap1 ldap2 # basedn - base DN by which to search for LDAP entries basedn ou=people,o=example # binddn, bindpw - optional, binddn and password if your ldap server # requires you to authenticate before searching binddn cn=mail,ou=softwareaccounts,o=example bindpw mailpassword # timeout - specifies maximum time ( in seconds ) to wait for a response # from the LDAP server timeout 10 # search_method - used to specify whether to search on the users id, or # email address, and may be either 'mail' or 'uid' # # if set to 'mail' (default) then to deliver mail to a user you must # specify the entire email address: # ie. maildrop -d joeuser@domain.com # # if set to 'uid' then to deliver mail to a user you need only specify # the users id (username) # ie. maildrop -d joeuser # search_method mail # default_uid - default uid (number only) to use incase uidnumber attribute not # found in users ldap entry default_uidnumber 1000 # default_gid - default gid (number only) to use incase gidnumber attribute not # found in users ldap entry default_gidnumber 1000 # MAIL_ATTR - LDAP attribute which contains the users complete email address mail_attr maildrop # UID_ATTR - LDAP attribute which contains the users name (w/o domain) uid_attr uid # MAILDIR_ATTR - LDAP attribute which contains the path to the users # custom maildir maildir_attr mailbox # HOMEDIRECTORY_ATTR - LDAP attribute which contains the path to the users # home directory homedirectory_attr mailbox # QUOTA_ATTR - LDAP attribute which contains the users quota quota_attr mailQuota
Le fichier /etc/maildroprc contient les actions effectuées par maildrop pour délivrer le mail (un peu comme ~/procmailrc).
# Global maildrop filter file DEFAULT="$HOME" `test -d $DEFAULT` if ( $RETURNCODE == 1 ) { `maildirmake $DEFAULT` } if (/^X-Spam-Status: Yes/) { `test -d $DEFAULT/.Junk` if ( $RETURNCODE == 1 ) { `maildirmake $DEFAULT/.Junk` } to "$DEFAULT/.Junk/" } `test -r $HOME/.mailfilter` if( $RETURNCODE == 0 ) { log "(==) Including $HOME/.mailfilter" exception { include $HOME/.mailfilter } }
Explication : Ici Maildrop testera d'abord si la boite mail (la Maildir) existe et le créera sinon. Puis si le mail est reconnu comme un spam (via le header du mail X-Spam-Status: Yes), il le délivrera dans le dossier Junk de la boite mail (si le dossier n'existe pas, il le créera). Puis enfin, si le fichier .mailfilter dans le home de l'utilisateur, il inclura dans son traitement. Si le mail n'est pas délivré pendant le traitement (directive to), le mail sera délivré à la racine de la boite mail (dans la Boite de réception) dont le chemin est contenu dans la variable $DEFAULT.
Maildrop utilise les librairies de Courier pour l'authentification des utilisateurs. Il utilise plus précisément authdeamon, le serveur d'authentification de Courier. Pour communiquer avec ce service, Maildrop utilise la socket de celui-ci : /var/run/courier/authdeamon/socket. L'utilisateur exécutant Maildrop doit donc y avoir accès. Pour cela le plus simple est de placer l'utilisateur dans le groupe daemon (dans le fichier /etc/group) pour vos tests manuels et de configurer Postfix pour qu'il exécute Maildrop avec les droits du groupe daemon.
Extrait du fichier master.cf
maildrop unix - n n - - pipe flags=DRhu **user=vmail:daemon** argv=/usr/bin/maildrop -d ${recipient}
Remarque : man 8 pipe pour plus d'informations à ce sujet
Dans son mécanisme, Maildrop tente un login auprès de authdeamon pour vérifier que l'utilisateur destinataire existe bien, il faut donc que l'information passer par Postfix par le paramètre -d soit reconnu comme nom d'utilisateur de connexion par authdeamon. Par défaut, celui-ci attend le nom d'utilisateur (Exemple : toto) mais pas le mail (Exemple : toto@domain.com). Si vous utiliser la reconnaissance de l'utilisateur par son adresse mail, il faut donc configurer authdeamon pour qu'il accepte l'authentification par l'adresse mail.
LDAP_EMAILMAP (mail=**@user@**@**@realm@**) LDAP_EMAILMAP_ATTRIBUTE uid LDAP_EMAILMAP_MAIL uid
Remarque : La composition de LDAP_EMAILMAP se fait à partir des mots clefs @user@ et @realm@ correspondant respectivement au nom d'utilisateur et au domaine du mail (tout se qu'il y a avant et après le @ dans l'adresse mail passé en paramètre).
Avant de configurer Postfix pour délivrer les mails via Maildrop, mieux vaut tester que tout fonctionne correctement. Pour cela :
su - vmail
Exemple :
From: test@example.com To: toto@domain.com Subject: test test
maildrop -d toto < /tmp/mail.test
ou
maildrop -d toto@domain.com < /tmp/mail.test
en fonction de comment vous avez configuré Maildrop.
La commande devrai rien retourner et le mail devrai se trouvé dans la Maildir de l'utilisateur.
ERR: authdaemon: s_connect() failed: Permission denied
C'est un problème de droits d'accès à la socket de authdeamon. Vérifier vos droits.
Invalid user specified
L'utilisateur ou le mail passé en paramètre n'a pas été reconnu.