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

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 :)


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