Mini Howto Mail vers News
Robert Hart, InterWeft IT Consultants Melbourne, Australie,
iweft@ipax.com.au
Traduit par Olivier Tharan, tharan@int-evry.fr
v1.0, 4 novembre 1996
Ce document decrit comment configurer votre logiciel de News et
mail2news.pl pour relier des listes de distribution aux groupes de
news locaux.
11.. CCooppyyrriigghhtt eett aauuttrreess cchhoosseess
Le copyright de ce document est retenu par l'auteur. Il donne la
permission de distribuer ce document par des moyens electroniques et
sur des CDs, a condition qu'il soit garde entierement dans son format
d'origine. Il donne aussi la permission d'imprimer une copie de ce
document pour usage personnel.
La publication de ce document en partie ou en entier sans la
permission du proprietaire du copyright de toute maniere autre
qu'indiquee ci-dessus est interdite.
Ce document est directement supporte par InterWeft IT Consultants
(Melbourne, Australie).
La derniere version de ce document est disponible sur le site WWW
d'InterWeft chez InterWeft IT Consultants, .
22.. IInnttrroodduuccttiioonn
La plupart des sites sur Internet sont toujours en train de chercher
des moyens d'ameliorer l'utilisation de la bande passante limitee dont
ils disposent sur leur lien a Internet.
Supposons que plus d'un utilisateur s'abonne a la meme liste de
distribution, et il y aura duplication de trafic. S'il y a un certain
nombre de telles duplications, ou si le trafic sur les listes est
important, la consommation de bande passante s'accroit.
En abonnant le site a une liste (si c'est permis par le proprietaire
de la liste), et en _r_o_u_t_a_n_t le courrier electronique vers le serveur
de news local, il est possible de rendre les listes de distribution
accessibles a tous les utilisateurs du site ou, en utilisant les
principes de securite d'innd, de limiter l'acces a certains
utilisateurs.
Un tel abonnement de groupe (surtout s'il y a quelques listes a grand
trafic) peut generer des economies d'utilisation de bande passante
importantes.
La lecture des listes a travers un lecteur de news offre aussi aux
utilisateurs l'avantage du threading (NdT : creer des enfilades), qui
n'est pas disponible dans de nombreux programmes de mail, et aussi
l'avantage de liberer leur boite aux lettres pour du courrier peut-
etre plus urgent ou plus personnel.
Ce mini Howto decrit la mise en place du script mail2news.pl pour
realiser ceci.
22..11.. OOuu ttrroouuvveerr mmaaiill22nneewwss..ppll
L'auteur n'a pas pu trouver mail2news.pl sur le CPAN (le reseau
complet d'archives Perl), mais il a pu passer devant sans le voir. Il
est cependant sur sunsite.unc.edu (quelque part) et aussi sur
ftp.redhat.com.
Comme ce script Perl n'est pas tres long, vous le trouverez a la fin
de ce Howto.
33.. VVuuee dd''eennsseemmbbllee dduu ssyysstteemmee
Il est probablement plus facile de comprendre le fonctionnement de ce
systeme en suivant un message a partir de la liste de distribution
vers le groupe de news, puis d'un message poste sur le groupe de news
local (route vers la liste de distribution) et en regardant comment
ils sont traites.
33..11.. LLee ccoouurrrriieerr vveennaanntt ddee llaa lliissttee ddee ddiissttrriibbuuttiioonn
Le courrier de la liste de distribution est envoye a toutes les
adresses mail abonnees. Un alias de mail special est abonne a la liste
de distribution en question et tout le trafic a destination et en
provenance de la liste est ainsi envoye par le serveur de liste a
cette adresse.
Quand le courrier de la liste de distribution arrive sur la machine
locale, l'alias de mail envoie le message entrant dans mail2news.pl.
L'alias de mail specifie aussi le groupe de news (local) de
destination.
Le script mail2news.pl traite le message, en appliquant de nouvelles
en-tetes et utilise ensuite rnews ou inews pour poster le message dans
le groupe de news.
33..22.. MMeessssaaggeess ppoosstteess ddaannss llee ggrroouuppee ddee nneewwss llooccaall
Le groupe de news local est installe en tant que groupe modere,
puisque ceci nous permet de beneficier des possibilites de courrier
electronique d'innd. Tout message poste dans un groupe modere n'est
pas transmis automatiquement au groupe. A la place, les messages sont
envoyes par _e_m_a_i_l au moderateur du groupe.
En declarant le moderateur du groupe de news local comme etant
l'adresse de la liste de distribution, tous les messages postes sur le
groupe de news local seront envoyes par _e_m_a_i_l a la liste de
distribution par innd et n'apparaitront qu'une fois qu'ils auront ete
recus par mail2news.pl qui ajoute la ligne _a_p_p_r_o_v_e_d necessaire aux
messages pour qu'innd accepte de les poster dans le groupe de news.
44.. CCoonnffiigguurreerr mmaaiill22nneewwss
Placez le script mail2news.pl dans un endroit convenable. Je prefere
/usr/local/scripts, mais l'endroit depend de vous.
Vous devrez editer le script comme suit :
+o au debut du script, assurez-vous que vous pointez vers le binaire
Perl local
___________________________________________________________________
#!/usr/bin/perl
# pointe vers l'endroit courant de Perl
___________________________________________________________________
+o j'ai eu des problemes avec les trois lignes suivantes. Les mettre
en commentaire ne pose pas de problemes.
___________________________________________________________________
( $version ) = $] =~ /(\d+\.\d+).*\nPatch level/;
die "$program: demande au moins la version 3 de Perl\n"
if $version < 3;
___________________________________________________________________
+o editez les lignes suivantes pour pointer vers le programme qui
poste (j'utilise rnews) et vers votre machine de news :
___________________________________________________________________
# $inews = "/usr/bin/inews";
# $iopts = "-h -o \"passerelle mail2news\"";
$inews = "/usr/bin/rnews";
$iopts = "";
$postinghost = "votre.serveur.de.news"; # pointe vers votre serveur de news
___________________________________________________________________
+o assurez-vous que le script est executable (mode 755).
55.. MMeettttrree eenn ppllaaccee lleess aalliiaass ddee mmaaiill
Editez /etc/aliases pour creer des entrees pour les listes de
distribution que vous voulez envoyer vers les news. Chaque entree doit
etre de la forme :
: \
"| /usr/local/scripts/mail2news.pl "
Si par exemple l'adresse de mail a laquelle il faut envoyer le
courrier de la liste (l'adresse _e_m_a_i_l abonnee) est liste_site et le
groupe de news local dans lequel il faut poster le courrier s'appelle
groupe.site.local, l'alias sera
# adresse d'abonnement de groupe pour machin@une.certaine.liste
liste_site: "|/usr/local/scripts/mail2news.pl groupe.site.local"
Creez une entree pour chaque liste de distribution que vous devez
router vers votre serveur de news local et lancez ensuite newaliases.
66.. CCoonnffiigguurreerr lleess ggrroouuppeess ddee nneewwss eett llee sseerrvveeuurr ddee nneewwss ((iinnnndd)
En utilisant ctlinnd, creez les groupes de news sur votre serveur de
news. Rappelez-vous qu'ils doivent etre locaux, donc nommez-les de
facon distincte avec un prefixe de facon a les exclure de votre
distribution de news (dans le fichier newsfeeds).
Vous devez aussi dire a innd que le groupe est modere (en utilisant
ctlinnd). Rappelez-vous que innd est tres sensible aux proprietaires
et permissions de fichiers, vous devez agir a ce niveau avec innd en
tant qu'utilisateur _n_e_w_s. Vous indiquez un groupe modere en donnant le
parametre m a la commande newgroup.
ctlinnd newgroup m
Le m indique a innd que le groupe est modere.
Editez votre fichier newsfeeds pour vous assurer que ces groupes
locaux ne sont pas distribues (sauf si vous voulez specifiquement que
ca se passe ainsi).
Par exemple, si votre liste de distribution s'appelle
groupe.site.local, vous ajouterez sans doute !local* dans le second
champ des sites que vous distribuez (ou dont vous recevez les news)
dans votre fichier newsfeeds.
Maintenant, de facon a vous assurer que les messages des utilisateurs
sont envoyes sur la liste automatiquement par innd, editez
/etc/news/moderators (ou /usr/local/news/moderators) pour ajouter une
ligne qui declare l'adresse de la liste de distribution comme
moderateur.
groupe.site.local:liste@un.site.de.liste
77.. AAbboonnnneerr ll''aalliiaass mmaaiill22nneewwss a la liste de distribution
Vous devez maintenant abonner l'alias de mail a la liste de
distribution. Verifiez avec l'information de la liste de distribution
comment s'abonner. Certaines listes de distribution vous permettent
d'abonner une adresse _e_m_a_i_l differente de celle d'ou vient
l'abonnement (elles verifient la confirmation avec l'adresse a abonner
avant d'abonner reellement cette adresse).
D'autres listes de distribution ne permettent pas ceci. Vous devrez
donc _f_o_r_g_e_r une demande d'abonnement. Il y a plusieurs facons de faire
ceci. L'une des plus simples est d'utiliser Netscape Mail configure
(de maniere temporaire) avec l'adresse avec laquelle la liste de
distribution doit envoyer le courrier.
Apres l'abonnement, vous devriez voir un message de bienvenue de la
part du serveur de listes dans votre serveur de news. Dans ce cas,
tout s'est bien passe et vous pouvez maintenant tester l'autre sens en
postant un message de news dans votre nouvelle liste.
Le message _n_e _d_e_v_r_a_i_t _p_a_s apparaitre immediatement dans le groupe de
news. Il devrait etre envoye par courrier electronique et recu a
nouveau et poste dans le groupe de news.
Si cela fonctionne, vous avez reussi a router la liste vers les news.
88.. SSii ccaa nnee ffoonnccttiioonnnnee ppaass......
Si ca ne marche pas, vous devez retrouver la trace des messages pour
voir exactement ou ca s'arrete de fonctionner. Des outils utiles a ce
niveau sont les logs de mail et de news.
Robert Hart Melbourne, Victoria, Australie, octobre 1996
99.. LLee ssccrriipptt mmaaiill22nneewwss..ppll
______________________________________________________________________
#!/usr/bin/perl
($program = $0) =~ s%.*/%%;
#( $version ) = $] =~ /(\d+\.\d+).*\nPatch level/;
#die "$program: demande au moins la version 3 de Perl\n"
# if $version < 3;
# $inews = "/usr/bin/inews";
# $iopts = "-h -o \"passerelle mail2news\"";
$inews = "/usr/bin/rnews";
$iopts = "";
$postinghost = "votre.serveur.de.news";
if ($#ARGV < 0) {
# $newsgroup = "test";
# nous attendons la ligne newsgroup dans le corps
} elsif ($#ARGV == 0) {
$newsgroup = $ARGV[0];
} else {
die "usage: $program [groupe de news]\n";
}
# si jamais inews fait un core dump ou quelque chose insense
$SIG{'PIPE'} = "plumber";
sub plumber { die "$program: \"$inews\" est mort trop tot !\n"; }
open (INEWS, "| $inews $iopts") ||
die "$program: ne peut pas lancer $inews\n";
# boucle qui prend les en-tetes
while () {
last if /^$/;
# transforme la vraie ligne from: dans le vieux style
s/^From:\s+(.*) <(.*)>/From: $2 ($1)/;
s/Message-Id/Message-ID/;
# transforme la ligne from_ en en-tete de chemin ;
# fonctionne aussi en local
s/^From\s+(\S+)@(\S+).*/Path: $2!$1/
|| s/^From\s+(\S+)[^@]*$/Path: $1\n/;
print INEWS
# if /^(Date|From|Subject|Path|Newsgroups|Organization|Message-ID):/i;
if /^(Date|From|Subject|Path|Newsgroups|Message-ID):/i;
$saw_subject |= ( $+ eq 'Subject' );
$saw_msgid |= ( $+ eq 'Message-ID' );
# $saw_newsgroup |= ( $+ eq 'Newsgroups' );
}
warn "$program: n'attendait pas le groupe dans les en-tetes et les arguments\n"
if $newsgroup && $saw_newsgroup;
die "$program: n'a pas obtenu le groupe des en-tetes ni des arguments\n"
unless $newsgroup || $saw_newsgroup;
$approved = $newsgroup;
$approved =~ s/\./'-'/eg;
($sec,$min,$hour,$mday,$mon,$year)=localtime(time);
$madeupid = "\<$year$mon$mday.$hour$min$sec.$$\@kepler.hedland.edu.au\>";
printf INEWS "Newsgroups: %s\n", $newsgroup if $newsgroup;
printf INEWS "Approved: %s\@kepler.hedland.edu.au\n", $approved;
print INEWS "Subject: Untitled\n" unless $saw_subject;
printf INEWS "Message-ID: %s\n", $madeupid unless $saw_msgid;
printf INEWS "NNTP-Posting-Host: %s\n", $postinghost;
print INEWS "Organisation: (mail2news gateway)\n";
print INEWS "\n";
print INEWS while ; # avale le reste du message
close INEWS;
exit $?;
______________________________________________________________________
.