postfix.traduc.org_postfix-logo.jpg

===== AIDE/MEMO =====

Commande pour connaître la queue de mail

 mailq 

ou

 postqueue -p
 postcat -vq XXXXXX

mailq > mailqueue.txt ou

 postqueue -p > mailqueue.txt

postqueue -f ou

 postfix flush
 /usr/bin/mailq

Pour plus de détails, on peut également consulter le fichier /var/log/mail.log

 postsuper -d queue_id

ou queue_id doit être remplacer par l'identifiant correspondant au message.

 postsuper -d ALL

POSTFIX file d'attente expliquation

postfix utilise quatre files d'attentes:

maildrop
contient les messages locaux ;

incoming

contient les messages prélevés dans maildrop par le démon pickup, puis qui ont été traités par le démon cleanup. Cette file contient aussi les messages venant de l'extérieur. En bref, elle contient les messages qui n'ont pas encore été traités par le gestionnaire de file d'attente qmgr ;

active

est une file contenant les messages en cours de délivrance par qmgr ;

deferred

le répertoire /var/spool/postfix/defer contient les mails en attente plus longue et des répertoires qui sont « hachés » afin de ne pas avoir des répertoires contenant trop de fichiers :

ainsi, le fichier 7B345AC0B1, par exemple, se trouve dans defer/7/B/7B345AC0B1.

Commandes alternatives :

reload

force postfix à relire ses fichiers de configuration (en fait, il s'agit de deux appels consécutifs à postfix : l'un avec le paramètre stop, l'autre avec le paramètre start) : cette commande s'avère donc nécessaire après la modification du fichier main.cf, par exemple ;

check

permet de vérifier la configuration du système de courrier. Ce paramètre permet aussi de surveiller les différentes permissions des répertoires utilisés par postfix, et de créer ces répertoires s'ils n'existent pas. Si la configuration est correcte, et si l'option -v n'a pas été utilisée, cette commande ne produit aucune sortie ;

flush

force postfix à tenter de vider la file deferred, donc à envoyer les messages en attente de délivrance.

les valeurs par défaut (postconf -d) et l'ensemble des valeurs courantes des paramètres (postconf).
Exemple:

# postconf -n
alias_database = hash:/etc/postfix/aliases
alias_maps = hash:/etc/postfix/aliases
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
debug_peer_level = 2
default_destination_concurrency_limit = 10
default_transport = smtp
defer_transports = smtp
local_destination_concurrency_limit = 2
mail_owner = postfix
mailbox_command = /usr/local/bin/procmail
myhostname = alex.linux-france.org
myorigin = $myhostname
program_directory = /usr/local/libexec/postfix
queue_directory = /var/spool/postfix
relayhost = [smtp.mon.fai]
sender_canonical_maps = hash:/etc/postfix/canonical

echo@cnam.fr est une adresse de ce type, et nous l'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és au fournisseur d'accès bien connu mon.fai et que la machine s'occupant du courrier chez ce fournisseur s'appelle smtp.mon.fai, il faut modifier le fichier main.cf, rechercher les lignes contenant relayhost, en décommenter une et mettre :

relayhost = [smtp.mon.fai]

Le format indiqué ici suppose que nous utilisons SMTP (spécifié par la variable default_transport) pour transporter notre courrier. En réalité, le format de relayhost permet aussi d'indiquer une machine UUCP bien que le transport par défaut reste SMTP pour un intranet local, par exemple (voir les commentaires associés à cette variable dans main.cf pour connaître toutes les possibilités).

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.org
(Name service error for domain cnam.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 serons 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 expédier d'un seul coup lors de la connexion suivante.

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

Seul root a le droit de faire postfix flush, un utilisateur normal devra utiliser /usr/sbin/sendmail -q pour envoyer les messages.

Nous pouvons aussi aller directement inspecter le contenu des files d'attente de postfix : vous noterez alors que le numéro 9C26D779D0 apparaît en deux endroits :

* dans le répertoire **/var/spool/postfix/defer/9/C/** : si vous regardez le contenu de ce fichier, vous noterez qu'il contient simplement le message indiquant le problème de résolution de l'adresse de destination.
* dans le répertoire **/var/spool/postfix/deferred** : l'édition du contenu du fichier vous permettra de constater que toutes les informations y sont, mais formatées d'une façon peu lisible...

Gestion des adresses locales

La gestion des adresses locales s'effectue très simplement par postfix. Dans la plupart des cas, vous n'aurez rien à faire. Ce qui suit ne doit donc être fait que dans certains cas bien précis.

Supposons que votre machine reçoive des courriers à destination de gus@machin.uucp.fr (ce qui peut être le cas si vous utilisez également UUCP pour recevoir du courrier). Le problème consiste maintenant à faire comprendre à postfix que les messages à destination des adresses machin.uucp.fr doivent être considérées comme locales à votre machine, sinon il essaiera de les renvoyer…

Pour ce faire, on utilisera un autre fichier de configuration : transport un peu comme on l'a fait pour aliases. La syntaxe de ce fichier est très simple et décrite par sa page de manuel (man transport). Dans notre cas, voici quel serait son contenu :

alex.linux-france.org   local:
localhost               local:
machin.uucp.fr          local:

Toutes les adresses à destination de alex.linux-france.org, de machin.uucp.fr, ainsi, bien sûr, que les adresses locales seront alors considérées comme du courrier local à la machine.

Comme aliases, le fichier transport doit être traité pour produire un fichier au format db :

# postmap /usr/local/etc/postfix/transport

Il reste maintenant à indiquer à postfix qu'il doit utiliser cette table pour acheminer le courrier. Pour cela, on rajoute dans main.cf la ligne suivante :

transport_maps = hash:/usr/local/etc/postfix/transport

qui aura priorité sur le contenu de la variable $mydestination (c'est pour ça que le contenu de celle-ci doit apparaître dans le fichier décrivant les adresses locales).

La lecture de la page de manuel vous donnera toutes les autres informations nécessaires pour, par exemple, préciser pour une entrée donnée un type de transport particulier : si, par exemple, vous désirez utiliser UUCP pour expédier vos courriers à destination de truc.uucp.fr, il suffira d'ajouter l'entrée

truc.uucp.fr    uucp: