5. Configuration

5.1 Configuration côté système

La configuration de Qmail se fait entièrement via des fichiers texte tous situés dans le répertoire /var/qmail/control/ (ou son équivalent le cas échéant). Les différents programmes composant Qmail lisent le contenu de ces fichiers et positionnent leurs variables en conséquence. Des options par défaut sont prises pour chaque fichier inexistant. Par défaut, un seul de ces fichiers existe, il s'agit de /var/qmail/control/me qui contient le nom qualifié de la machine. Un «man qmail-control» donne une liste complète de tous ces fichiers, des programmes Qmail qui les utilisent ainsi que des options prises par défaut. C'est très pratique.

Le premier fichiers de configuration que vous serez amené à modifier est sans doute /var/qmail/control/aliasempty qui contient le nom de la boite au lettre dans laquelle le MDA qmail-local livre le courriel lorsqu'il n'y a pas de .qmail. Sa valeur par défaut est ./Mailbox.

Un autre fichier très important pour vous sera sans doute locals, qui contient les noms qualifiés des hôtes considérés comme locaux, c'est à dire ceux pour lesquels les courriels que vous recevez et qui leurs sont destinés seront délivrés sur votre machine. Par défaut, cette vraiable vaut me (votre nom de machine). Un petit exemple vallant mieux qu'un long discours, voici un exmemple de locals


mamachine.mondomaine.amoi
ftp.mondomaine.amoi
www.mondomaine.amoi

/var/qmail/control/me contenant
mamachine.mondomaine.amoi

Bien sûr, il faudra de plus que les champs MX dans le DNS de ftp.mondomaine.amoi et www.mondomaine.amoi pointent sur mamachine.mondomaine.amoi.

D'autres fichiers sont importants comme par exemple


/var/qmail/control/smtpgreeting
/var/qmail/control/localiphost
/var/qmail/control/defaulthost
/var/qmail/control/defaultdomain
/var/qmail/control/localiphost
/var/qmail/control/smtproutes
/var/qmail/control/rcpthosts
/var/qmail/control/virtualdomains

mais je vous recommande fortement de faire un «man qmail-control». vous y trouverez une liste de tout les fichiers de configuration, les binaires qui les utilisent et les valeurs prises par défaut.

5.2 Configuration côté utilisateur

Les adresses

Dans le système Qmail, un utilisateur nommé login contrôle toutes les adresses courriel de la forme login-* où l'étoile représente une chaîne quelconque formée de caractères valides pour une adresse.

Pour chaque adresse login-chaine, l'utilisateur peut décider de créer le fichier ~login/.qmail-chaine qui contiendra les instructions à suivre par qmail-local, le livreur de courriel (MDA) de Qmail. Par convention, le fichier ~login/.qmail correspond à l'adresse login tout court. De plus, le fichier spécial ~login/.qmail-default lorsqu'il existe, joue le rôle de fichier par défaut.

En l'abscence des fichiers ~login/.qmail et ~login/.qmail-default, qmail-local livrera par défaut le courriel dans la boite aux lettres au format mbox ~login/Mailbox, à moins que l'administrateur n'ait positionné la variable /var/qmail/control/aliasempty.

Il en va tout autrement pour les courriels à destination de login-chaine. qmail-local ne livrera pas un courriel à destination de login-chaine s'il ne trouve ni ~login/.qmail-chaine ni ~login/.qmail-default au moment de livrer. En fait, ce courriel sera intercepté par l'utilisateur spécial alias si son fichier ~alias/.qmail-default existe et retournera à l'expéditeur sinon.

Les fichiers ~login/.qmail-* ont tous la même syntaxe.

Syntaxe des .qmail

Plongeons-nous à présent dans le contenu de ces fameux fichiers .qmail. Ces fichiers contiennent les instructions que soit suivre le MDA qmail-local pour livrer le courriel. Çelà peut rappeller vaquement le mécanisme des fichiers .forward du monde de Sendmail. Voici un exemple :


# mon .qmail à moi
# Un pipe 
|qbiff
# Un forward
&moi@ailleurs.laba
# Livraison dans une boite aux lettres maildir
./maildir/
# Livraison dans une boite aux lettres mbox
./mbox

On le voit, une seule instruction de livraison par ligne. Les lignes sont toutes interprétées à chaque courriel livré par qmail-local. Elles peuvent contenir des commentaires préfixés par une dièse. Dans cet exemple, chaque courriel sera «pipé» dans qbiff, «forwardé» vers moi@ailleurs.laba et livré dans les boites aux lettres ~/maildir/ et ~/mailbox.

qmail-local exécute les livraisons vers tubes de la forme


|commande

en écrivant le courriel dans l'entrée standard d'un
sh -c commande

exécuté dans le répertoire personnel du destinataire. L'entête du courriel ne contient alors pas les champs Return-Path et Delivered-To mais qmail-local passe beaucoup d'informations par variables d'environnement, par exemple SENDER et RECIPIENT (faire «man qmail-command». Pour les commandes qui ne ne prennent pas en compte ces variables, comme procmail ou formail par exemple, il suffit d'utiliser le binaire preline livré avec Qmail qui insère les champs Return-Path et Delivered-To au message avant de l'écrire dans l'entrée standard de la commande. Par exemple :
|preline formail -A "Status: RO" | procmail

Je vous conseille fortement de faire un «man dot-qmail» pour en savoir plus sur la syntaxe et les subtilités du format des fichiers .qmail.

Pour effectuer une modification sûre de vos fichiers .qmail, Dan Bernstein recommande de positionner le bit sticky sur son répertoire personnel par un


chmod +t $HOME

pendant la durée de la modification. En effet, qmail-local refusera de livrer dans un répertoire dont le bit sticky est positionné. Une fois la modification effectuée, il vous suffit de désactiver le bit sticky de votre répertoire par un
chmod -t $HOME

Le plus simple est de se faire un alias pour son shell favori. Par exemple, pour bash, je rajoute la ligne :
alias edqm='chmod +t ~ && vi ~/.qmail && chmod -t ~'

à mon ~/.bash_profile.

5.3 Les domaines virtuels (à faire)

À faire.

5.4 PPP

serialmail (à compléter)

On peut utiliser serialmail, http://pobox.com/~djb/serialmail.html.

Le reste de cette section est à écrire.

maildir2smtp

Ma machine personnelle n'est reliée à l'Internet que de façon intermittante au travers d'une connection PPP avec mon FAI. maildir2smtp permet de vider une boite aux lettres au format maildir sur un port SMTP. Il suffit donc de faire en sorte que les courriels à destination de l'extérieur (i.e. qui doivent transiter par du PPP dans mon cas) soient systématiquement livrés dans une boite aux lettres au format maildir spécialement prévue à cet effet. Ensuite, lors de la prochaine connection PPP, maildir2smtp videra cette boite au lettres en envoyant son contenu sur le port SMTP de la passerelle courriel de mon FAI. Celà est d'ailleurs fait automatiquement par le script /etc/ppp/ip-up.local qui est executé à chaque établissement de liaison TCP/IP par PPP. L'avantage d'un tel système est que les courriels ainsi stockés ne restent pas dans la queue pour rien, les logs ne sont donc pas pollués par des messages d'erreur.

Il faut créer une boite au lettres ~alias/ppp par :


root$ maildirmake ~alias/pppdir
root$ chown -R alias ~alias/pppdir

Ensuite il faut créer le fichier ~alias/.qmail-ppp-default qui doit contenir ./pppdir/.

Enfin il faut ajouter la ligne


:alias-ppp

au fichier /var/qmail/control/virtualdomains.

Il ne reste plus qu'à ajouter au fichier /etc/ppp/ip-up.local (lui même appellé par /etc/ppp/ip-up) la ligne suivante :


  maildir2smtp ~alias/pppdir \
               alias-ppp- mail.votre.provider \
               votre.host.name 2>>/var/log/maildir2smtp.log 

où mail.votre.provider désigne la passerelle courriel de votre FAI.

5.5 UUCP (à écrire)

Section à écrire.