Méthode de messagerie off-line pour Linux (Adresses e-mail off-line avec

un compte)

Gunther Voet, freaker@tuc.ml.org - Belgium (CompuMed/TuCSRV) Traduction par Thierry Le Quéau ThierryLeQueau@wanadoo.fr

v1.3.2, 7 Février 1998
Utilisez votre système de messagerie Linux hors connexion, recevez du courrier pour plusieurs utilisateurs avec seulement une adresse e-mail, et sans être connecté 24/24. Si vous n'avez pas les moyens de payer une ligne directe pour être connecté 24/24 et voulez quand même que vos utilisateurs recoivent leur courrier dans leur boîte à lettre Linux; au lieu de payer un service de diffusion multi-utilisateur à votre fournisseur d'accès, vous pouvez utiliser ce système pour redistribuer aux différents comptes utilisateur le courrier en utilisant une seule adresse e-mail. Vous pouvez y avoir accès 24/24 depuis le serveur où vous avez votre compte pour recevoir votre courrier. Ce howto est Copyright (c)1997-98 par Gunther Voet.

1. Préface.

Dans ce chapitre je veux juste me mettre à l'abri de tous dommages et de retour de flamme - même si je peux avoir tort ...Si vous avez des questions ou suggestions à rajouter aux FAQ ainsi que les erreurs que vous pourriez trouver, voir la section concernée plus loin ...

Nota : tous les noms et types de fichier sont repertoriés ainsi :

(*** < file > *** text ***) .procmailrc

Il s'agit donc d'un fichier .procmailrc contenant du texte. La variable texte peut aussi être codée. Cela pour définir le nom du fichier à utiliser. S'il n'y a pas de chemin, vous pouvez le choisir à votre convenance (dans la plupart des cas ces fichiers résident dans le répertoire de l'utilisateur comme /home/mailer).

1.1 D'un point de vue légal.

Ni l'auteur, ni les distributeurs de ce HowTo ne peuvent être tenu en aucun cas pour responsable des dommages physiques, financiers ou moraux qui pourraient résulter de l'application des suggestions ou exemples de ce texte. L' information contenue dans ce document est la quintescence de mon savoir et de mon expérience, mais je peux encore faire des erreurs dans les informations ou les exemples. Chaque marque commerciale est la propriété de son détenteur respectif (je ne veux pas faire de commerce ici - mais, bon - SI je veux rajouter quelque chose, je n'aurais pas besoin de modifier cette déclaration). Si votre chat meurt sous la charge de ce document, je n'en suis pas plus responsable ...

1.2 Copyrights

Ce document et son contenu sont copyright (c)1997-98 de Gunther Voet. Toute reproduction non autorisée sous toute forme que ce soit est explicitement autorisée et même chaudement encouragée tant que vous n'en changez pas le contenu sans contacter l'auteur (Gunther Voet). Si vous utilisez ce document en entier ou en partie, vous devez y inclure une allusion au copyright ou un lien vers le HowTo complet." Les droits de copie des documents Howto sont régits par leurs auteurs respectifs. Le "HowTo Copyright" donnera les directives de copie pour ce document. S'il est utilisé dans un but commercial, l'auteur doit en être averti. Les exceptions à ce copyright doivent être demandé à l'auteur par lettre ou par e-mail. Pour plus d'information sur le standard de diffusion des HowTo contacter gregh@sunsite.unc.edu.

*SVP* *SI* vous voulez créer un système basé sur ce HowTo, pensez à mon copyright :) heh... - je ne suis pas méchant :)). Bien sûr en tant qu'addon - PAS pour le programme de mail lui-même - bien que ce soit agréable d'y être inclus :))Je peux toujours avoir une adresse supplémentaire pour être encore plus critiqué :)) (je plaisante).

1.3 Réactions.

J'espère que ce HowTo vous sera utile ainsi qu'à tous ceux qui le voudront. Si vous avez des suggestions, commentaires ou corrections ( exceptés les injures :) ) - svp expédiez les moi à freaker@tuc.ml.org et j'en ferai la mise à jour pour la prochaîne version. Si vous publiez ce document dans un but commercial, une copie supplémentaire sera appréciée - vous pouvez me l'envoyer à mon adresse postale. Pour les critiques - vous pouvez me les expédier, mais elle finirons dans le répertoire /dev/null ... aussi - ce n'est pas la peine encombrer la bande passante avec ! En plus je peux empêcher certains utilisateurs de recevoir des e-mail (expliqué dans ce document) (evil grin). Mon surnom est "freaker btw" :) ). Vous pouvez toujours essayer freaker@ibm.net.

1.4 Distribution.

La dernière version de ce document peut être téléchargée à l'adresse:

http://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/Offline-Mailing

-et-

http://tuc.ml.org/om/

(essayez aussi à : http://tuc.ml.org)

1.5 Corrections.

 v1.0.0        - Première version, test interne, nous l'avons essayé avant de 
                 vous le donner :) ..  depuis il devient opérationnel et a 
                 besoin de travailler ? vrai ? :)
 v1.1.0        - Corrections de nombreuses erreurs dans le texte, ajout de 
                 nouveaux chapitres
               - Corrections de quelques petites erreurs et typographie ...
 v1.2.0        - Corrections d'erreurs grammaticales
               - Addon du chapitre "Qu'est-ce que nous utilisons ? "
               - Addon de l'adresse de Sunsite
 v1.3.0        - Addon du support courrier virtuel pour l'administrateur
               - Nouveau site et adresse e-mail
               - Remerciements à ..
 v1.3.1        - Conversion au format sgml et corrections d'erreurs mineures
 v1.3.2        - Corrections d'erreurs majeures ( nom de fichier .fetchmailrc  
                 vers .procmailrc) etc. (merci à Tetsu Isaji)
               - Addon douveau support pour "Sendmail" v 8.8.0+
               - Corrections d'erreurs mineures
               - Mise à jour de mon système YAY !
               - La version japonaise arrivera bientôt, je vous signalerais 
                  son emplacement dès que je le connaîtrai ... 
                  (merci à Tetsu Isaji)

1.6 Qu'est-ce que j'utilise ?

J'utilise Linux 2.0.30, un Pentium 166, carte ATI pci-mach64, Metro-X et une connexion internet par mon fournisseur d'accès (actuellement ibmnet) via ppp en utilisant un modem ZyXEL 28 800 bauds, et de temps en temps un Bausch 28 800.

Maintenant j'ai mis à jour mon noyau à la version 2.0.33, installé un modem USRobotics, il fonctionne encore comme il le devrais :) (tout le monde devrait mettre à jour leur version Linux dès qu'il sort un patch :) croyez moi:) ça vous épargnera beaucoup de temps et de recherche d'erreur en le faisant :).

1.7 Remerciements à ...

2. Preliminaires.

Bon, comment fonctionne ce système? Qu'est-ce que vous pouvez faire avec ? Quoi d'autres ? Et ai-je besoin de le lire ? A toutes ces questions - j'ai une réponse.

2.1 Préface & Description

Ce HowTo est dédié à tous les utilisateurs de mailing offline sous Linux... Vous êtes un groupe, ou une organisation, et vous voulez que tous vos membres aient une adresse e-mail, sans pour autant payer pour un accès direct 24/24 ou un compte pour chaque utilisateur.... Ou vous avez un réseau interne - avec un serveur camouflé et vous voulez que tous les utilisateurs aient une adresse e-mail, vous pouvez utiliser cette méthode pour le faire. Personnellement je l'utilise pour fournir aux utilisateurs et membres de mon groupe de démo un compte e-mail sans être 24/24 connecté, puisque c'est à but non lucratif - et nous n'avons pas beaucoup d'argent pour nous payer un ligne directe avec un accès e-mail permanent - et différentes adresses IP. Tous ont une adresse e-mail, même s'ils n'ont pas accès à internet. Le seul à avoir un accès internet peut recevoir leur courrier à leur adresse personnelle - via le système décrit ci-dessous. Vos utilisateurs peuvent expédier leur courrier comme ils ont l'habitude de le faire, et votre système gèrera les différentes boites aux lettres. La seule chose qui change pour les utilsateurs est l'ajout de leur adresse e-mail dans l a ligne du sujet ou de l'entête suivant la méthode choisie.

2.2 L'intérêt d'une telle chose ...

2.3 Les choses à connaître.

2.4 Il y a deux voies différentes...

  1. methode 'A' - que nous appellerons "(m(A))". Le système de courrier vérifie le destinataire du message d'après le "to:". C'est la meilleure méthode puisque c'est l'adresse e-mail réelle . Vous avez besoin d'un autre compte sur un serveur ET avez besoin'une entrée DNS (MX) (votre propre domaine en l'occurrence). Si l'administrateur système veux bien vous aider, alors il n'y aura aucun problème ! Il redirigera TOUS les messages envoyés au nom de votre domaine sur votre compte ! Cela lui prendra du temps pour le faire :) aussi soyez sympa avec lui :)) Merci à mon administrateur système (Fred) j'ai obtenu un nom de domaine et le service utilisateur pour mon groupe de démo. Il se peut qu'une entrée DNS vous coûte quelque chose,aussi vous aurez à voir si ça vous convient ou non.
  2. methode 'B' - que nous appellerons "(m(B))". Le programme va voir la ligne du sujet, et transfère le courrier vers l'utilisateur concerné. Si l'utilisateur n'est pas trouvé, il renverra un message. Cela demande un serveur POP avec un seul compte, et vous n'avez pas besoin de votre propre entrée DNS ou vous n'avez pas besoin d'être gentil avec votre administrateur système pour qu'il vous arrange votre adresse e-mail :). J'ai utilisé cette méthode la première fois pendant près d'un an... je sais que c'est un peu truander, mais je ne vous ai pas dit que vous deviez utiliser cette méthode, aussi ne me tirez pas dessus - alors que je suis juste en train de vous fournir des solutions pour vos problèmes de messagerie :) - vous pouvez utiliser la méthode A qui est elle réglo !

3. Vos besoins.

Bon, vous avez besoin (bien sûr) d'une bécane sous Linux, qui peut se connecter à internet - Ok ! (que je suis bon - que je suis bon ! :)) - vous avez probablement un modem, pas vrai ? Une ligne téléphonique - ou n'importe quel moyen de vous connecter à votre fournisseur d'accès. Vous avez besoin aussi de quelque software comme Fetchmail, Procmail, un compte supplémentaire, et votre compte e-mail ou d'une entrée DNS avec un compte e-mail.

3.1 Une machine sous Linux

Ca peut-être n'importe quelle bécane... même un 8086... - mais il est préférable - puisqu'il y aura quelques chargements à effectuer - de posséder au moins un 386 :) plus votre babasse ira vite, plus votre logiciel sera rapide (pas vrai ?) :).

3.2 Un compte supplémentaire sur votre machine sous Linux. 

Vous avez besoin de créer un compte supplémentaire sur votre système. J'utilise pour mon exemple « mailservice ». Cpeut être aussi bien "mailserver" ou "mailtousers" - bref un nom que vous reconnaitrez !

! Vous n'avez pas besoin d'être logué root !

Ce compte vous servira à attribuer tous les messages aux différents destinataires de votre système, ou les envoyer vers l'extérieur :)). Créez-le juste comme simple utilisateur. Vous aurez besoin de faire des tests sur ce compte, et l'administrateur du courrier peut l'utiliser pour le distribuer sans

être pour autant root - c'est bien plus sûr !

3.3 Fetchmail

J'utilise la version 1.9 avec le patch 9... je l'ai trouvé à l'adresse ftp://sunsite.unc.edu et j'utilise seulement ce programme de mail dans mon exemple - à vous de voir si vous en préférez un autre, vous êtes seul juge ! Pour ma part il me satisfait :). Si vous le voulez plus personnalisé vous devrez consulter le manuel de Fetchmail :). Il peut être installé comme root aussi bien que comme simple utilisateur... le mieux est de l'installer comme root :) puisque je suis sûr qu'il fonctionne bien :).

3.4 Procmail

J'utilise la version 3.10 - vous la trouverez aussi à ftp://sunsite.unc.edu, je pense que c'est le meilleur mda (mail delivery agent) sur le marché... Il gère merveilleusement et est bien mieux que l'agent par défaut puisqu'il délivre les messages utilisateur par utilisateur ! Pour l'installation je vous donne les mêmes conseils que pour Fetchmail.

3.5 Un compte e-mail.

Vous aurez toujours besoin d'un compte e-mail - à partir duquel vous pourrez retirer vos messages. Un serveur POP - qui vous permet de retirer votre courrier quand vous le souhaitez, et qui permet aux différents utilisateurs d'envoyer des e-mail 24/24. Ca peut être aussi bien un service de messagerie gratuit que payant - bien que votre compte e-mail soit suffisant. Avec la méthode B (adresse dans le corps du sujet) vous n'avez besoin de rien d'autre - par contre la méthode A (adresse dans le champ "to ") en demande un peu plus - suivez le guide !

Un enregistrement DNS (MX).

Requis pour faire fonctionner votre propre domaine de messagerie - il est indispensable puisque l'administrateur de votre fournisseur ne peut pas utiliser son domaine à l'usage exclusif de vos utilisateurs - il a d'autres clients qui ont besoin aussi d'être contactés et qui pourraient interférer avec vos utilisateurs. Et vos entêtes de messages doivent être filtrées sur ce domaine. Ce qui vous donne un domaine autonome pointant sur SON domaine. Par contre ça vous coûtera un peu plus cher, ou vous pouvez demander à votre administrateur système de rajouter une adresse impersonnelle pointant sur son serveur, cependant ça doit être un autre domaine que le sien !

Faire suivre le courrier de compte à compte :)

Bien, l'administrateur sytème a besoin de faire suivre tous les messages destinés à votre domaine sur votre compte... c'est une tâche relativement aisée pour lui s'il sait le faire :) ..sinon il devra lire le manuel du sendmail :) ( ou qmail ). Vous récupérez votre courrier sur votre compte et voilà ! Tous les messages seront redistribués sur votre propre domaine.

4. Bon, j'ai tout ce qu'il me faut, et maintenant ?

Vous avez créé votre compte supplémentaire, récupéré votre adresse e-mail et/ou l'entrée DNS pour rerouter sur votre compte... Procmail et Fetchmail sont installés, ok on peut balancer la sauce ! :) on y va !

  1. Vous devez créer un fichier .procmailrc qui contiendra les infos de routage vers vos utilisateurs.
  2. Vous avez besoin également de créer un fichier «nosuchuserfile» pour que l'expéditeur sache que son message n'as pas été délivré.
  3. Pour un boulot au top :) vous pouvez utiliser crontab pour vérifier le courrier. C'est le moyen le plus facile pour vérifier toutes les XX minutes si vous avez du courrier lorsque vous êtes connecté.

4.1 Création du fichier .fetchmailrc

Vous avez besoin de créer un fichier .fetchmailrc qui contiendra les informations de votre service (nom d'utilisateur, mot de passe, aussi bien que le mda (agent de distribution de courrier) pour attribuer les messages. Exemple:

(*** < file > *** text ***) .fetchmailrc

server my.mail.server.com
proto pop3
user myaccountthere
pass deepestsecrets
flush
mda /usr/bin/procmail

Ce fichier peut être utilisé pour gérer votre courrier. Testez-le en utilisant fetchmail (fetchmail -vv) et voyez si votre courrier est bien transféré ... Il devrait y avoir quelques erreurs puisque le fichier de contrôle procmail n'a pas encore été installé. Vous pouvez attendre de créer le fichier .procmailrc avant d'effectuer le test mais je vous préviens SI il y a erreur :) ça PEUT provenir de ce fichier :). Ce fichier doit être accessible au propriétaire du compte (dans mon exemple : mailservice) et doit être lisible par l'utilisateur mais PAS lisible par le groupe/extérieur puisqu'il contient le mot de passe principal :) (vous devrez changer les droits du fichier .fetchmailrc en 600)

4.2 Création du fichier .procmailrc

Ce fichier de contrôle distribuera le courrier vers son destinataire. Il y a deux manières de le faire comme nous l'avons vu précédemment : par le destinataire (to: ) et par le corps du sujet (moins réglo). Ce fichier contiendra les différents destinataires des messages. Tous les commentaires précédés d'un # ne sont pas obligatoires - ils sont là uniquement pour vous permettre de suivre ma démarche... Vous pouvez aussi changer les droits de ce fichier en 600 - le reste du monde et le groupe nont pas besoin de connaître ces adresses privées :)... L'utilisateur doit aussi en être le propriétaire (comme mailservice) :). Le fichier "nosuchuserfile" renvoie un e-mail à l'expéditeur si le destinataire n'est pas trouvé dans le fichier procmail (le courrier n'est pas distribué) - aussi l'expéditeur sait que son adresse n'est pas valide.

Pour la distribution par le destinataire (m(A)):

(*** < file > *** text ***) .procmailrc

# Cette ligne sert uniquement au débogage ! Il peut-être enlever dans un but 
# de confidentialité puisque vous aurez accès à toute la messagerie transitant
# par votre domaine... Tous les messages seront copiés dans le fichier 
# "passtrough" avant d'être distribués aux destinataires... ici vous pouvez 
# voir ce qui ne va pas ...
:0 c
        passtrough

# l'e-mail avec l'entête "to: freaker@mydom.com" me sera directement dirigé, 
# les autres continuerons leur chemin...
:0 
* ^To:.*freaker@mydom.com
! freaker

# l'e-mail pour root@mydom.com sera dirigé vers le root... et vers 
# l'administrateur du courrier !
:0 
* ^To:.*root@mydom.com
! root

:0 
* ^To:.*postmaster@mydom.com
! postmaster


# l'e-mail pour barbara@mydom.com sera distribué à barbara ET sera retransmis 
# vers son adresse privée !

:0 c
* ^To:.*barbara@mydom.com
! barbara@her.private.one

:0 
* ^To:.*barbara@mydom.com
! barbara

# Ce script renvoie un e-mail vers l'expéditeur s'il n'a pas trouvé le 
# destinataire dans son fichier... il enverra le fichier "nosuchuser" dans le 
# corps du message comme réponse... attention ! vous avez absolument besoin 
# d'un tel fichier ! - le mien signale : " La personne que vous essayez de 
# joindre n'est pas abonnée à ce serveur, essayez à nouveau svp, il se pourrait
# qu'elle ne soit plus présente".
:0
  |(/usr/bin/formail -r -k \
     -A"X-loop: mailservice@mydomain.dom "| \
       /usr/bin/gawk '{print }\
       /^/ && !HEADER \
         { system("/bin/cat nosuchuser"); \
         print"--" ;\
         HEADER=1 }' ) |\
         /usr/bin/sendmail -t


exit

Pour la distribution avec comme "sujet: touser" (m(B))

(*** < file > *** text ***) .procmailrc

# Cette ligne sert uniquement au deboggage ! Il peut-être enlever dans un but 
# de confidentialité puisque vous aurez accès à toute la messagerie transitant
# par votre domaine... Tous les messages seront copiés dans le fichier 
# "passtrough" avant d'être distribués aux destinataires... ici vous pouvez 
# voir ce qui ne va pas...
:0 c
        passtrough

# l'e-mail avec l'entête "to: freaker@mydom.com" me sera directement dirigé, 
# les autres continuerons leur chemin... si vous avez un compte dédié pour 
# recevoir votre "mailservice" vous n'avez pas besoin de cette ligne :)
:0 
* ^To:.*freaker@ibm.net
! freaker

#  l'e-mail avec l'entête root@mydom.com sera dirigé vers le root !
:0
* ^Subject:.root
! root

# l'e-mail avec l'entête barbara@mydom.com sera distribué à barbara...
:0
* ^Subject:.barbara
! barbara

# l'e-mail avec l'entête peul sera transmis vers son adresse privée.
:0
* ^Subject:.paul
! paul@his.personal.emailaddress

# Tout e-mail avec l'entête john sera transmis à son compte et une copie vers 
# son adresse e-mail privée...
:0 c
* ^Subject:.john
! john@his.personal.emailaddress

:0 
* ^Subject:.john
! john

# Tous e-mail d'ibm, avec les infos de mise à jour, seront envoyés à freaker, 
# comme il est le seul à vouloir administrer le service d'e-mail et que ibm ne
# veut pas recevoir les retours de courrier non attribué !!
# si votre fournisseur vous expédie des "newsletters" etc... cette ligne est 
# obligatoire.
:0
* ^From:.*newsletter@ibm.net
! freaker

# Tous les messages que le démon veut rejeter, ou dans mon cas, les sauve dans
# un fichier... (utiliser  /dev/null pour les envoyer au fin fond des abysses).
:0
* ^FROM_DAEMON
throwaway

# Ce script renvoie un e-mail vers l'expéditeur s'il n'a pas trouvé de 
# destinataire dans son fichier... il enverra le fichier "nosuchuser" dans le 
# corps du message comme réponse... attention ! vous avez absolument besoin 
# d'un tel fichier ! - le mien signale: "L'utilisateur n'est pas reconnu dans 
# la ligne objet svp utilisez "Subject: nom de l'utilisateur" pour écrire à la
# personne concernée, par exemple "Subject: freaker" enverra un e-mail à 
# freaker". Ce fichier peut être long, mais aussi court :)... l'adresse de 
# votre domaine "mailservice@mydomain.com" évitera de confondre vos 
# utilisateurs avec ceux de votre fournisseur d'accès - il a besoin de 
# connaître votre adresse exacte!
# Sinon vous pouvez créer une boucle sans fin qui envoie un e-mail du style 
# "Ne dépensez pas 500$ chez votre ..." 
:0
  |(/usr/bin/formail -r -k \
     -A"X-loop: mailservice@mydomain.dom "| \
       /usr/bin/gawk '{print }\
       /^/ && !HEADER \
         { system("/bin/cat nosuchuser"); \
         print"--" ;\
         HEADER=1 }' ) |\
         /usr/bin/sendmail -t

exit

4.3 Il n'y a pas d'abonné ... (fichier nosuchuser)

(*** < file > *** text ***) nosuchuser


La personne que vous désirez contacter n'est pas abonnée à cette adresse.

S'il vous plaît, utilisez la ligne réservée au sujet pour y écrire le nom de 
votre correspondant - exemple: "subject: freaker" enverra un mail à freaker à 
cette adresse"

4.4 Fichier "crontab".

Si vous ne savez pas comment crontab fonctionne :) il vaut mieux que vous lisiez le manuel :)... Vous avez besoin de créer un fichier pour contrôle le courrier "checkmail" - celui-ci vérifiera si la connection est valide, de la même manière que cron... - j'utilise le protocole ppp :) - aussi l'exemple suivant vérifiera la connection - ainsi que la messagerie toutes les 10 minutes en utilisant cron. Ca paraît un peu louche - mais ça ne l'est pas !

Vérification du courrier

Le fichier "checkformail" sera appelé (il doit être exécutable pour celà) - et il vérifiera la connection. Si elle est valide alors il ira récupérer le courrier. Crontab utilisera ce fichier quand vous utilisez l'entrée cron suivante ...

(*** < file > *** code ***) .checkformail

#!/bin/sh
#

        cd /home/mailservice

        if [ -f /var/run/ppp0.pid ]; then
        /usr/local/bin/fetchmail -s > /dev/null 2>&1
fi

crontab

Cette entrée cron doit être chargée dans crontab, elle appellera le fichier .checkformail toutes les 10 minutes. Elle n'a aucune action sur le courrier ni sur la console - puisque le tout va directement dans le répertoire /dev/null.

(*** < file > *** text ***) cronentry

0,10,20,30,40,50 * * * *  /home/mailservice/.checkformail 1> /dev/null 2> 
/dev/null

4.5 Chez votre fournisseur d'accès.

Ce qui suit doit être fait si vous utilisez la méthode A... chez l'administrateur, l'e-mail va directement du domaine vers l'utilisateur. C'est assez simple, et une fois que c'est installé ça roule d'enfer ! Ce n'est pas nécessaire ni chez vous ni chez votre administrateur système si celui-ci utilise une autre méthode.

Si vous utilisez une nouvelle version de sendmail, l'ancienne version ne fonctionnera sans doute pas, aussi référez vous au manuel d'utilisation pour que le routage d'e-mail ait lieu.

(Ancienne version de sendmail) ajoutez les lignes suivantes au fichiersendmail.cf

Ajoutez les lignes suivantes au fichier /etc/sendmail.cf, ainsi le fichier du domaine sera lu. SVP il est à noter que la règle 98 est ajoutée ci-dessous, ceci pour récupérer les erreurs :) c'est l'enfer pour les enlever ! (et je sait de quoi je parle :) DuH).

(*** < file > *** add ***) /etc/sendmail.cf

# Base de données du domaine maintenu

Kmaildomains btree /etc/maildomains.db

# ajoutez ces lignes "dans" la règle 98 ! (sous la règle 98)

R$+ < @ $+  . >              $: $1 < @ $2 > .
R$+ < @ $+ > $*              $: $(maildomains $1@$2 $: $1 < @ $2 > $3 $)
R$+ < @ $+ > $*              $: $(maildomains $2 $: $1 < # $2 > $3 $)
R$+ < @ $* > .               $: $1 < @ $2 . >

(Nouvelle version de sendmail) Ajoutez ces lignes au fichier sendmail.cf

Avec la nouvelle version de sendmail (testé avec la version 8.8.7 et 8.8.8), ignorez la méthode A, et ajoutez les lignes suivantes :

(*** < file > *** add ***) /etc/sendmail.cf

# Base de données du domaine maintenu

Fw/etc/sendmail.cw
Kvirtuser btree /etc/maildomains.db

*OR*

Fw/yourhomedir/sendmail.cw
Kvirtuser btree /yourhomedir/maildomains.db

(Nouvelle version de sendmail) Editez le fichier /etc/sendmail.cw

Editez le fichier /etc/sendmail.cw (ou /votrerépertoire/sendmail.cw si vous n'utilisez pas le même emplacement). Un point positif à l'utilisation de votre répertoire: vous n'avez pas besoin d'être loguer root pour activer votre domaine. Bien que vous pouvez avoir des risques de sécurité si vous n'êtes pas rigoureux !

Ce fichier peut déjà exister, ou a besoin d'être créé. S'il existe déjà soyez sûr de ne pas écraser les anciennes données - ou je vous rappelerai ma déclaration :)

En premier lieu créez un fichier /etc/sendmail.cw, qui sera utilisé entre le domaine et l'utilisateur... (comme je vous l'ai déjà dit, le nom "mailservice" est à votre convenance - ça peut même être votre login (le mien est freaker)). Exemple :

(*** < file > *** text ***) /etc/sendmail.cw

mydomain.dom            mailservice

Créez un fichier /etc/maildomains file

En premier lieu créez un fichier /etc/maildomains, qui sera utilisé entre le domaine et l'utilisateur... (comme je vous l'ai déjà dit, le nom "mailservice" est à votre convenance - ça peut même être votre login (le mien est freaker)). (Vous pouvez avoir ce fichier dans votre répertoire, changez le chemin :). Exemple :

Avec l'ancienne version de sendmail:

(*** < file > *** text ***) /etc/maildomains

mydomain.dom            mailservice

Avec la nouvelle version de sendmail:

(*** < file > *** text ***) /etc/maildomains

@mydomain.dom           mailservice

Au travail !

Avec l'ancienne et la nouvelle version de sendmail vous avez besoin de créer les fichiers btree (base de données), suivez le guide :

cd /etc    (or /yourhomedir)
makemap btree maildomains < maildomains

après celà, tuez le démon sendmail et redémarrez le. Maintenant ça devrait marcher ! Bonne chance :)

5. Automatisation

OK, tout ce que nous avons vu fonctionne... (sinon ne pensez même pas à l'automatisation, il faut d'abord que tout soit ok) maintenant il nous faut un script pour que l'administrateur ou le root ne se prenne pas la tête pour ajouter un utilisateur à votre fichier procmail... L'exemple suivant s'adresse à des utilisateurs plus expérimentés - parce que certaines choses ont besoin d'être changées. J'ai décidé d'utiliser la M(B) parce qu'elle est plus utilisée que la M(A) (moins chère). Mon exemple peut très bien être adapté à la M(A).

5.1 La structure.

Puisque le fichier de post-routine termine le programme (tout ce qui va suivre ne fonctionnera pas sans lui) nous avons besoin d'un fichier de pre-routine.

Le fichier de pre-routine ".procmailrc-header"

Ce fichier servira à la fois au fichier de pre-routine et au fichier principal puisqu'ici seront rajoutés ou supprimés les différents utilisateurs. C'est un fichier très important, une copie de sauvegarde sera la meilleure chose à faire avant l'ajout d'un utilisateur, il PEUT y avoir des problèmes ... une machine n'est pas infaillible.

(*** < file > *** text ***) .procmailrc-header

:0 c
        passtrough

:0 
* ^To:.*freaker@ibm.net
! freaker

:0
* ^Subject:.root
! root

:0
* ^Subject:.barbara
! barbara

:0
* ^Subject:.paul
! paul@his.personal.emailaddress

:0 c
* ^Subject:.john
! john@his.personal.emailaddress

:0 
* ^Subject:.john
! john

:0
* ^From:.*newsletter@ibm.net
! freaker

:0
* ^FROM_DAEMON
throwaway

Le fichier de post-routine ".procmailrc-footer"

Comme mentionné ci-dessus, ce fichier doit être la post-routine puisqu'il ne sera pas utilisé pour délivrer les données - ce fichier contient le code de "rejet" pour retourner le message à l'expéditeur s'il ne trouve pas de correspondant ! C'est vraiment la fin de la boucle !

(*** < file > *** text ***) .procmailrc-footer


:0
  |(/usr/bin/formail -r -k \
     -A"X-loop: mailservice@mydomain.dom "| \
       /usr/bin/gawk '{print }\
       /^/ && !HEADER \
         { system("/bin/cat nosuchuser"); \
         print"--" ;\
         HEADER=1 }' ) |\
         /usr/bin/sendmail -t


exit

5.2 Script d'ajout de boîte à lettre

Ce script ajoutera un utilisateur au fichier de pre-routine, et mettra à jour le ".procmailrc" d'après le ".procmailrc-header" pour clôturer le tout. Les commentaires (précédés de #) ne sont là que pour vous aider :) vous pouvez les supprimer.

(*** < file > *** code ***) addmail (* chmod 500 *)

#/bin/sh
#
# Copyright (c)1997 par Gunther Voet. rev 1.0.1
# SVP merci de laisser ce copyright si vous fournissez une machine avec ce 
# programme préinstallé ...


echo ""
echo "Addmail v1.0.1 by Gunther Voet, Freaker / TuC'97-98 (21/04/97)"
echo ""

if [ $1 ]; then

        if [ $2 ]; then

# Faites une sauvegarde!
        
        cp /home/mailserv/.procmailrc-header /home/mailserv/.procmailrc-backup
        
# Ajoutez l'information (>>) au fichier .procmailrc-header       

        echo ":0" >> /home/mailserv/.procmailrc-header
        echo "* ^Subject:.$1" >> /home/mailserv/.procmailrc-header
        echo "! $2" >> /home/mailserv/.procmailrc-header
        echo "" >> /home/mailserv/.procmailrc-header

# Mettez à jour le fichier .procmailrc à partir des fichiers .procmailrc-header
#  et .procmailrc-footer


        cat /home/mailserv/.procmailrc-header > /home/mailserv/.procmailrc
        cat /home/mailserv/.procmailrc-footer >> /home/mailserv/.procmailrc

# Soyez sûr que le fichier .procmailrc n'appartient qu'à l'administrateur 
# "mailserv" et que ce dernier a l'exclusivité de l'écriture/lecture...

        chown mailserv /home/mailserv/.procmailrc
        chgrp users /home/mailserv/.procmailrc
        chmod 600 /home/mailserv/.procmailrc
else
        echo "No DESTINATION mail address has been given ..."
fi

else
        echo "usage:"
        echo ""
        echo "syntax:  addmail from_user to_user(domain)"
        echo ""
        echo "example: addmail freaker freaker@myemail.dom"
        echo ""
fi

Ok, ce script va donc ajouter les informations de l'utilisateur ainsi que son adresse dans le fichier .procmailrc-header, et mettra à jour le fichier .procmailrc à partir des deux autres fichiers (header et footer). Si vous voulez supprimer un utilisateur, vous n'avez juste qu'à éditer le fichier ".procmailrc-header" pour le modifier, ainsi la prochaine fois que vous ajouterez quelqu'un, l'utilisateur précédent sera supprimé du fichier .procmailrc. Pour effectuer une suppresion immédiate, il vous faut le supprimer à la fois dans le fichier .procmailrc et .procmailrc-header.

Je vous crois assez compétent pour modifier le script pour que l'ajout d'un utilisateur à votre compte se fasse automatiquement et ce pour les deux méthodes.

6. A l'aide ! (Sic)

Bon, vous avez besoin d'un peu d'aide, non :) je pourrais être sarcastique et seulement vous dire: "vous feriez mieux de tout réinstaller, parce que vu d'ici c'est un peu le bordel"... ou je peux vous aider ... - j'ai décris ici quelques problèmes courants. Si vous avez des problèmes qui ne sont pas répertoriés ici, faites m'en part par e-mail et je rajouterais tout ça à ce HowTo avec en sus votre nom et adresse e-mail - AVANT de m'écrire svp, vérifiez que vous n'oubliez rien et si vous voulez que je vous aide expédiez moi le plus d'info possible incluant le script et la description de ce que vous voulez. Je n'ai PAS besoin des binaires, je ne veux pas le faire tourner.

6.1 Le script d'automatisation ne fonctionne pas:

6.2 Qu'est-ce que vous entendez par serveur de mail anonyme ?

6.3 Mon chat est mort

6.4 Mon chien est mort

6.5 Linux?

6.6 Pouvez vous m'aider à trouver un compte ?

6.7 Pourquoi avoir enlevé " peut-être que plus tard je rajouterais quelques commentaires ..." ?

6.8 Comment puis-je obtenir un "domaine" ?

6.9 Pourquoi êtes-vous un enc... en utilisant cette méthode ?

6.10 Le fichier "nosuchuserfile" ?

6.11 Est-ce que mes utilisateurs peuvent écrire et envoyer du courrier ?

6.12 Est-ce que chaque utilisateur a besoin d'un compte shell sur mon serveur ?

6.13 sans objet

6.14 l'ajout de courrier ?

6.15 Pourquoi êtes-vous si cruel ?

6.16 Avez vous eu des plaintes à propos de langage excessif ?

6.17 Pourquoi ce HowTo est-il si différent des autres ?

6.18 Localement mon domaine fonctionne, mais semble rien recevoir de l'extérieur.

6.19 Mon chien est mort

7. The End

Il faut une fin à tout... si vous trouvez des bugs non repertoriés (ou des particularités), alors laissez de côté vos critiques... envoyez moi vos commentaires et suggestions :) Si vous êtes encore en colère après avoir lu celà, svp allez voir à http://tuc.ml.org/hehehe.

Mes remerciements à:

Hannes van de Vel: pour m'avoir supporté (hum) Tetsu Isaji: pour la version japonaise ainsi que pour m'avoir signalé quelques erreurs :) Greg Hankins: pour m'avoir fait remarquer les erreurs de la version sgml. Linus torvalds: bien sûr, sans qui ce HowTo n'existerait pas !