L'alternative : Linux

Partage d'une boîte aux lettres

Denis BRAUSSEN


Retour au sommaire documentation
Document texte Original

version du samedi 11 avril 1998
révisée le mardi 14 avril 1998
révisée le mercredi 15 avril 1998

1) RAPPEL DU PROBLÈME

1.0) À qui s'adresse ce document ?

typiquement à un groupe de personnes de petite ou de moyenne importance :
qui désire utiliser le service de messagerie (email) de l'Internet mais ne dispose que d'une seule boîte aux lettres 'commune'

le document qui suit décrit une 'astuce' permettant de fournir ce service individuellement (à chaque membre du groupe) dans des conditions acceptables (voir paragrahes (1.2.1) et (4.3))

les moyens mis en oeuvre sont simples et gratuits, tous les programmes utilisés etant sous licence "GPL"

1.1) description de l'existant.

- on est abonné a un FAI (Fournisseur Acces Internet)
- à ce titre dispose (en général) d'UNE seule email

par exemple: denis.braussen@hol.fr

- on a une machine ("batman.gotham.city"), reliée grâce à PPP (Point to Point Protocol) avec une adress IP (Internet Protocol) dynamique, qui se connecte regulierement sur le serveur SMTP (Simple Mail Transport Protocol) de ce FAI.
En gros c'est la méthode habituelle de connexion pour un particulier abonné à un provider (hol, oleane, wanadoo, easynet, etc...)

(Bien entendu, la méthode décrite ici serait également valable si le mode de connexion était different : IP fixe, protocole SLIP au lieu de PPP, etc...)

- sur cette même machine, plusieurs comptes sont ouverts.

par exemple: denis, gilles, thierry

1.2) la machine (batman.gotham.city) utilise les programmes :

1.2) la question est:

"comment partager l'unique adresse email fournie par mon provider (ici Havas On Line: "hol") entre denis, gilles et thierry en respectant le caractere confidentiel de l'email ?"

1.2.1) "Cahier des charges"

- il faut bien sur que les uns ne puissent pas lire les mails adressés aux autres
- les mails qui arriveront sur la machine "batman" (batman.gotham.city) devront êtres dispatchés correctement vers denis OU gilles OU thierry.
- si un mail ne peut pas être distribué normalement il est impératif qu'il soit retourne à l'envoyeur avec un message d'explication
- dans le même temps (cas d'un mail retourne à l'envoyeur) un message d'avertissement ainsi que l'en-tête (HEADER) du mail non distribué doit être envoyé à la personne responsable de la machine (note : bien entendu le corps du message qui est privé et confidentiel ne lui sera pas communiqué).

1.2.2) "Idée"

==> si, dans le champ "To:" on faisait précéder cette unique adresse email <denis.braussen@hol.fr> par le nom de l'user à qui on veut l'envoyer, on pourrait alors traiter le mail avec PROCMAIL (un programme classique qu'on trouve sur toutes les distributions (Debian, Slackware, RedHat, etc...) et qui fonctionne avec sendmail (dans notre cas) grâce à des règles appropriées (à placer dans le fichier $HOME/.procmailrc).

c'est-à-dire que l'on souhaite :

+-----------------------------------------+-------------------------+
|       si le champ "To:" contient :      | alors procmail vers :   |
+-----+-----------------------------------+-------------------------+
| To: | gilles   <denis.braussen@hol.fr>  |   gilles@localhost      |
| To: | denis    <denis.braussen@hol.fr>  |   denis@localhost       |
| To: | thierry  <denis.braussen@hol.fr>  |   thierry@localhost     |
+-----------------------------------------+-------------------------+

2) MA SOLUTION

2.1) qui va rapatrier et dispatcher le courrier ?

un utilisateur et un seul (celui qui aura le fichier $HOME/.procmailrc) aura le droit de rapatrier les mails depuis le serveur POP du FAI grâce au programme fetchmail.

(je pense qu'il n'est pas obligatoire que ce droit soit conféré à UN seul utilisateur, mais si on choisit que PLUSIEURS utilisateurs puissent se connecter sur le serveur POP alors chacun devra posséder un $HOME/.procmailrc identique en tous point à ceux des autres utilisateurs. Bien entendu ceci est hors de question car :

sur batman.gotham.city j'ai donc créé un nouvel user. Il est seul habilité à retirer du courrier sur le serveur POP. j'ai choisi pour lui le login : "postman"

2.2) POUR RAPATRIER LE COURRIER, il faut donc :

2.2.1) - créer un compte qui accueillera tous ces mails par exemple : "postman"

voici ses caractéristiques :

! batman:~$ finger postman
!
! Login: postman Name: Post Office
! Directory: /home/postman Shell: /bin/bash

Remarquer son "Name:" qui est : "Post Office" ce choix n'est pas fortuit :
"postman" et "Post Office" commencent par "post" ce qui sera bien utile lors de l'écriture des regles dans /home/postman/.procmailrc (et en plus, Post Office, ça a de l'allure :-) )

(note : par defaut PROCMAIL ne prend pas garde à la casse (case insensitive) donc pour lui "post" et "Post" ou "POST" etc... sont équivalents)

2.2.2) - créer le fichier /home/postman/.procmailrc et y écrire nos règles de redistribution du courrier (voir exemple plus bas dans "Annexes")

2.2.3) - modifier les éventuels scripts de connexion et de rapatriement du courrier pour que "postman" seul qui puisse les lancer

En particulier, il est possible que le rapatriement du courrier se fasse automatiquement lors de l'exécution du script /etc/ppp/ip-up lancé automatiquement par le daemon "pppd" (man pppd pour plus de renseignements)

or pppd doit être lancé par "root" (ou être suid-root) et /etc/ppp/ip-up appartient à root (-rwx------)

===> si FETCHMAIL est lancé depuis un /etc/ppp/ip-up il est nécessaire qu'il soit "su" pour l'utilisateur "postman" afin que /home/postman/.procmailrc soit interprete.

renseignements :

2.3) LE COURRIER SORTANT :

2.3.1) configuration du MTA (Mail Transport Agent)

2.3.1.1) sendmail+procmail

le MTA, c'est sendmail. il doit premièrement être configuré pour utiliser le programme PROCMAIL. ---> voir le sendmail.mc en "Annexes" ainsi que les doc d'Éric Jacoboni et de Jean Charles Delépine sur le site du CLX, et sur Linux-france (http://www.linux-france.org/article/mail/sendmail/sendmail.html)

2.3.1.2) sendmail et les "genericstable" (/etc/revaliases)

D'autre part, toute personne qui se connecte en PPP avec IP dynamique (voir paragraphe 1.1) est confrontée au problème du "MASQUERADING"

les mails sortant de votre machine *doivent* apparaître pour les machines de l'Internet avec un nom de domaine existant réellement, sous peine de se voir refuser la distribution des mails par certains serveurs; Il faut donc configurer sendmail de sorte qu'il modifie le champ "From:" de mails sortants.

La solution utilisée sur batman.gotham.city utilise les "GENERICSTABLE" : ces "tables génériques" obligent sendmail remplacer le contenu du "From:" de tout message écrit par chaque user par un autre, prédéterminé.

exemple de fichier /etc/revaliases (la "genericstable")

Comme les mails sortants sont aliasées par sendmail via /etc/revaliases (voir 2.3.1) il faut aliaser chaque utilisateur avec cette adresse email unique :

voici un exemple de /etc/revaliases

denis: denis.braussen@hol.fr
gilles: denis.braussen@hol.fr
thierry: denis.braussen@hol.fr
postman: denis.braussen@hol.fr

(notez l'ajout de "postman")

(n'oubliez pas de lancer un /usr/sbin/sendmail -bi -oA/etc/revaliases pour remettre la base à jour apres chaque modification. Si sendmail fonctionne en mode daemon, il faudra le killer puis le relancer pour qu'il prenne les modifs en compte)

ainsi, chaque mail sortant verra son champ "From:" réécrit par sendmail ainsi:

denis -> denis.braussen@hol.fr
gilles -> denis.braussen@hol.fr
etc..

2.3.1.3) Une (seule) ligne de "hack" dans /etc/sendmail.cf

explications:
au total, à chaque session : sendmail -q (envoi normal)
fetchmail (rapatriement normal)
sendmail -q (renvoi si erreur)
fetchmail (si l'erreur provient d'un user de batman)
une solution (le hack)

(pour éviter d'avoir a effectuer deux fois le cycle sendmail -q (envoi normal) fetchmail )
comme décrit au paragraphe précédent, il serait judicieux que les mails renvoyés à des expediteurs qui sont des users de batman.gotham.city ne repassent pas par le FAI mais soient transportés localement au lieu de retourner chez le FAI avant d'être a nouveau rapatrié.
j'ai écris un mini patch à placer dans /etc/sendmail.cf qui fait exactement ceci :

but: remplacer tous les <denis.braussen@hol.fr> par <postman.gotham.city> dans les champs "to:" des mails 'partant'
ainsi tout le courrier au départ de <postman.gotham.city> et adressé à "user <denis.braussen@hol.fr>" sera distribué localement.

comment: attaquons nous à la règle qui canonise les adresses : on cherche une correspondance puis on renvoie a une règle habituelle ($96) qui fera le travail pour nous avec au passage une substitution ! et le tour est joué !

voici :

############################################
#   Ruleset 3 -- Name Canonicalization   ###
############################################
S3

# remplace tous les <denis.braussen@hol.fr> par des <postman.gotham.city>
# dans les champs "To:"
#
R$* <denis.braussen@hol.fr>       $>96 $: $1 <postman@batman.gotham.city>
#                          ^^^^^^^attention: mettre ici une tabulation

2.3.2) configuration du lecteur de mail

comme notre but est d'envoyer des mails avec des champs To: du style :
Denis BRAUSSENS <denis.braussen@hol.fr>

ou bien
gilles <denis.braussen@hol.fr>
thierry <denis.braussen@hol.fr>

noter que l'adresse email (entre crochets) ne varie pas : seul le nom, considéré par sendmail et ses pairs comme un commentaire, change. les "From:" des messages expédiés à nos utilisateurs (donc récupérés dans la boîte aux lettres fournie par le FAI) seront donc, dès réception sur notre machine, analysés par procmail et ventilés dans les boîtes à lettres locales en fonction de ce nom.

il peut être utile (mais non obligatoire, on peut le faire à la main... mais bof... :-) ) que les utilisateurs de batman.gotham.city configurent leur lecteur de mail pour que celui, lors de la création d'un message (nouveau ou réponse), écrive correctement le champ "From:" (rajout du nom de l'user devant l'email) afin de ne pas avoir de probleme en cas de 'reply'.

En effet, les règles écrites dans /home/postman/.procmailrc utiliseront ce champ (en le transformant en champ "To:" d'ou l'importance pour les utilisateurs de batman.gotham.city d'avoir un champ "From:" correctement écrit) pour retourner le mail en cas d'erreur (voir paragraphe 1.2.1 et aussi "Annexes")

2.3.2.1) pourquoi ?

Parce que quand home/postman/.procmailrc va dispatcher les mails il va :
  1. chercher à rediriger le mail vers 'denis' ou 'gilles' ou 'thierry' ...
  2. s'il échoue, il va retourner le mail a l'envoyeur en cherchant cet envoyeur dans le champ "From:" et en reconstruisant a partir de celui-ci un nouveau champ "To:" puis le passer a SENDMAIL. Au passage, un nouveau champ "From:" est construit : "From: Post Office <postman>", transformé en "From: Post Office <denis.braussen@hol.fr>" apres passage dans /etc/sendmail.cf.

    Si SENDMAIL ne tourne pas en mode daemon, le mail ira attendre un "sendmail -q" dans /var/spool/mqueue.
    Si SENDMAIL tourne en mode daemon, le mail est renvoyé diretement sur le serveur SMTP (Simple Mail Transport Protocol) du FAI

Une fois envoyé sur le serveur SMTP, deux cas peuvent se présenter :

1er cas: l'envoyeur n'est pas un user de batman.gotham.city

le mail est distribue par le serveur SMTP du FAI tout a fait normalement...

2ième cas: l'envoyeur EST un user de batman.gotham.city

le mail est distribue par le serveur SMTP du FAI tout a fait normalement...ET VA TOUT NATURELLEMENT REVENIR VERS denis.braussen@hol.fr !!

le prochain appel a "fetchmail" ira donc le chercher sur le serveur POP du FAI et ce mail subira a son tout /home/postman/.procmailrc !!!

d'où la nécessité pour les users de batman.gotham.city de bien configurer leur lecteur de mail de façon à ce que le champ "From:" de leurs mails commence par un nom d'user connu par /home/postman/.procmailrc.

ex 1:
+-------------------------------------------------+
| From: Denis BRAUSSEN <denis.braussen@hol.fr>    |
| To: nimportequoi <denis.braussen@hol.fr>        |
+-------------------------------------------------+

(nimportequoi est inconnu sur batman.gotham.city)
sera renvoyé à "denis"

ex 2:
+-------------------------------------------------+
| From: nimportequoi <denis.braussen@hol.fr>      |
| To: un_autre <denis.braussen@hol.fr>            |
+-------------------------------------------------+

(nimportequoi est inconnu sur batman.gotham.city)
(un_autre est inconnu sur batman.gotham.city)
sera renvoyé a "postman" car "nimportequoi" n'est pas connu sur batman.gotham.city

ex 3:
+-------------------------------------------------+
| From: un_autre <un_autre@ailleurs.org>          |
| To: nimportequoi <denis.braussen@hol.fr>        |
+-------------------------------------------------+

(nimportequoi est inconnu sur batman.gotham.city)
(on ne se soucie pas de savoir si "un_autre" est connu sur "ailleurs.org" : cela ne nous regarde plus.)
sera renvoyé a "nimportequoi <un_autre@ailleurs.org>"

note: j'utilise PINE et dans ce cas il faut renseigner le champ "personal-name" avec "Denis BRAUSSEN" (menu: SETUP/CONFIGURATION)

voir en "Annexes" /home/postman/procmailrc

3) CONCLUSION

3.1) réception

- un mail envoyé à "gilles <denis.braussen@hol.fr>" sera rapatrié par "postman" puis redirigé (par procmail et de par sa configuration contenue dans /home/postman/.procmailrc) vers la boîte du compte local "gilles"

de même :

- un mail envoyé à "Denis BRAUSSEN <denis.braussen@hol.fr>" sera rapatriées par "postman" puis redirigé vers "denis"

etc...

- un mail envoye a "albert <denis.braussen@hol.fr>" ou "albert" n'est pas un utilisateur de batman.gotham.city sera retourné à l'envoyeur avec un message d'erreur. dans le même temp l'en-tête de ce mail sera envoyé à "postman" (l'administrateur du système), à titre d'information.

3.2) expédition

l'user "denis" peut envoyer des mails depuis la machine car il dispose d'une adresse email valide (indispensable pour ne pas se faire "jeter" de certains serveurs). cette email lui est fournie par un aliasing comme vu en 2.3.1.2

idem pour l'user "postman", "gilles", "thierry", etc...

3.3) administration

3.4) mails sans specification d'user valide

une règle dans /home/postman/.procmailrc les envoie à un utilisateur privilégié.

3.5) email "internes"

normalement distribués.

4) LIMITATIONS ET INCONVÉNIENTS DE CE SYSTEME

4.1) les champs To: mal renseignés

le champ "To:" doit contenir une adresse qui corresponde strictement aux règles de /home/postman/.procmailrc ainsi, un email envoyé avec :

  1. To: <denis.braussen@hol.fr> (pas de Login devant)
  2. To: gills <denis.braussen@hol.fr> (faute de frappe)
  3. To: musclor <denis.braussen@hol.fr> (login grotesque)

sera retourné à l'envoyeur.

===> il est primordial de prévoir une règle dans /home/postman/.procmailrc qui accepte au moins les emails adressés ainsi:

To: denis.braussen@hol.fr

car en général ils émanent de personnes qui ne connaissent pas les règles utilisées sur batman.gotham.city. Ces mails pourront être redirigés vers un user "special" (le Postmaster, en general).

note:

dans ce cas précis, pour /home/postman/.procmailrc To: denis.braussen@hol.fr
et
To: Denis BRAUSSEN <denis.braussen@hol.fr>
c'est la même chose : ces mails seront expediés à "denis". ça tombe bien, c'est lui l'administrateur :-) mais ce cas de figure n'est pas général, alors pensez à rediriger les mails qui n'ont pas de nom d'user dans le libellé du champ "To:"

ATTENTION aussi : cette redirection doit se faire exclusivement par /home/postman/.procmailrc et non par un /home/postman/.forward car une .forward a PRIORITÉ sur .procmailrc !!

4.2) Les champ 'Bcc' 'cc' et listes de diffusion Ou champ "To:" avec plusieurs destinataires

(voir la remarque de Stephane Bortzmeyer au paragraphe 5.7.3.2)

les champs cc (Carbon Copy) et Bcc (Blind Carbon Copy) ne peuvent pas être honorés avec ce système.

en clair, cela signifie qu'un utilisateur extérieur ne peut pas (sauf peut être en ecrivant des règles .procmailrc plus complètes) envoyer le même mail à plusieurs de nos utilisateurs en même temps.

le même problème se pose avec les listes de diffusion (mailing list)

4.3) Reste a faire...

4.3.1)
cas des champs "To:" a plusieurs destinataires, des mails en cc ou Bcc. PROCMAIL utilise la syntaxe du programme EGREP 'Extended Grep', bien connu. Il devrait être possible de construire un script pour résoudre ce problème.
4.3.2)
Envoyez moi vos suggestions et/ou vos solutions ! :-)

5) ANNEXES

5.1) config de "batman":

slackware 3.1,
kernel 2.0.30,
CPU 486DX4-100,
RAM: 32 Mo,
SWAP: 40 Mo,
HD: 2X500 Mo,

sendmail + procmail (transport),
fetchmail (POP),
formail (filtre),
pine (lecteur),

5.2) le fichier sendmail.mc

dnl ---> /sendmail.mc a compiler par: m4 sendmail.mc > /etc/sendmail.cf
dnl ---> FEATURE(masquerade_envelope) et
dnl ---> FEATURE(genericstable,``hash -N /etc/revaliases'') sont
dnl ---> obligatoires pour reecrire le champ From: comme decrit plus haut
dnl ---> les autres options sont decrites sur www.linux-france.org, section
dnl ---> doc puis chercher sendmail...
dnl ---> (auteur: JC Delepine et Eric Jacoboni, il y a encore d'autres
dnl ---> articles mais ce sont ceux la dont je me suis le plus servi,
dnl ---> et je tiens a les remercier ici pour leur aide. MERCI, donc. :-)
dnl --->-----------------------------------------------------------------
include(`../m4/cf.m4')dnl
OSTYPE(`linux')dnl
define(`confCON_EXPENSIVE', `True')dnl
FEATURE(genericstable,``hash -N /etc/revaliases'')dnl
GENERICS_DOMAIN(batman.gotham.city batman)dnl
FEATURE(always_add_domain)dnl
FEATURE(nocanonify)dnl
FEATURE(redirect)dnl
FEATURE(masquerade_envelope)dnl
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
FEATURE(local_procmail)dnl
define(`confCOPY_ERRORS_TO', `Postmaster')dnl
define(`confME_TOO', `True')dnl
define(`confDEF_CHAR_SET', `ISO-8859-1')dnl
define(`confSMTP_MAILER', `smtp8')dnl
define(`SMTP_MAILER_FLAGS', `e')dnl
define(`confMIME_FORMAT_ERRORS',`True')dnl
define(`confCF_VERSION', `Denis BRAUSSEN - 19/fev/98')dnl
define(`SMART_HOST', `smtp8:mail.hol.fr')dnl
define(`confTO_QUEUEWARN', `24h')dnl
MAILER(local)dnl
MAILER(smtp)dnl

5.3) le fichier /etc/revaliases (a titre d'exemple.)

denis: denis.braussen@hol.fr
gilles: denis.braussen@hol.fr
thierry: denis.braussen@hol.fr
postman: denis.braussen@hol.fr

5.4) le fichier /etc/hosts

# For loopbacking.
127.0.0.1     batman.gotham.city localhost batman
#             ^^^^^^^^^^^^^^^^^^
# le nom complet de ta machine EN PREMIER !!
# End of hosts.

5.5) le fichier /home/postman/.procmailrc

#-----------------------------------------------------------------
# /home/postman/.procmailrc Denis BRAUSSEN 14 avril 1998
#-----------------------------------------------------------------
VERBOSE = on
LOGABSTRACT = all
LOGFILE = /home/postman/procmail.log
#
# pensez a vider de temps en temps /home/postman/procmail.log !! :-)
# grace a un cron par exemple (ou desactivez le)
# -> man procmailrc
# -> man procmailex


# ----------------------------------------------------------
# USERS CONNUS SUR batman.gotham.city
#
# test (U1)
# denis (U2)
# postman (U3)
#
#
# REMARQUE
# --------
#
# j'ai la "malchance" d'avoir une email qui commence par
# "denis" (denis.braussen@hol.fr) ET un user dont le loggin
# est "denis" --> je suis obligé d'ecrire la regle (U1)
# concernant "denis" differemment que les autres users.
#
# pour "denis" --> * ^To:.Denis|^To:..denis
#
# qui me permets d'attraper To: denis <denis.braussen@hol.fr>
# mais aussi To: Denis BRAUSSEN <denis.braussen@hol.fr>
# To: "denis" <denis.braussen@hol.fr>
# To: "Denis BRAUSSEN" <denis.braussen@hol.fr>
# To: denis.braussen@hol.fr
# To: <denis.braussen@hol.fr>
# etc...
#
#
#
# de même pour l'utilisateur privilégié : "postman" (U4)
#
#
# pour les autres users c'est beaucoup plus simple : un simple
# * ^To:.*gilles suffit à attraper n'importe quel "To:" qui contient
# "gilles" quelque part...
#
#
#
#
# ----------------------------------------------------------


#user: gilles------------------------------------------- (U1)
:0
* ^To:.*gilles
! gilles@batman.gotham.city

#user: thierry------------------------------------------- (U2)
:0
* ^To:.*thierry
! thierry@batman.gotham.city



#user: denis-------------------------------------------- (U3)
:0
* ^To:.Denis|^To:..denis
! denis@batman.gotham.city

#user: post (postman)----------------------------------- (U4)
:0
* ^To:.Post|^To:..Post
! denis@batman.gotham.city


#-(A2)-----------test generique--------------------------------------
#
# c'est ce test qui va renvoyer le mail a l'expediteur....
#
# attrape meme les mails sans champ "To:" comme les mails en "Bcc"
#
# 1) envoie de l'entete a "postman"
# 2) retour a l'envoyeur
#
#--------------------------------------------------------------------
:0
* .*
{
#-------------------- cc _ONLY_ the header of the mail to postmaster------
:0 Ac
| (formail -X "" | formail -R "To:" "To_ERREUR_SUR_CETTE_ADRESSE:"
| formail -A "To: postman@batman.gotham.city" ; cat postman_info)
| $SENDMAIL -t

# ATTENTION: les *3* ligne ci dessus sont a rassembler sur UNE SEULE
# ********** grande ligne dans le fichier original. C INDISPENSABLE.
#
# ne garde que l'entete
# renomme le champ "To:"
# recree un nouveau champ "To: postman..."
# rajoute le contenu de /home/postman/postman.info
# envoie le mail grace a sendmail


#---- return to sender with the list of valid email on the server --------
:0 A
| return_the_mail $SENDMAIL

# lance les script /home/postman/return_the_mail puis renvoie le mail
# grace a sendmail (voir ce script en 5.6)

}

#----------------------------------------------------------------------

ATTENTION: procmail est assez capricieux : la moindre erreur dans ce fichier le bloque

par exemple: (l'étoile devant 'Denis')

:0
* ^To:.*Denis
! denis@batman.gotham.city

fait échouer toutes les redirections car "denis" est contenu dans "truc " et les mails aboutissent chez "denis" et non "truc".
d'ailleurs si quelqu'un de des meilleurs regles qu'il n'hesite pas a le faire savoir ! :-)

TIP: pour faire des test 'hors connexion' vous devez envoyer vos mails a "postman@batman.gotham.city" (car le .procmailrc est chez lui !)

ex: denis <postman@batman.gotham.city> OK musclor <postman@batman.gotham.city> ECHEC :)

5.6) le script /home/postman/return_the_mail

ce script sert a renvoyer les mails dont le champ "To:" contient un nom qui n'est pas répertorié dans /home/postman/.procmailrc #!/bin/sh
# /home/postman/return_the_mail Denis BRAUSSEN 14 avril 1998
# note: $1==$SENDMAIL
#
POSTMAN="Post Office <denis.braussen@hol.fr>"

(formail -k -X From: -X Subject: -X To: | \
formail -R "To:" "To_ERREUR_SUR_CETTE_ADRESSE:" | \
formail -A "X-AUTHENTIFICATION: $POSTMAN" | \
formail -A "X-From: $POSTMAN" | \
formail -R "From:" "To:" | \
formail -I "Return-Path:" \
; cat info_file)| $1 -t


# enlève l'entête sauf les champs "From:" et "To:"
# renomme "To:" en "To_ERREUR_SUR_CETTE_ADRESSE:"
# rajoute un champ "X-AUTHENTIFICATION: $POSTMAN"
# rajoute un champ "X-From: $POSTMAN"
# renomme "From:" et "To:"
# rajoute un champ "return-Path:"
# rajoute en fin de mail le fichier /home/postman/info_file
# (ce fichier peut etre une notice explicative du fonctionnement
# du service jointe a la liste des user valides de batman.gotham.city)
#
# note: ce script est un 'premier jet' (mais il marche !),
# **** ne vous genez pas pour l'ameliorer (en n'oubliant
# pas de m'en envoyer une copie :-) )
#
# le champ "To_ERREUR_SUR_CETTE_ADRESSE:" pourra etre
# consulte par l'auteur pour qu'il puisse comprendre
# son erreur.
#
#
#------------------------------------------------------------

5.7) Divers

5.7.1) il se peut que la config de sendmail demande un fichier /etc/sendmail.cw s'il est absent. en créer un meme vide :

sous root, tapez : touch /etc:sendmail.cw

5.7.2) ne pas oublier l'indispensable /etc/aliases pour rediriger certains mails. attention : après chaque modif ce fichier la base qui en dépend doit être reconstruite par un appel à 'newaliases'

# ---> exemple de /etc/aliases
# Put any sendmail aliases in here
MAILER-DAEMON: postmaster
postmaster: root
usenet: root
news: root
#
tous ces trucs vont chez root, mais sont finalement redirigés par /root/.forward vers le véritable compte de l'administateur (moi même ;) !)

# --> /etc/.forward
denis

ATTENTION: - pas de .forward chez postman ! (voir 4.3.1) - méfiez vous des 'boucles infinies' !

5.7.3) fetchmail depuis /etc/ppp/ip-up

#extrait de /etc/ppp/ip-up________________________________________
#
sudo -u postman fetchmail -v -f /home/postman/.fetchmailrc
#
#-----------------------------------------------------------------

5.7.3) d'autres avis, d'autres possibilités (ref: fr.comp.mail) :

5.7.3.1) Alexis de Goriainoff degoria@mines.u-nancy.fr
Voici la solution que j'utilise

Je crée une adresse mail par utilisateur sur un des nombreux services de boite aux lettres gratuites (hotmail, caramail, netaddress, mygale, chez, yahoo etc.).

Chaque utilisateur a donc son adresse personelle de la forme

user@hotmail.com

Pour toutes ces adresses, je configure hotmail pour qu'il forwarde tout vers adresse@mon-fournisseur.com

Pour récuperer le mail j'utilise fetchmail qui permet de dispatcher les mails en fonction du champ to: .

Les logins n'ont même pas besoin d'être les mêmes chez hotmail et chez moi, il suffit de donner la correspondance login hotmail -> login locaux à fetchmail.

5.7.3.2) Stephane Bortzmeyer bortzmeyer@pasteur.fr
"cette méthode à base de procmail, /.../ je pense qu'elle est beaucoup plus compliquée que de configurer UUCP."
de plus :

1) Si un message est envoyé à Denis *et* Gilles, seul Denis le recevra. Il faudrait utiliser l'option 'c' mais cela impose d'ajouter un champ pour noter que le message a déjà été reçu.

2) Si Denis ou Gilles sont en Cc:, ils ne verront rien. Il faudrait utiliser la macro ^TO de procmail.

5.7.3.3) Denis BRAUSSEN denis.braussen@hol.fr (moi meme :-) )
en réponse à Stéphane Bortzmeyer :
"je sais bien que ce n'est pas fait pour un gros serveur. mais je continue a penser que dans le cas d'une utilisation restreinte par exemple: ce genre de config est tout a fait acceptable."
5.7.3.4) autre lien sur une technique analogue :
http://www.linux-france.org/article/mail/repart-mail.html

l'auteur de ce document utilise le champ "subject" pour rediriger les mails.

6) Appel aux bonnes volontés :

si vous avez des remarques concernant ce document, des améliorations, des corrections, des critiques, n'hésitez pas a m'en faire part !

Merci d'avance ;-)

7) REMERCIEMENTS (ca ne fait pas de ma(i)l ;-) )

merci à ceux qui m'ont aidé à tenter cette 'astuce' dont, et non exhaustivement :

Jean Charles Delepine delepine@lan.univ-lyon1.fr,
Nat Makarevitch nat@nataa.fr.eu.org
Pablo Saratxaga srtxg@chanae.alphanet.ch
Eric Jacoboni jaco@mail.dotcom.fr
Stephane Bortzmeyer bortzmeyer@pasteur.fr
Edgar Bonet Orozco bonet@labs.polycnrs-gre.fr
"Pascal A. Dupuis" dupuis@lei.ucl.ac.be
Sebastien TANGUY sebastien.tanguy@wanadoo.fr
Laurent Frigault lfrigault@teaser.fr
Vladimir NOVIKOV vnovikov@starnet.fr
Alexis de Goriainoff degoria@mines.u-nancy.fr
Sebastien Phelep phelep@svc.univ-ubs.fr pour le gloubiboulga,
l'Excellent Thierry Pinelli tpinelli@pinux.gyptis.frmug.org pour son humour ;-) ,
P.Coulon cdc@bceom.fr qui m'a donné l'occasion d'écrire ces qques lignes, :)

et enfin à tous ceux qui ecrivent sur l'USENET pour 'faire avancer les choses' ... :-))

Bien amicalement,
Denis.

denis.braussen@hol.fr