Mon laptop est équipé des logiciels distribués par Debian GNU/Linux me permettant d’avoir une confiance assez relative dans les logiciels que je vais utiliser par la suite. Il s’agit bien sûr d’une machine d’appoint utilisée dans des conditions de mobilité et je souhaite que cette machine synchronise automatiquement une partie des mails lorsqu’elle est en ligne et me permette d’envoyer les mails lorsque je suis hors-ligne.

Je passerais rapidement sur l’utilisation de Awesome, urxvt et GNU/Emacs comme outils principaux pour m’arrêter à la solution que j’ai retenu pour la gestion des mails.

J’utilise mutt, en conjonction avec muttprofile pour changer de profile entre mes différentes sessions. Pour cela, il suffit de disposer des directives suivantes :

zsh 1198 % ls -lh .mutt
total 16K
lrwxrwxrwx 1 endymion endymion   32 oct.  13 20:01 profile.active -> profile.endymion_network
-rw-r--r-- 1 endymion endymion 1,8K juil. 24 22:13 profile.endymion
-rw-r--r-- 1 endymion endymion  974 oct.  13 22:23 profile.endymion_network
-rw-r--r-- 1 endymion endymion 1023 juin  27 19:47 profile.vincentxavier
-rw-r--r-- 1 endymion endymion  995 oct.  13 22:23 profile.vincentxavier_network

Un de ces fichiers contient par exemple :


# NAME : imap://endymion@thetys-retz.net
# DESC : This profile display imap mailboxes for endymion@thetys-retz.net account.

source ~/.muttrc.commons

set folder="imap://mail.thetys-retz.net"      

source ~/.muttrc.folders

set imap_user="endymion"
set imap_pass=`~/.local/bin/netrc.pl mail.thetys-retz.net endymion`

# Mutt is able to deal with IMAP subscription, just enable it with
# this variable
set imap_check_subscribed="yes"                           
set imap_list_subscribed="yes"

# Mutt is able to send mail over various method, smtp being one of the
# methods. These setting allows you to customize it. Beware that some
# internet provider block port 25, so be sure to send on some other port.

set smtp_url="smtps://username@mail.thetys-retz.net"
set smtp_pass=`~/.local/bin/netrc.pl mail.thetys-retz.net endymion`

Lorsque je ne suis pas connecté, j’utilise la version suivante :

# NAME : endymion@thetys-retz.net
# DESC : This profile display synchronised folders for endymion@thetys-retz.net account.

source ~/.muttrc.commons

set folder="~/.maildir/endymion@thetys-retz.net/"

source ~/.muttrc.folders

mailboxes =INBOX =Sent =Brouillons =Admin

En ne précisant pas l’adresse du serveur smtp, Mutt va utiliser la version local de sendmail, qui chez moi est fournie par postfix. Et c’est là que l’utilisation de postfix va se révéler intéressante. Voici déjà une copie de ma configuration :


# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/postfix/mail.thetys-retz.net.pem

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = tauceticentral.thetys-retz.net
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
#myorigin = /etc/mailname
myorigin = thetys-retz.net
mydestination = 

relayhost = [mail.thetys-retz.net]:587

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

mailbox_command = 
mailbox_size_limit = 0

recipient_delimiter = +

inet_interfaces = loopback-only
inet_protocols = all

defer_transports = smtp

Cette configuration permet de stocker tous les messages envoyés au serveur local, via sendmail et de les mettre dans une file d’attente s’il s’agit de les envoyer par smtp. Dès que je suis connecté, il suffit de lancer (manuellement ou autmatiquement) un postqueue -f pour vider la file d’attente. Le relais se fait exclusivement via mon propre serveur de mail via une connexion chiffrée et authentifiée. Pour cela, il ne faut pas oublier le mot de passe SASL :

# destination                   credentials
[mail.thetys-retz.net]:587      remotemail:password

La configuration du système mail côté client a été jointe à ce billet.

Du côté serveur, il faut créer un utilisateur remotemail, qui servira pour les envois via un relais authentifié. Pour cela, il faut rajouter remotemail@thetys-retz.net reject au fichier /etc/postfix/local_part. Dans la configuration de postfix, il ne faut pas oublier d’ouvrir les protocoles smtps et submission dans /etc/postfix/master.cf sans oublier de rajouter check_recipient_access hash:/etc/postfix/local_part dans smtpd_recipient_restrictions