Depuis quelques temps, je me suis décidé à hébergé le mail chez moi.
Après avoir un peu tâtonner avec procmail
, je me suis enfin décidé à
passer à fdm
. Je ne vais pas détailler toute la configuration
ici, vous trouverez un excellent article sur le sujet sur
http://unixgarden.com, je vais juste mettre en exergue les points
intéressants.
Le premier point intéressant dans FDM est la possibilité
d’utiliser des macros. Un exemple intéressant :
$maildir="%[home]/Maildir/"
. L’intérêt de cette macro est qu’elle
reprends le tag %[home]
, autorisant ainsi une grande portabilité
de la configuration.
Sans rentrer dans les détails de FDM, celui-ci se configure au
travers d’actions (action
) exécutés en fonctions de règles
(match
). Je reviendrais sur les secondes plus tard. Parmi les
actions, je qualifierais certaines de destinations, comme par
exemple action "INBOX" maildir "${maildir}/INBOX"
qui est l’action de
placer le courrier dans INBOX.
D’autres actions méritent qu’on revienne dessus.
action "bogofilter" rewrite "bogofilter -u -e -p"
réécrit le
courriel avec bogofilter
, rajoutant ainsi des entêtes sur la
«qualité» du message.
action "maildir-mark-as-read" exec "mf=\"%[mail_file]\" ; mv \"\${mf}\" \"\${mf%%/*}\"/../cur/\"\${mf##*/}:2,S\""
comme son nom l’indique permet de marquer un message comme lu. Il
s’agit d’une des fonctions qui ont motivé mon passage de procmail
vers fdm
.
Avec les filtres, le traitement du spam devient un jeu d’enfant :
match "^X-Spam-Flag: YES" in headers actions { "Spam" "maildir-mark-as-read" }
suffit pour déplacer les messages content l’entête
X-Spam-Flag: YES
dans le dossier Spam et de le marquer comme lu. De
la même façon, il est aisé de placer le mail venant de listes de
discussion dans un dossier :
match "^List-Id: .*" in headers action "Parinux"
. Notez que dans
cette expression régulière, les points .
auraient du être échappés
par \.
.On peut aussi facilement rediriger les courriels vers une
autre adresse mail :
match "^List-Post: .*(toto|titi)@dtc.org>" in headers actions { smtp server "smtp.ki.rox" port 25 from "tata@zwip.net" to "tutu@rififi.com" drop }
Le dernier concept dont je n’ai pas parlé est celui de compte
(account
) qui sert à définir des comptes (pop3[s], imap[s],
stdin) sur lesquels aller chercher le courrier. En particulier, on
peut noter account "stdin" disabled stdin
qui permet de lire le
courrier depuis l’entrée standard, avec la commande
fdm -a stdin fetch
. Ceci permet de dire à Postfix
de trier vos
mails entrant avec fdm, soit au travers d’un fichier .forward
contenant "|/usr/bin/fdm -m -a stdin fetch"
, soit en passant
|/usr/bin/fdm -m -a stdin fetch
à l’option mailbox_command
de
main.cf
. Enfin, pour peu que vous nommiez les actions
correspondants aux dossiers dans lesquels remettre les courriels
venant de comptes extérieurs de la même façon que vos comptes,
match string "%[account]" to "(compte_extérieur1|compte_extérieur2|compte_extérieur3)" action "%[account]"
les mettra automatiquement dans le dossier correspondant.