Depuis la version 8.8, sendmailreconnaît quatre nouveaux ensembles de règles2.1 afin d'effectuer des vérifications. Si un ensemble aboutit au mailer error, la vérification a échoué et le courrier est refusé. Si aucun ensemble n'aboutit au mailer error, toutes les vérifications ont réussi, le courrier est donc accepté.
Ces quatre ensembles sont :
check_relay
: cet ensemble est appelé lors de l'ouverture
de la session SMTP, afin de valider le nom et l'adresse IP du
client. Le paramètre est un couple « nom $|
adresse IP » (le séparateur est $|
). Si la partie
« nom » est encadrée par des crochets, il s'agit
de l'adresse IP car le nom n'a pas pu être trouvé.
Les vérifications typiques qui peuvent être effectuées dans cet ensemble sont la présence du nom dans le DNS (refus des adresses IP numériques), et la présence du client dans une liste noire.
Avec la version 8.8, le code d'erreur retourné est toujours
550 Access denied
,
quels que soient le message et le code spécifiés lors de l'appel du
mailer error. Depuis la version 8.9, ce n'est plus
le cas : le message et le code sont paramétrables.
check_mail
: cet ensemble est appelé lors de la
réception de l'adresse d'expéditeur (mot-clef MAIL
FROM dans l'échange SMTP).
Le paramètre est l'adresse (enveloppe) fournie par le
client. Il faut noter que les macros client_name
et
client_addr
sont définies avec le nom et l'adresse
IP du client.
Les vérifications typiques qui peuvent être effectuées dans cet ensemble sont la validité de l'adresse (adresse complète, adresse absente de la liste noire), ou la conformité de l'adresse par rapport au client SMTP (pour refuser une adresse d'émetteur locale lorsque le client est distant).
Le code et le message d'erreur sont spécifiés dans l'appel du mailer error.
check_rcpt
: cet ensemble est appelé à chaque fois
que le client spécifie une adresse de destinataire (mot-clef
RCPT TO dans l'échange SMTP).
Le paramètre est l'adresse (enveloppe) fournie par le
client. Il faut noter que les macros client_name
et
client_addr
sont définies avec le nom et l'adresse
IP du client.
Les vérifications typiques qui peuvent être effectuées dans cet ensemble sont la conformité de l'adresse par rapport au client SMTP (pour refuser les adresses de destinataire distantes lorsque le client est distant).
Le code et le message d'erreur sont spécifiés dans l'appel du mailer error.
check_compat
: cet ensemble est appelé lorsque
sendmaila collecté le courrier dans sa totalité
(c'est-à-dire après le point terminal de DATA dans l'échange
SMTP, ou lorsque le fichier a été totalement lu si
sendmailest appelé localement). Le paramètre est un
couple « émetteur $|
destinataire »
(le séparateur est $|
).
Du fait de l'appel tardif de cette règle, s'il y a erreur, celle-ci ne peut pas être signalée au client SMTP, mais le message sera quand même rejeté.
Les vérifications typiques qui peuvent être effectuées dans cet ensemble sont la cohérence des deux adresses, pour empêcher de servir de relais involontaire.
Le code d'erreur renvoyé a une grande importance : s'il est de la forme 5xy, l'erreur est définitive et le client doit retourner le message à l'émetteur ; s'il est de la forme 4xy, l'erreur est temporaire, et le client devra refaire une tentative ultérieure.
Quelle valeur choisir ? Chaque solution a ses avantages et ses inconvénients :
Le kit Jussieu permet d'employer les deux valeurs, suivant la fiabilité de la cause d'erreur (recherche dans le DNS ou non).