Page précédente Page suivante Table des matières

4. Pour aller un peu plus loin...

4.1 Les files d'attente

Lorsqu'on a l'habitude d'utiliser sendmail, la multiplicité des files d'attente de postfix a tendance à dérouter. En effet, en lieu et place du classique et unique /var/spool/mailq/, on se retrouve avec l'arborescence suivante :

alex:~# tree /var/spool/postfix/
/var/spool/postfix/
|-- active
...

|-- deferred
|   |-- 048ED779D1
|   |-- 09085779E0
|   |-- 17101779D6
|   |-- 31DE0779DA
|   |-- 3D15D779D4
|   |-- 4D2BD779D7
|   |-- 7BFA6779D3
|   |-- 7C65D779CF
|   |-- B10C3779D0
|   `-- C3272779D2
...

|-- incoming
...

|-- maildrop
...

Nous avons abrégé la sortie de cette commande pour ne retenir que les répertoires qui nous intéressent ici.

Postfix utilise quatre files d'attentes :

La documentation de la distribution postfix dispose d'un schéma présentant clairement les interactions entre les différentes files d'attente et les différents démons.

Le contenu de la file d'attente peut être consulté avec la commande mailq : normalement celle-ci ne doit produire que les messages dont la délivrance n'a pas encore eu lieu (dans notre cas, les 10 messages contenus dans la file deferred.

4.2 Les commandes de postfix

Nous avons déjà vu que postfix s'invoquait en lui passant une commande qui précisait l'action à entreprendre. Ainsi, les commandes stop et start arrêtent et démarrent le serveur, respectivement. D'autres commandes existent :

Enfin, last but not least, la distribution postfix fournit le programme /usr/sbin/postconf pour afficher les paramètres modifiés par notre configuration (postconf -n), les valeurs par défaut du logiciel (postconf -d) et l'ensemble des valeurs courantes des paramètres (postconf. Voici, à titre d'exemple, ce que donne la première commande sur ma configuration personnelle :

alex:/etc/postfix# /usr/lib/postfix/postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_at_myorigin = yes
default_destination_concurrency_limit = 10
default_transport = smtp
defer_transports = smtp
local_destination_concurrency_limit = 2
mail_owner = postfix
mailbox_command = /usr/bin/procmail
masquerade_domains = $mydomain
mydestination = $myhostname, localhost
mydomain = linux-france.com 
myhostname = alex.linux-france.com
mynetworks = 192.168.2.0/24, 127.0.0.0/8
myorigin = $myhostname
program_directory = /usr/lib/postfix
queue_directory = /var/spool/postfix
relayhost = [smtp.dial.oleane.com]

Nous n'avons pas encore vu certains de ces paramètres ? C'est normal. Nous allons maintenant nous en occuper...

4.3 Envoyer du courrier non local

Bien, nous savons maintenant que postfix fonctionne correctement avec les adresses locales à notre machine (si ce n'est pas le cas, n'allez pas plus loin et revenez nous voir lorsque le problème sera réglé...). Allons maintenant à la conquête du monde.

La meilleure chose à faire, tant que tous nos tests n'ont pas donné satisfaction, est d'utiliser un « écho » : ie une adresse où nous pourrons envoyer un courrier qui nous sera retourné tel qu'il a été reçu. Ceci nous permettra de vérifier au moins deux choses :

Une telle adresse est echo@cnam.fr et c'est celle que nous utiliserons ici.

Tout le courrier sortant de notre machine est d'abord envoyé au serveur de courrier de notre fournisseur d'accès qui se chargera ensuite de l'envoyer sur l'Internet. Dans la terminologie classique, cela s'appelle un hôte relais (ou relayhost) en anglais. Il faut donc indiquer à postfix le nom de cet hôte relais. Si l'on suppose que nous sommes abonné au fournisseur d'accès bien connu fai.fr et que la machine s'occupant du courrier s'appelle mail.fai.fr, il faut modifier le fichier /etc/postfix/main.cf, rechercher les lignes contenant relayhost et mettre :

relayhost = [mail.fai.fr]  

Puis, comme à chaque modification de ce fichier, il faut faire postfix reload.

Essayons maintenant la commande suivante :

$ mail echo@cnam.fr -s test 
essai d'envoi de courrier via postfix
.
Cc: 
$ 

Puis, examinons la file d'attente :

$ mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
9C26D779D0      351 Wed Jan 20 21:23:55  babe@alex.linux-france.com
(Name service error for domain mail.fai.fr: Host not found, try again)   

N'étant relié à l'Internet qu'épisodiquement, via une connexion PPP à un fournisseur d'accès (F.A.I.), le domaine cnam.fr ne pourra être connu que lorsque nous sommes connectés, par consultation du serveur de noms de notre F.A.I. Ce n'était pas le cas ici, et ce ne le sera pas souvent : pour économiser sur la facture téléphonique, on a tout intérêt à composer son courrier en étant déconnecté et à tout poster d'un seul coup lors de la prochaine connexion.

postfix nous prévient de cet état de fait grâce au message Name service error for domain cnam.fr de la commande mailq. Lors de notre prochaine connexion, il suffira simplement d'appeler la commande postfix flush (ou sendmail -q pour les nostalgiques...) pour que le courrier en attente soit à nouveau délivré. Attention : sur ma machine, par exemple, seul root a le droit de faire postfix flush, un utilisateur normal devra utiliser /usr/sbin/sendmail -q pour envoyer les messages.

Lorsqu'on est, comme moi, connecté épisodiquement, le mieux est d'indiquer à postfix de déférer la délivrance des courriers. Ceux-ci seront alors placés dans la file d'attente et postfix ne tentera plus de les envoyer sauf si on le lui demande explicitement via un sendmail -q. Ce type de fonctionnement est tout à fait adapté aux connexions épisodiques (on peut mettre le sendmail -q dans un script post-connexion) et est piloté par le paramètre defer_transports :

defer_transports = smtp

En attendant de nous connecter, on peut encore vérifier certains points. postfix laisse des traces de ses activités dans les fichiers /var/log/mail.*. Les erreurs sont rapportées dans mail.err, les simples avertissements le sont dans mail.warn, toutes les activités de délivrance des courriers sont inscrites dans mail.info et mail.log est un fichier fourre-tout reprenant le contenu des trois précédents.

Analysons tour à tour les trois premiers fichiers :

Le dernier message ici aurait été produit si nous n'avions pas utilisé le paramètre defer_transports évoqué plus haut. Si nous l'avions fait, le message aurait été :

Jan 20 21:23:55 alex postfix/smtp[1058]: 9C26D779D0: \
                to=<echo@cnam.fr>, relay=none, delay=0, \
                status=deferred (deferred transport)

Nous pouvons aussi aller directement inspecter le contenu des files d'attente de postfix avec la commande tree utilisée plus haut. Vous noterez alors que le numéro 9C26D779D0 apparaît en deux endroits :


Page précédente Page suivante Table des matières