ArraKISS
μ | 📰 | | 📧 |

    Gérer son courriel avec des logiciels libres

    Ne pas avoir à utiliser un navigateur pour aller sur son webmail est un vrai gain de temps, en particulier si l'on utilise plusieurs adresses mail. D'autant plus qu'il existe de outils permettant de trier automatiquement vos mails selon de nombreux critères. Heureusement, les logiciels libres sont là, et vont nous permettre d'avoir un accès à notre courrier sur mesure.

    Voici la présentation de quelques outils que je ne peux que vous conseiller.

    Récupération du courrier avec fdm

    Bien qu'il existe la possibilité d'utiliser les bulldozer fetchmail et procmail, je vous propose ici une solution plus légère : fdm. À lui tout seul, il peut récupérer vos e-mails, les trier selon le destinataire, l'émetteur, la date, archiver vos mails…

    Par la suite, vous serez en mesure de lire vos mails localement, puisqu'ils seront téléchargés dans vos dossiers. Pour cela, on utilise des dossiers appelés Maildir, eux mêmes composés de sous-dossier cur, new et temp. Pensez donc à créer ces dossiers avant de récupérer vos mails.

    L'installation est des plus simple : apt-get install fdm.

    Maintenant, on peut le configurer. Pour cela, créez un fichier ~/.fdm.conf (le ‘~’ représentant votre répertoire utilisateur).

    Notez qu'il existe des exemples de configuration dans /usr/share/doc/fdm

    Ajout des comptes

    On peut désormais préciser dans le fichier de configuration les comptes e-mail. Cela se fait avec la syntaxe suivante :

    account "compte1" imap server "imap.serveur.net" port 143
        user "brucewayne" pass "******"
    

    Ce qui est précisé entre guillemets ainsi que le numéro du port est à remplacer selon vos besoins. Sachez que “compte1” est le nom donné à ce compte, pour pouvoir se repérer ensuite dans la configuration. Il est tout à fait possible de définir plusieurs comptes de cette façon. Attention toutefois, pour les comptes imap ssl, remplacez imap par imaps

    fdm le facteur du système

    Pour recevoir les mails du système, ajoutez ces lignes au fichier de configuration ~/.fdm.conf, après tous les autres comptes. (lignes account ....

    account "stdin" disabled stdin
    

    Puis ceci dans le fichier ~/.forward, avec les " :

    "|/usr/bin/fdm -m -a stdin fetch"
    

    De cette façon, tous les mails qui sont envoyés par le système seront envoyés à fdm par l'entrée standard (stdin), et fdm les enverra sur le compte par défaut.

    Plus d'infos à cette page, paragraphe “5.7 stdin and local mail” : http://fdm.sourceforge.net/

    Définir des actions

    fdm utilise un système d'“actions” pour traiter vos e-mails. Par exemple, on peut définir une action nommée “inlaposte”, pour déplacer les messages dans le dossier maildir “/home/brucewayne/Maildir/laposte”. Afin de se simplifier la vie, vous pouvez écrire %h à la place de /home/utilisateur, fdm le comprendra.

    Voici donc un exemple pour déplacer du courrier dans un dossier précis :

    action “inlaposte” maildir “%h/Maildir/laposte”

    On va maintenant dire à fdm de placer les courriels destinés à ce compte dans le dossier correspondant. On écrit alors plus bas :

    match account "laposte" action "inlaposte"
    

    Gestion des spams

    Pour gérer les spams, je vous conseille bogofilter. Je vous propose le comportement suivant : un mail arrive, bogofilter vérifie s'il s'agit d'un spam, et si oui, il ajoute un en-tête à ce spam. Ensuite, fdm se charge de placer les éventuels spam dans un dossier prévu à cet effet : ~/Maildir/spam

    On définit alors les 2 actions suivantes, qui se chargent de filtrer les spams, et de déplacer dans le dossier spam :

    action "antispam" rewrite "bogofilter -u -e -p"
    action "inspam" maildir "%h/Maildir/spam"
    

    Afin que bogofilter traite les éventuels spams, on va placer 3 autres lignes avant la ligne match account "laposte" action "inlaposte" :

    # Tout passe par l'antispam
    match all action "antispam" continue
    match "^X-Spam-Status: Yes" in headers action "inspam"
    match "^X-Bogosity: Yes" in headers action "inspam"
    

    Ces trois lignes font passer tous (all) les mails à l'action antispam, puis continue. Ensuite, on vérifie si dans les en-têtes des mails (headers) sont présentes les lignes X-Spam-Status: Yes et X-Bogosity: Yes témoignant de la nature spam du mail. Si oui, alors ce mail est passé à l'action “inspam”, et placé dans le dossier des spams.

    Listes de diffusion

    De la même façon, on peut placer les mails destinés à une liste de diffusion dans un dossier à part. Cela se passe avec des expressions régulières (regexp) qui peuvent être trouvées dans le header ou le corps (body) du message :

    match "^(From|Cc|To|List-Id).*@suckless\\.org" in headers action "suckless"
    

    Archivage

    fdm peut apparemment archiver les mails plus vieux de n jours. Voici ce que l'on ajoute dans le fichier de configuration pour ce faire :

    action "keep" keep
    action "archive" mbox "%h/Maildir/archive/%[maildir]-%yq%Q" compress
    account "archive" disabled maildirs {
        "%h/Maildir/laposte/"
        # insérer d'autres comptes ici
            }
    match account "archive" action "keep"
    match account "archive" {
    match age invalid or age > 30 days action "archive"
    match all action keep
    }
    

    Cela suppose qu'il existe un dossier appelé archive. Pour cela, tapez la commande : mkdir -p ~/Maildir/archive/. Les permissions doivent être à 700 : chmod -R 700 ~/Maildir/archive.

    Ensuite, vous archivez en lançant la commande suivante : fdm -va archive fetch. Cette commande peut tout à fait avoir sa place dans le crontab :

    43 12 * * 1 /usr/bin/fdm -va archive fetch
    

    Récupérer le courrier

    Pour récupérer le courrier, lancez la commande fdm fetch. Pour faire vos essais, rajoutez l'option -k afin de laisser les messages sur le serveur.

    Si vous souhaitez que fdm récupère vos messages toutes les 5 minutes, tapez crontab -e, puis ajoutez cette ligne :

    */5 * * * * /usr/bin/fdm fetch >> $HOME/Maildir/fdm.log
    

    Un exemple?

    Cela fait beaucoup d'un coup. Vous trouverez plusieurs exemples dans /usr/share/doc/fdm/examples. Voici mon propre fdm.conf :

    # Quelques options :
    #set verify-certificates
    set unmatched-mail keep
    set parallel-accounts 2
    # Les courriels plus vieux que %max_age sont archivés
    %max_age    = 30
    # simple actions
    action "drop" drop
    action "keep" keep
    # actions à réaliser sur les mails
    action "inlaposte" maildir "%h/Maildir/laposte"
    action "infac" maildir "%h/Maildir/fac"
    action "inlavabit" maildir "%h/Maildir/lavabit"
    action "intoilelibre" maildir "%h/Maildir/toilelibre"
    action "inboiteaspam" maildir "%h/Maildir/bas"
    # Bogofilter super antispam
    action "antispam" rewrite "bogofilter -u -e -p"
    action "inspam" maildir "%h/Maildir/spam"
    # Listes de diffusion
    action "suckless" maildir "%h/Maildir/devlists/suckless"
    action "gnewsense" maildir "%h/Maildir/devlists/gnewsense"
    action "xfce" maildir "%h/Maildir/devlists/xfce"
    action "debian" maildir "%h/Maildir/devlists/debian"
    action "hurd" maildir "%h/Maildir/devlists/hurd"
    ### archiving action
    action "archive" maildir "%h/Maildir/archive/
    ###
    # Comptes courriel :
    account "laposte" imap server "imap.laposte.net"
        user "xavier.cartron" pass "******"
    account "fac" imaps server "imaps.etu.univ-nantes.fr" port 993
        user "user2" pass "********"
    account "lavabit" imaps server "imap.lavabit.com" port 993
        user "bcnofne" pass "*************"
    account "toilelibre" imaps server "imap.singularity.fr" port 993
        user "thuban@singularity.fr" pass "***************"
    account "boiteaspam" imap server "imap.laposte.net"
        user "user4" pass "******************"
    account "stdin" disabled stdin
    ###
    # Archivage
    account "archive" disabled maildirs {
        "%h/Maildir/laposte/"
        "%h/Maildir/lavabit/"
        "%h/Maildir/fac/"
        "%h/Maildir/toilelibre/"
        "%h/Maildir/bas/"
        "%h/Maildir/devlists/"
            }
    match account "archive" and age > %{max_age} days action "archive"
    match account "archive" action "keep"
    # Tout passe par l'antispam
    match all action "antispam" continue
    match "^X-Spam-Status: Yes" in headers action "inspam"
    match "^X-Bogosity: Yes" in headers action "inspam"
    # Filtres pour les liste de diffusion :
    match "^(From|Cc|To|List-Id).*@suckless\\.org" in headers action "suckless"
    match "^(From|Cc|To|List-Id).*@gnu\\.org" in headers action "hurd"
    match "^(From|Cc|To|List-Id).*@nongnu\\.org" in headers action "gnewsense"
    match "^(From|Cc|To|List-Id).*@xfce\\.org" in headers action "xfce"
    match "^(From|Cc|To|List-Id).*debian.*@lists\\.debian\\.org" in headers action "debian"
    # On envoie les mails dans leurs boîtes
    match account "laposte" action "inlaposte"
    match account "fac" action "infac"
    match account "lavabit" action "inlavabit"
    match account "toilelibre" action "intoilelibre"
    match account "boiteaspam" action "inboiteaspam"
    # On attrape tout ce qui n'a pas été filtré
    match all action "inlaposte"
    

    Lire ses mails avec mutt

    Il existe de très nombreux tutoriel pour utiliser mutt, je ne reviendrait donc pas dessus au risque de faire ça moins bien. Par exemple, vous pouvez lire :

    Je me contenterai donc ensuite de lister quelques astuces à placer dans le fichier de configuration de mutt ~/.muttrc

    Voici, en plusieurs fichiers, la configuration que j'utilise :

    Fichier .muttrc :

    set mbox_type=Maildir
    set spoolfile = "~/Maildir/laposte"
    set postponed="~/Maildir/draft"
    set record="~/Maildir/sent"
    set envelope_from=yes
    # Pour utiliser msmtp
    set sendmail="/usr/bin/msmtp"
    # Pour être averti dans dwm
    set beep_new=yes
    # Emplacement de fichiers divers
    set header_cache=~/.mutt/cache/headers
    set message_cachedir=~/.mutt/cache/bodies
    set certificate_file=~/.mutt/certificates
    # Le fichier mailcap associant type de fichier et application
    set mailcap_path    = ~/.mailcap
    # Impression sympa
    #set print_command="/usr/bin/muttprint -F Latex -p TO_FILE:/tmp/$USER.ps EPSON_Stylus_D88 %s"
    set print_command="muttprint -P A4 -F Latex %s"
    #set print_command="a2ps --borders=no --strip=3 -B -o /tmp/$USER.ps"
    set reverse_name=yes
    set reverse_realname=yes
    set from="prx@ybad.name"
    # Heures et dates françaises
    set locale="fr_FR.UTF-8"
    set charset="utf-8"     # character set for your terminal
    set assumed_charset="utf-8"
    set send_charset="utf-8:iso-8859-15:us-ascii"
    set move = no
    set copy = yes
    set abort_unmodified=yes
    # Automatically include message when replying
    set include=yes
    # Set default editor
    # Vim avec vérification d'orthographe et commencement à la première ligne
    set editor='vim + -c "set spell" -c "set spelllang=fr" -c "set wrap" -c "start" -c ":1"'
    set sort = 'threads'
    set sort_aux = 'last-date-received'
    set check_new
    set alias_file=~/.mutt/aliases
    source $alias_file
    # Unset Marking Mails Old
    unset mark_old
    # Pour les mailing lists
    set followup_to=no
    set honor_followup_to=no
    #différent formats indiqué
    set attribution="* %n <%a> [%{%Y-%m-%d %H:%M:%S %Z}]:\n"
    set folder_format="%N %f %F %s %t"
    set index_format="%4C %Z  Exp: %-40.40f    Suj: %-50.50s %b %d %-20.20L (%?l?%4l&amp;%4c?)"
    set pager_context=3
    set nostrict_threads
    set date_format="%H:%M:%S le %d %b %Y "
    # permet lorsqu'on lit un mail de toujours avoir
    # une liste affiché en haut dans une 2ème fenêtre
    set pager_index_lines=9
    # permet d'avoir les threads, et arbre en places
    set sort=threads
    set sort_aux = last-date-received
    # les citations
    set attribution="Le %d, %n a écrit :"
    set forward_format="[Re: %s]"
    set forward_quote
    # config pour le html
    set implicit_autoview
    auto_view text/html
    # Les couleurs
    source ~/.mutt/colors
    # les raccourcis
    source ~/.mutt/keybinds
    # GPG
    source ~/.mutt/gpg
    # Les dossiers
    set folder = ~/Maildir
    mailboxes +laposte
    mailboxes +lavabit
    mailboxes +toilelibre
    #mailboxes +spam
    mailboxes +fac
    mailboxes +bas
    mailboxes +devlists/xfce
    mailboxes +devlists/debian
    mailboxes +devlists/gnewsense
    mailboxes +devlists/suckless
    mailboxes +devlists/hurd
    mailboxes +rss
    #listes de diff
    subscribe wiki@suckless.org
    subscribe dev@suckless.org
    subscribe hackers@suckless.org
    subscribe bug-hurd@gnu.org
    subscribe l4-hurd@gnu.org
    subscribe help-hurd@gnu.org
    subscribe debian-backports@lists.debian.org
    subscribe debian-news-french@lists.debian.org
    subscribe debian-backports-announce@lists.debian.org
    subscribe debian-security-announce@lists.debian.org
    subscribe debian-security@lists.debian.org
    subscribe xfce4-dev@xfce.org
    subscribe xfce@xfce.org
    #hooks
    #les alternatives
    alternates     ^adresse1.domaine.net$ ^adresse2.domaine.net$
    # Remplissage du champ From selon le dossier
    folder-hook   +laposte           'my_hdr From: Xavier Cartron <prx@ybad.name>'
    folder-hook   +toilelibre     'my_hdr From: Thuban <thuban@singularity.fr>'
    folder-hook   +devlists/*      'my_hdr From: Thuban <thuban@singularity.fr>'
    # on définit l'adresse
    folder-hook   .          'set from="prx@ybad.name" \
        sendmail="/usr/bin/msmtp -a yeuxdelibad"'
    folder-hook   +toilelibre     'set from="thuban@singularity.fr"\
        sendmail="/usr/bin/msmtp -a toilelibre"'
    folder-hook   +devlists/*      'set from="thuban@singularity.fr"\
        sendmail="/usr/bin/msmtp -a toilelibre"'
    # basé sur l'adresse qui sert à écrire, on met le bon msmtp
    send-hook "~f ^prx@ybad.name$"  'set sendmail="/usr/bin/msmtp -a yeuxdelibad"'
    send-hook "~f ^thuban@singularity.fr$"  'set sendmail="/usr/bin/msmtp -a toilelibre"'
    

    Fichier ~/.mutt/keybinds

    macro index,pager G "!fdm -vv fetch\r"
    macro index,pager \cb |urlscan\n 'appelle urlview pour extraire les URLs des messages'
    macro attach,compose \cb |urlscan\n 'appelle urlview pour extraire les URLs des messages'
    #raccourci à la vim
    bind pager j next-line
    bind pager k previous-line
    # Gestion des spams
    # F11 spam, F12 ham
    macro index,pager S "|bogofilter -s\nd"  "Apprendre comme spam et sauvegarder dans junk"
    macro index,pager <space>s "|bogofilter -n\nd"    "Apprendre comme non-spam et sauvegarder"
    # Choix de l'adresse d'envoi
    macro generic "<ESC>1" ':set sendmail="/usr/bin/msmtp -a laposte"'
    macro generic "<ESC>2" ':set sendmail="/usr/bin/msmtp -a fac"'
    macro generic "<ESC>3" ':set sendmail="/usr/bin/msmtp -a toilelibre"'
    macro generic "<ESC>4" ':set sendmail="/usr/bin/msmtp -a lavabit"'
    macro generic "<ESC>5" ':set sendmail="/usr/bin/msmtp -a boiteaspam"'
    # Pour ouvrir les flux rss
    #macro pager o "<pipe-entry>sensible-browser<enter>" 'Ouvre dans le navigateur'
    # aller au dossier des rss directement
    macro index,pager <Space>r <change-folder>=rss<Enter>
    

    Fichier ~/.mutt/gpg pour chiffrer les mails

    # GnuPG configuration
    set pgp_use_gpg_agent=yes
    set pgp_decode_command="gpg2 --status-fd=2 %?p?--passphrase-fd 0? --no-verbose --quiet --batch --output - %f"
    set pgp_verify_command="gpg2 --status-fd=2 --no-verbose --quiet --batch --output - --verify %s %f"
    set pgp_decrypt_command="gpg2 --status-fd=2 %?p?--passphrase-fd 0? --no-verbose --quiet --batch --output - %f"
    set pgp_sign_command="gpg2 --no-verbose --batch --quiet --output - %?p?--passphrase-fd 0? --armor --detach-sign --textmode %?a?-u %a? %f"
    set pgp_clearsign_command="gpg2 --no-verbose --batch --quiet --output - %?p?--passphrase-fd 0? --armor --textmode --clearsign %?a?-u %a? %f"
    set pgp_encrypt_only_command="/usr/local/bin/pgpewrap gpg2 --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f"
    set pgp_encrypt_sign_command="/usr/local/bin/pgpewrap gpg2 %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f"
    set pgp_import_command="gpg2 --no-verbose --import %f"
    set pgp_export_command="gpg2 --no-verbose --export --armor %r"
    set pgp_verify_key_command="gpg2 --verbose --batch --fingerprint --check-sigs %r"
    set pgp_list_pubring_command="gpg2 --no-verbose --batch --quiet --with-colons --list-keys %r" 
    set pgp_list_secring_command="gpg2 --no-verbose --batch --quiet --with-colons --list-secret-keys %r" 
    set pgp_good_sign="^\\[GNUPG:\\] GOODSIG"
    set pgp_ignore_subkeys
    set pgp_autosign=yes
    #set pgp_autoencrypt=no
    set pgp_auto_decode=yes
    set pgp_replysignencrypted
    set pgp_replyencrypt=yes
    set pgp_replysign=yes
    set pgp_sign_as=0x31E493B37EF9F166
    set pgp_timeout=32767
    set pgp_verify_sig=yes
    set pgp_getkeys_command="gpg2 --recv-keys %r"
    #my_hdr X-GPG-Key-FingerPrint: 1180 F11D 11E6 1176 11CC E1B1 
    

    Un .mailcap pour les pièces jointes

    Voici un exemple de ~/.mailcap pour ouvrir les pièces jointes. Certains programmes sont en fait des scripts disponibles ici.

    le fichier mailcap

    Envoyer des mails avec msmtp

    Msmtp se configure en éditant le fichier ~/.msmtprc. Sa syntaxe est très simple, puisqu'il suffit de préciser le nom du compte (qui sera utilisé avec mutt par exemple), puis de remplir le serveur, le mot de passe, le port, et éventuellement le nom qui apparaîtra au destinataire. Comme un exemple parle mieux :

    account toilelibre
    host smtp.singularity.fr
    protocol smtp
    from thuban@singularity.fr
    tls_certcheck off
    port 587
    auth on
    user thuban@singularity.fr
    password *********
    

    Vous pouvez éventuellement préciser en début du fichier tls on pour utiliser tls par défaut, et syslog on pour enregistrer les messages d'erreurs de msmtp dans le syslog.

    Il est bien sur possible de préciser plusieurs comptes smtp. Pour choisir le compte avec lequel on souhaite envoyer un mail, il faut le préciser avec l'option -a. Par exemple, pour utiliser le compte (account) toilelibre ci- dessus, il faudra utiliser la commande : msmtp -a toilelibre, ce qui donne pour écrire un mail très rapide :

    echo "Coucou!" | msmtp -a toilelibre correspondant@mail.zzz
    

    Astuces reçues par cacatoes

    cacatoes m'a gentiment envoyé quelques astuces par mail suite à ces recherches. Les voici :

    Je réutilise une astuce trouvée sur le web:

    macro compose v "<edit-from>^Uidentity_<tab>" "Select from"
    

    …en ayant défini des alias au préalable:

    alias identity_0        moncourrier1@boite.net
    alias identity_1        autre@boite.org
    

    … et on écrit autant de lignes qu'il le faut.

    Et là, ça se fait automatiquement via:

    send2-hook "~f ^maboite@blop.com$" 'set sendmail="/usr/bin/msmtp -C
    $HOME/.config/msmtp/msmtprc -a maboite"'
    

    dans l'ordre, les hooks s'executent comme suit: d'abord reply-hook (lors du reply, si on reply), puis send-hook (avant composition), puis send2-hook (après composition)