<Chapter>
<Title>Généralités</Title>
  
<Para>
Voici comment Daniel J. Bernstein, l'auteur de 
<ProductName>qmail</ProductName>, 
nous présente  son programme :
</Para>

<Para>
<Emphasis>
«qmail is a secure, reliable, efficient, simple message transfer agent.
It is meant as a replacement for the entire sendmail-binmail system on
typical Internet-connected UNIX hosts».
</Emphasis>
</Para>

<Para>
Le but de ce document est de présenter le fonctionnement du système 
<ProductName>qmail</ProductName>.
Cependant, si vous recherchez une configuration «clé en main» pour commencer,
vous trouverez peut être votre bonheur dans la 
<XRef LinkEnd="configs-type"> 
</Para>

<Para>
Ce document traite de <ProductName>qmail</ProductName>
<ProductNumber>1.01</ProductNumber>.
Toutefois, ce qui est dit est encore valable pour 
<ProductName>qmail</ProductName>
<ProductNumber>1.03</ProductNumber>,
la dernière version à l'heure où j'écrit ces lignes.
Certaines nouvelles fonctionnalités 
ne sont donc pas abordées ici mais le seront je l'espère dans les prochaines
versions de ce document. Je pense par exemple au protocole QMQP.
</Para>
  
<Sect1>
<Title>Pourquoi choisir <ProductName>qmail</ProductName></Title>
    
<Para>
<ProductName>sendmail</ProductName>
et encore moins son petit remplaçant 
<ProductName>smail</ProductName>
ne brillent par leurs performances, sans parler des innombrables trous
de sécurité (certes moins nombreux pour 
<ProductName>smail</ProductName>) 
dûs à la fois à leur structuration et à la complexité de leur tâche.
Pour couronner le tout, la configuration de 
<ProductName>sendmail</ProductName> 
n'est pas des plus intuitives.
</Para>

<Para>
Pour ne rien vous cacher,     
les détracteurs de
<ProductName>qmail</ProductName>
lui reprochent d'être moins «tout terrain» que son grand rival
<ProductName>sendmail</ProductName>,
ce qui est vrai à mon avis, en tout les cas pour l'instant.
La polyvalence vient souvent avec le temps.
<ProductName>sendmail</ProductName>
est de plus un standard de fait, très répandu et très documenté, ce qui plaide
en sa faveur.
Certains n'aiment pas du tout le grand nombre de binaires et de
fichiers de configuration de
<ProductName>qmail</ProductName>,
mais je pense que cela est avant tout histore de
goût et d'habitudes. Je trouve même que celà permet de clarifier les
choses.
</Para>

<Para>    
D'autre part, D.J. Bernstein, l'auteur de 
<ProductName>qmail</ProductName>,
est assez critiqué, voir même traité de «con»
(sic) par
certains. On lui reproche sa façon arrogante de répondre sur les forums et les
listes de diffusions ainsi qu'un dénigrement un peu systématique de
<ProductName>sendmail</ProductName>.
</Para>

<Para>    
Il n'en demeure pas moins que l'oeuvre est plus importante que son auteur.
<ProductName>qmail</ProductName>
est un exellent logiciel qui vous apportera une grande satisfaction.
Ses supporters, dont je fais partie,  le trouvent à la fois très sûr,
facilement configurable, bien documenté, performant et très orienté
utilisateurs alors qu'ils reprochent à <ProductName>sendmail</ProductName>
ses trous de sécurité, sa lourdeur et
le coté abscons de sa configuration.   
Mais bien entendu, comme tout logiciel,
<ProductName>qmail</ProductName>      
a ses limites et est l'oeuvre d'un être humain.
</Para>      

<Para>
Pour être tout à fait honnète, la concurrence entre MTA sous
<ProductName>Unix</ProductName> ne se limite
pas à un affrontement entre
<ProductName>sendmail</ProductName>
et
<ProductName>qmail</ProductName>.
Le plus modeste       
<ProductName>smail</ProductName>
peut s'avérer bien souvent suffisant.
On entend également de plus en plus parler de
<ProductName>vmailer</ProductName> 
et de 
<ProductName>exim</ProductName>.
</Para>

</Sect1>
      
<Sect1>
<Title>Organisation de la messagerie <ProductName>qmail</ProductName></Title>

<Para>
À la différence de 
<ProductName>sendmail</ProductName>, 
<ProductName>qmail</ProductName> 
n'est pas monolithique.
Le système 
<ProductName>qmail</ProductName> 
se compose de plusieurs programmes tournant sous des
UID/GID différents et presque tous non nuls rendant difficile toute tentative
d'intrusion. De plus, la gestion des chaînes de caractères dans 
<ProductName>qmail</ProductName> 
a été traitée avec beaucoup de soin pour éviter les problèmes de
débordement, souvent à l'origine des trous de sécurité.  
Un groupe d'utilisateurs offre même un prix de 1000$ à toute personne qui 
trouverait un trou de sécurité dans <ProductName>qmail</ProductName> !
</Para>

<Para>
Aucun binaire ne porte le nom <FileName>qmail</FileName>.
Par contre, beaucoup de binaires ont
un nom qui commence par <FileName>qmail-</FileName>.
</Para>

<Para>
<ProductName>qmail</ProductName> est en fait un
ensemble de binaires, tous situés par défaut dans 
<FileName>/var/qmail/bin/</FileName>,
comprenant une partie MTA avec ses 
«facettes» SMTP avec 
<Application>qmail-smtpd</Application> 
et QMTP avec 
<Application>qmail-qmtpd</Application>,
<Application>qmail-inject</Application> 
et 
<Application>mailsubj</Application> 
pour l'injection dans la file d'attente
et une partie MDA 
<Application>qmail-local</Application> 
ainsi qu'un petit wrapper pour
<ProductName>sendmail</ProductName>.
</Para>

<Para>
Les binaires du système 
<ProductName>qmail</ProductName> 
ont tous leur page de manuel.
L'aide comprend également des pages de manuel supplémentaires décrivant 
certains formats de fichiers ou d'entêtes par exemple.
En voici quelques unes :
<Emphasis>qmail</Emphasis>,
<Emphasis>qmail-limits</Emphasis>,
<Emphasis>qmail-upgrade</Emphasis>,
<Emphasis>qmail-header</Emphasis>,
<Emphasis>addresses</Emphasis>,
<Emphasis>envelopes</Emphasis>.
</Para>

<Para>
      
Le POP3 est disponible via le triplet 
<Application>qmail-popup</Application>,
<Application>checkpassword</Application> 
et 
<Application>qmail-pop3d</Application>.
Il existe des patches pour les gestionnaires IMAP et POP3 habituels
permettant de les utiliser avec 
<ProductName>qmail</ProductName>, 
voir la page de
<ProductName>qmail</ProductName>
<ULink URL="http://www.qmail.org/">http://www.qmail.org/</ULink>
pour plus de détails.
Les messages sont placés dans la file d'attente par 
<Application>qmail-queue</Application>.
La gestion de la file d'attente est effectuée par differents programmes dont
<Application>qmail-lspawn</Application>,
<Application>qmail-clean</Application> 
et
<Application>qmail-rspawn</Application>, 
tous fils du daemon
<Application>qmail-send</Application>.
Le traçage via 
<Application>syslog</Application> 
peut être effectué par 
<Application>splogger</Application>.
Voici un schéma montrant la structure de 
<ProductName>qmail</ProductName> lorsqu'il est chargé en
mémoire :

<ProgramListing>
UTILISATEUR PROGRAMME                 FONCTION
qmails      qmail-send                gestion sortie file d'attente
qmaill      \_ splogger qmail         enregistrement via syslog
qmailq      \_ qmail-clean            nettoyage de la file d'attente
qmailr      \_ qmail-rspawn           gestionnaire messages distants
root        \_ qmail-lspawn ./Mailbox gestionnaire messages locaux
</ProgramListing>

La directive <FileName>./Mailbox</FileName> passée en paramètre à
<Application>qmail-lspawn</Application> est la directive de livraison par défaut.
Elle peut très être un tube (pipe) vers un MDA classique comme
<ProductName>procmail</ProductName>. C'est par exemple le cas sur la
<ProductName>Debian GNU/Linux</ProductName>.
</Para>

<Para>
Voici un petit schéma explicatif emprunté au fichier
<FileName>INTERNALS</FileName> livré avec les sources
qui contient une présentation de la structure de la file d'attente de
<ProductName>qmail</ProductName> et sa gestion 

<ProgramListing>
 qmail-smtpd --- qmail-queue -- qmail-send --- qmail-rspawn -- qmail-remote
               /                    |      \
qmail-inject _/                qmail-clean  \_ qmail-lspawn -- qmail-local
</ProgramListing>

</Para>

<Para>
<Application>qmail-send</Application> gère les messages placés dans la file
d'attente par <Application>qmail-queue</Application>.
Il fait appel à <Application>qmail-lspawn</Application>
lui même invoquant <Application>qmail-local</Application>
et <Application>qmail-rspawn</Application>
lui même invoquant <Application>qmail-remote</Application>.
Voir leur page de manuel respectives pour les détails.
Un <Command>man qmail</Command> donne une présentation globale de
<ProductName>qmail</ProductName>.
</Para>

<Para>
Bien entendu, ces pages de manuel ne seront disponibles que lorsque
<ProductName>qmail</ProductName>
sera installé. Cependant, une version HTML de ces pages existe
à l'URL 
<ULink URL="http://qmail-docs.surfdirect.com.au/docs/qmail-1.03-man/">
http://qmail-docs.surfdirect.com.au/docs/qmail-1.03-man/</ULink>. 
</Para>

<Para>
Avant de passer à la suite, voici la structure standard du répertoire
<ProductName>qmail</ProductName> <FileName>/var/qmail/</FileName>

<ProgramListing>
 REPERTOIRE          FONCTION
 /var/qmail          répertoire principal
  \_ alias/          réceptacle des courriels «spéciaux» (root...)
  \_ bin/            binaires de la distribution qmail
  \_ control/        fichiers de configuration 
  \_ man/            pages de manuel
  \_ queue/          la file d'attente
  \_ users/          plan d'adressage (super-fichier d'alias)
</ProgramListing>

Sur <ProductName>Debian GNU/linux</ProductName>,
la structure est un peu différente
et plus conventionnelle. Les binaires sont répartis entre
<FileName>/usr/sbin/</FileName> et <FileName>/usr/bin/</FileName>,
les pages de manuel
sont dans <FileName>/usr/man/</FileName>,
le répertoire <FileName>/var/qmail/control/</FileName>
devient  <FileName>/etc/qmail/</FileName> et
<FileName>/var/qmail/queue/</FileName> devient
<FileName>/var/spool/qmail</FileName>
via des liens symboliques.
</Para>

<Para>
Pour finir cette section, je vous signale l'existence de la
«qmail big picture» à l'URL
<ULink URL="http://www.nrg4u.com/">http://www.nrg4u.com/</ULink>
qui donne une vue synthétique de l'achitecture de
<ProductName>qmail</ProductName>.
</Para>

</Sect1>

<Sect1>
<Title>Principales différences avec la messagerie sendmail</Title>

<Para>
Le mieux serait de lire les fichiers
<FileName>BLURB</FileName>,
<FileName>BLURB1</FileName>,
<FileName>BLURB2</FileName> et surtout
<FileName>BLURB3</FileName>
livrés avec les sources mais en voici un pâle résumé :
</Para>

<Para>

<ItemizedList>
<ListItem>

<Para>
plus de sécurité grâce à la structure «éclatée» de
<ProductName>qmail</ProductName>, 
un minimum tourne en setuid ou en root;
</Para>
</ListItem>
<ListItem>

<Para>
de très bonnes performances grâce entre autres choses à une gestion de file
d'attente très rapide (numérotée par i-noeuds);
</Para>
</ListItem>
<ListItem>

<Para>
configuration très simple via un ensemble de fichiers de contrôle et 
de variables d'environnement.
Conformité aux RFC-822 et RFC-1123.
Gestionnaire SMTP <Application>qmail-smtpd</Application> «8-bit clean», 
gestionnaire <Application>qmail-qmtpd</Application> implémentant le futur 
standard QMTP;
</Para>
</ListItem>
<ListItem>

<Para>
disparition du fichier
<FileName>/etc/aliases</FileName>, remplacé par
la super base d'alias
<FileName>/var/qmail/users/assign</FileName>.
Disparition des
<FileName>.forward</FileName> au profit des
<FileName>.qmail</FileName>,
à la fois plus puissants et plus simples;
</Para>
</ListItem>
<ListItem>

<Para>
configuration et gestion du courrier très simple grâce aux fichiers
<FileName>.qmail</FileName> interprétés par le MDA
<Application>qmail-local</Application>;
chaque utilisateur login controle toutes les adresses login-*.
La livraison des courriels à destination de login-chaine est controlée
par le fichier <FileName>~login/.qmail-chaine</FileName> ou à défaut par
<FileName>~login/.qmail-default</FileName>;
</Para>
</ListItem>
<ListItem>

<Para>
tout utilisateur peut créer et gérer ses propres listes de
diffusions, soit avec <Application>qlist</Application>,
soit avec le puissant <ProductName>ezmlm</ProductName>,
écrit aussi par Dan Bernstein;
</Para>
</ListItem>
<ListItem>

<Para>
nouveau format de boite au lettres nommé maildir, plus fiable que 
le format mbox et particulièrement utile lors de l'utilisation de NFS.
Les utilitaires 
<Application>maildir2mbox</Application> et
<Application>maildirmake</Application> 
sont fournis.
</Para>
</ListItem>

</ItemizedList>

</Para>

<Para>
Avec <ProductName>qmail</ProductName>,
nous dit Dan Bernstein, vous pouvez être sûr qu'un message
entrant dans la file d'attente ne sera jamais perdu.
</Para>

</Sect1>

</Chapter>

