Du tri des emails

Depuis quel­ques temps, je me suis décidé à hébergé le mail chez moi. Après avoir un peu tâton­ner avec procmail, je me suis enfin décidé à pas­ser à fdm. Je ne vais pas détailler toute la con­fi­gu­ra­tion ici, vous trou­ve­rez un excel­lent arti­cle sur le sujet sur http://unix­gar­den.com, je vais juste met­tre en exer­gue les points inté­res­sants.

P.S. ma con­fi­gu­ra­tion peut être retrouvé sur mon wiki perso

Le pre­mier point inté­res­sant dans FDM est la pos­si­bi­lité d’uti­li­ser des macros. Un exem­ple inté­res­sant : $maildir="%[home]/Maildir/". L’inté­rêt de cette macro est qu’elle reprends le tag %[home], auto­ri­sant ainsi une grande por­ta­bi­lité de la con­fi­gu­ra­tion.

Sans ren­trer dans les détails de FDM, celui-ci se con­fi­gure au tra­vers d’actions (action) exé­cu­tés en fonc­tions de règles (match). Je revien­drais sur les secon­des plus tard. Parmi les actions, je qua­li­fie­rais cer­tai­nes de des­ti­na­tions, comme par exem­ple action "INBOX" maildir "${maildir}/INBOX" qui est l’action de pla­cer le cour­rier dans INBOX.
D’autres actions méri­tent qu’on revienne des­sus. action "bogofilter" rewrite "bogofilter -u -e -p" réé­crit le cour­riel avec bogofilter, rajou­tant ainsi des entê­tes sur la «qua­lité» du mes­sage. action "maildir-mark-as-read" exec "mf=\"%[mail_file]\" ; mv \"\${mf}\" \"\${mf%%/*}\"/../cur/\"\${mf##*/}:2,S\"" comme son nom l’indi­que per­met de mar­quer un mes­sage comme lu. Il s’agit d’une des fonc­tions qui ont motivé mon pas­sage de procmail vers fdm.

Avec les fil­tres, le trai­te­ment du spam devient un jeu d’enfant : match "^X-Spam-Flag: YES" in headers actions { "Spam" "maildir-mark-as-read" } suf­fit pour dépla­cer les mes­sa­ges con­tent l’entête X-Spam-Flag: YES dans le dos­sier Spam et de le mar­quer comme lu. De la même façon, il est aisé de pla­cer le mail venant de lis­tes de dis­cus­sion dans un dos­sier : match "^List-Id: .*" in hea­ders action "Pari­nux". Notez que dans cette expres­sion régu­lière, les points . auraient du être échap­pés par \..On peut aussi faci­le­ment redi­ri­ger les cour­riels vers une autre adresse mail : match "^List-Post: .*(toto|titi)@dtc.org>" in hea­ders actions { smtp ser­ver "smtp.ki.rox" port 25 from "tata@z­wip.net" to "tutu@­ri­fifi.com" drop }

Le der­nier con­cept dont je n’ai pas parlé est celui de compte (account) qui sert à défi­nir des comp­tes (pop3[s], imap[s], stdin) sur les­quels aller cher­cher le cour­rier. En par­ti­cu­lier, on peut noter account "stdin" disabled stdin qui per­met de lire le cour­rier depuis l’entrée stan­dard, avec la com­mande fdm -a stdin fetch. Ceci per­met de dire à Postfix de trier vos mails entrant avec fdm, soit au tra­vers d’un fichier .forward con­te­nant "|/usr/bin/fdm -m -a stdin fetch", soit en pas­sant |/usr/bin/fdm -m -a stdin fetch à l’option mailbox_command de main.cf. Enfin, pour peu que vous nom­miez les actions cor­res­pon­dants aux dos­siers dans les­quels remet­tre les cour­riels venant de comp­tes exté­rieurs de la même façon que vos comp­tes, match string "%[account]" to "(compte_extérieur1|compte_extérieur2|compte_extérieur3)" action "%[account]" les met­tra auto­ma­ti­que­ment dans le dos­sier cor­res­pon­dant.