SuSE GmbH

Base de données Support de SuSE

Titre: sendmail: Offline-SMTP - Transmettre du courrier au fournisseur d'accès

----------

Vue d'ensemble o Recherche de mots-clés o Historique o Versions o Catégories o Tous les articles
Deutsch o English

----------

sendmail: Offline-SMTP - Transmettre du courrier au fournisseur d'accès

SuSE Linux: Version à partir de 5.0

Question:

Comment peut-on transmettre le courrier au serveur de messagerie du fournisseur d'accès à l'aide de Sendmail et du protocole SMTP?

Remarques préliminaires:

Nouveau: Répertoire /etc/mail/

Depuis SuSE 5.1, tous les fichiers supplémentaires spécifiques au courrier électronique ont été déplacés, pour plus de clarté, du répertoire/etc/ vers /etc/mail/.
Le fichier /etc/aliases et le fichier de configuration proprement dit de Sendmail /etc/sendmail.cf ne sont pas ici concernés car ils doivent être déterminés avec une option de compilation ou sont lus directement par d'autres programmes qui risqueraient de ne pas les retrouver.
Je vais tenter tout au long de cet article de mettre en évidence les points essentiels. Vous devriez aussi absolument lire le guide succinct concernant Sendmail sous /etc/mail.

S'il s'agit uniquement de mettre en place une file d'attente et s'il n'est pas nécessaire de recourir aux services de la userdb, il suffit à partir de SuSE 5.1, de positionner les variables suivantes dans le fichier /etc/rc.config et d'invoquer ensuite SuSEconfig:

SMTP="yes"
SENDMAIL_TYPE="yes"
SENDMAIL_SMARTHOST="mail.provider.de"
SENDMAIL_LOCALHOST="localhost"
SENDMAIL_RELAY=""
SENDMAIL_ARGS="-bd -om"
SENDMAIL_EXPENSIVE="yes"
SENDMAIL_NOCANONIFY="yes"

Si en plus de cela il s'avère nécessaire d'utiliser la userdb, il est possible d'apporter une extension appropriée au script de configuration de sendmail /sbin/conf.d/SuSEconfig.sendmail. Il convient toutefois d'agir avec prudence! Certains caractères doivent être masqués!

Depuis la version 8.9.x qui est incluse dans SuSE Linux 6.1, Sendmail ne permet plus le relayage - cette fonction doit être explicitement configurée. Pour cela, ajoutez toutes vos adresses Email, noms d'hôtes et domaines dans /etc/mail/access, par exemple sous cette forme:

jules.tartempion@provider.fr	OK
ou dans le fichier /etc/mail/relay-domains. Voir aussi à ce sujet la documentation Sendmail, particulièrement dans le fichier /usr/share/sendmail/README.

En outre, Sendmail interroge le serveur de noms de domaines à chaque envoi de courrier établissant ainsi une connexion. Utilisez la configuration mentionnée plus haut à l'aide des variables SENDMAIL_* de /etc/rc.config, ajoutez dans le fichier les lignes marquées d'une croix +:

   FEATURE(\`always_add_domain')dnl
 + FEATURE(\`accept_unresolvable_domains')dnl
 + FEATURE(\`accept_unqualified_senders')dnl
   FEATURE(\`local_procmail')dnl
Ceci incite Sendmail à ignorer l'expéditeur du message et ne devrait pas être utilisé pour des machines connectées en permanance!
 

Solution:

Les préliminaires consistent à éditer le script de démarrage de Sendmail /sbin/init.d/sendmail et à supprimer, s'il est présent, le paramètre "-q30m" car la file d'attente serait alors vidée automatiquement toutes les 30 minutes.

à partir de SuSE 5.1 il existe une variable SENDMAIL_ARGS dans le fichier /etc/rc.config où les paramètres de démarrage de Sendmail peuvent être positionnés. Il convient également d'en tenir compte, sinon (au cas où la la variable est absente ou vide) les paramètres par défaut du fichier /sbin/init.d/sendmail entreront en jeu.


I.) Macro m4

On crée tout d'abord une macro m4 qui représente un modèle pour le fichier de configuration proprement dit de Sendmail.

Depuis SuSE 5.1, vous disposez d'un modèle de macro m4 sous /etc/mail/linux.mc qui vous permet de réaliser une copie du fichier (par exemple /etc/mail/linux.smtp-off.mc) et de la modifier de la manière mentionnée plus bas. Pour cela, vous devriez ajouter la ligne avec l'instruction include au début du fichier.
Vous avez aussi l'alternative d'adapter directement le script de configuration /sbin/conf.d/SuSEconfig.sendmail de telle manière qu'il puisse s'intégrer automatiquement dans la nouvelle procédure de configuration adoptée dans la version 5.1.

Jusqu'à la version SuSE Linux 5.0, créez un fichier de /etc/sendmail.config/cf/linux.smtp-off.mc avec le contenu suivant:

include(`../m4/cf.m4')
VERSIONID(`linux for smtp-only(offline) setup')dnl
OSTYPE(linux)dnl
define(`confDEF_USER_ID', `daemon:daemon')dnl
define(`confTRUSTED_USERS', `uucp mdom wwwrun')dnl
define(`QUEUE_DIR', `/var/mqueue')dnl
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
define(`confSERVICE_SWITCH_FILE',`/etc/service.switch')dnl
define(`confUSERDB_SPEC',`/etc/userdb.db')dnl
define(`confHOSTS_FILE',`/etc/hosts')dnl
define(`confSAFE_QUEUE',`True')dnl
define(`confCON_EXPENSIVE',`True')dnl
define(`SMTP_MAILER_FLAGS',`e')dnl
FEATURE(local_procmail)dnl
FEATURE(nocanonify)dnl
FEATURE(nouucp)dnl
FEATURE(nodns)dnl
FEATURE(always_add_domain)dnl
FEATURE(masquerade_envelope)dnl
MAILER(local)dnl
MAILER(procmail)dnl
MAILER(smtp)dnl
    
Vous pourrez trouver la signification des différents mots-clés dans la documentation. Il n'en sera défini ici que quelques-uns:

II.) Modèle de configuration

Avec l'aide de la macro, on génère ici un modèle de configuration ou bien on le convertit vers un format compréhensible pour Sendmail.

Comme jusqu'à la version SuSE 5.0 le modèle SMTP du paquetage Sendmail serait écrasé par celui du CD-ROM, il est judicieux de le sauvegarder auparavant:

mv /etc/sendmail.smtp.cf /etc/sendmail.smtp.cf.SuSE
    
et de créer ensuite un nouveau modèle:
cd /etc/sendmail.config/cf
m4 < linux.smtp-off.mc > /etc/sendmail.smtp.cf
    
À partir de SuSE 5.1 il est possible de créer directement un modèle (utilisé seulement comme "fallback").
La commande est la suivante:
cd /etc/mail/
m4 < linux.smtp-off.mc > /etc/sendmail.smtp.cf
    
Il est en outre nécessaire de désactiver le nouveau mode de configuration afin que le modèle soit pris en compte - on utilise donc le "mode compatibilité". Ceci se fait par le déplacement du script /sbin/conf.d/SuSEconfig.sendmail.
de préférence vers /etc/mail/ afin qu'il soit possible de le retrouver plus tard...:
mv /sbin/conf.d/SuSEconfig.sendmail /etc/mail/
    

III.) Service Switch

On crée tout d'abord le fichier /etc/service.switch (ou /etc/mail/service.switch) avec le contenu suivant (voir aussi l'article sendmail avec SMTP mais sans DNS):

hosts   files
aliases files
    
Utilisez des tabulations pour la séparation.

III.) Userdb - Conversion des adresses Email

La phase suivante consiste à créer la base de données servant à associer les adresses Email aux noms d'utilisateurs locaux et vice versa. Pour chaque utilisateur, il est défini deux lignes dans le fichier texte /etc/userdb/etc/mail/userdb) avec la syntaxe suivante:

Nom de login:nom de mail Adresse Email
Adresse Email:maildrop Nom de login
Exemple:
jules:mailname jules.tartempion@provider.fr
jules.tartempion@provider.fr:maildrop jules
    
On effectue de nouveau une conversion vers un format compréhensible par Sendmail.
Jusqu'à SuSE 5.0:
makemap btree /etc/userdb.db < /etc/userdb
et de façon analogue, à partir de SuSE 5.1:
makemap btree /etc/mail/userdb.db < /etc/mail/userdb

IV.) YaST et le fichier /etc/rc.config

Lancez YaST et sélectionnez le menu:
Administration du système ->
        Modifier le fichier de configuration
    
C'est dans les variables suivantes qu'est déterminé le comportement de Sendmail qui intéresse cet article. J'insère ici directement les valeurs adéquates - vous pouvez voir la définition et les valeurs possibles dans YaST ou sous forme de commentaires dans /etc/rc.config: Les caractères ici spécifiés = et " ne sont évidemment pas spécifiés dans YaST.

Après modification du fichier /etc/rc.config, le script de configuration SuSEconfig devra toujours être exécuté sinon les nouvelles configurations ne seront pas prises en compte - YaST le fait automatiquement.

V.) Nouveau démarrage et tests

Nous avons vu en principe tout ce qui concerne la configuration elle-même.
Maintenant, sendmail doit être redémarré:
/sbin/init.d/sendmail stop
/sbin/init.d/sendmail start
    

D'abord un petit essai avec Sendmail - bien sûr en tant qu'utilisateur de la Userdb, donc jules:

/usr/sbin/sendmail -bv jules.tartempion@provider.fr
    
La sortie devrait avoir cet aspect:
jules.tartempion@provider.fr... deliverable: mailer relay,
host mail.provider.fr,user jules.tartempion@provider.fr
    
Si l'on spécifie encore le paramètre -d, on peut voir sendmail se frayer un chemin au travers de la configuration. Il est intéressant de savoir s'il va aussi faire un tour dans la Userdb. Il est facile de le suivre avec grep:
/usr/sbin/sendmail -bv -d jules.tartempion@provider.fr | grep udbmatch
    
Il apparaît ce qui suit:
udbmatch(jules, mailname)
udbmatch ==> jules.tartempion@provider.fr
    
Si cela ne marche pas, il y a une erreur : go to point I. ;-)

On peut maintenant faire un lancement d'essai. Dans un premier temps, seul le petit programme mail ou mailx devrait être utilisé.
Nous envoyons ici un fichier qui n'a rien de compromettant ou, dans ce cas particulier, une simple sortie redirigée de uname -a.

On redémarre comme utilisateur dont le nom de login a été spécifié dans la Userdb. Nous nous envoyons ici un message à nous-mêmes:

uname -a | mailx -s "TEST Nr.1" jules.tartempion@provider.fr
    

Cette commande crée dans le répertoire de Sendmail /var/mqueue (ou à l'avenir /var/spool/mqueue) deux fichiers.
Le fichier qui commence par df contient le corps du message qui est donc notre sortie de uname -a.
L'autre fichier qui commence par qf contient par contre la partie cruciale - les informations d'en-tête. Les lignes suivantes sont essentielles:

$_jules@localhost
Sjules
RPFD:jules.tartempion@provider.fr
H?P?Return-Path: <jules.tartempion@provider.fr>
H?F?From: "Jules T." <jules.tartempion@provider.fr>
HTo: jules.tartempion@provider.fr
    
Si tout est exact, on peut prendre le risque d'envoyer pour de bon un message ou même plusieurs (le cas échéant après avoir établi une connexion):
sendmail -q
    
Dans les fichiers log /var/log/mail ou /var/log/messages, on peut maintenant trouver des messages d'état faisant connaître le résultat de l'envoi. On peut obtenir le message avec le programme Fetchmail.

Particularités

Il convient de noter que ce simple programme mail se prête assez mal à l'expédition s'il est utilisé en relation avec la Userdb car au moment où la file d'attente est vidée, l'en-tête du message est apparemment reconverti et comme chemin de retour (return path) il est enregistré les noms de login et d'hôte locaux.

Il vaudrait donc mieux utiliser un programme de messagerie plus intelligent comme par exemple xfmail, pine, tkmail ou même le nouveau programme tkrat. Ces programmes sont en mesure de transmettre à sendmail les données correctes et ce problème n'apparaît pas.

Lorsque l'on utilise certains programmes de messagerie spéciaux, par exemple pine, il faut faire savoir aux programmes qu'ils ne doivent pas remplir eux-même les en-têtes des messages (la ligne From).
Le plus simple est d'enregistrer localhost comme hôte SMTP.
Avec pine 4.x, on peut positionner allow-changing-from et adapter customized-hdrs par exemple à:

      From: prénom.nom@provider.fr
pour spécifier l'adresse Email à utiliser.

Il est également possible, comme alternative, de définir les utilisateurs spécifiés dans la Userdb comme utilisateurs de confiance.
Ceci peut se faire soit dans la macro m4 avec confTRUSTED_USERS, soit dans le fichier /etc/sendmail.smtp.cf:

#####################
#   Trusted users   #
#####################

# this is equivalent to setting class "t"
#Ft/etc/sendmail.ct
Troot
Tdaemon
Tuucp mdom wwwrun
Tjules
    
Il n'est guère efficace de modifier soi-même le fichier de configuration Sendmail /etc/sendmail.cf car il est recréé à chaque exécution de YaST ou de SuSEconfig ce qui provoque la perte de toutes les modifications.
Dans le cas où quelqu'un voudrait changer quoi que ce soit directement à la main, il lui est conseillé d'utiliser pour cela le modèle /etc/sendmail.smtp.cf avec SMTP ou, de façon analogue, /etc/sendmail.uucp.cf avec UUCP.

Encore une remarque:

Utilisez toujours des tabulations au lieu d'espaces (par exemple pour /etc/service.switch) afin de séparer les colonnes.

Même lorsque ce n'est pas vraiment nécessaire! Dans les cas où elles sont impératives, on recherche très très longtemps l'erreur :-)

----------

Mots-clés: MAIL, SENDMAIL, SMTP, OFFLINE

----------

Catégories: Linux , Messagerie

----------

Vue d'ensemble o Recherche de mots-clés o Historique o Versions o Catégories o Tous les articles
Deutsch o English

----------

SDB-smt_sendmail, Copyright SuSE GmbH, Nuremberg, Germany - Version: 01. Feb 1998
SuSE GmbH - Dernière modification: 07. Jan 2000 01:09:12 by lermen with sdb_gen 1.00.0