\documentclass{article}
\usepackage{linuxdoc-sgml}
\usepackage{qwertz}
\usepackage[latin1]{inputenc}
\usepackage{epsfig}
\usepackage{null}
\title{Mini Howto Mail vers News}
\author{Robert Hart, InterWeft IT Consultants Melbourne, Australie,
{\ttfamily iweft@ipax.com.au}\\ 
Traduit par Olivier Tharan, {\ttfamily tharan@int-evry.fr}}
\date{v1.0, 4 novembre 1996}
\abstract{Ce document d\'{e}crit comment configurer votre logiciel de News et
mail2news.pl pour relier des listes de distribution aux groupes de news
locaux. }


\begin{document}
\maketitle
\tableofcontents

\section{Copyright et autres choses}



Le copyright de ce document est retenu par l'auteur. Il donne la
permission de distribuer ce document par des moyens \'{e}lectroniques et sur
des CDs, \`{a} condition qu'il soit gard\'{e} enti\`{e}rement 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
propri\'{e}taire du copyright de toute mani\`{e}re autre qu'indiqu\'{e}e ci-dessus
est interdite.

Ce document est directement support\'{e} par InterWeft IT Consultants
(Melbourne, Australie).

La derni\`{e}re version de ce document est disponible sur le site WWW
d'InterWeft chez InterWeft IT Consultants, \url{http://203.29.72.65/}{}.




\section{Introduction}



La plupart des sites sur Internet sont toujours en train de chercher des
moyens d'am\'{e}liorer l'utilisation de la bande passante limit\'{e}e dont ils
disposent sur leur lien \`{a} Internet.

Supposons que plus d'un utilisateur s'abonne \`{a} la m\^{e}me 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'accro\^{\i}t.

En abonnant le site \`{a} une liste (si c'est permis par le propri\'{e}taire de la
liste), et en {\itshape routant\/} le courrier \'{e}lectronique 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 s\'{e}curit\'{e} d'{\ttfamily innd}, de limiter l'acc\`{e}s \`{a} certains utilisateurs.

Un tel abonnement de groupe (surtout s'il y a quelques listes \`{a} grand
trafic) peut g\'{e}n\'{e}rer des \'{e}conomies 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 : cr\'{e}er des enfilades), qui
n'est pas disponible dans de nombreux programmes de mail, et aussi
l'avantage de lib\'{e}rer leur bo\^{\i}te aux lettres pour du courrier peut-\^{e}tre
plus urgent ou plus personnel. 

Ce mini Howto d\'{e}crit la mise en place du script {\ttfamily mail2news.pl} pour
r\'{e}aliser ceci.




\subsection{O\`{u} trouver {\ttfamily mail2news.pl}}



L'auteur n'a pas pu trouver {\ttfamily mail2news.pl} sur le CPAN (le r\'{e}seau
complet d'archives Perl), mais il a pu passer devant sans le voir. Il est
cependant sur {\ttfamily sunsite.unc.edu} (quelque part) et aussi sur
{\ttfamily ftp.redhat.com}.

Comme ce script Perl n'est pas tr\`{e}s long, vous le trouverez \`{a} la fin de ce
Howto.




\section{Vue d'ensemble du syst\`{e}me}



Il est probablement plus facile de comprendre le fonctionnement de ce
syst\`{e}me en suivant un message \`{a} partir de la liste de distribution vers le
groupe de news, puis d'un message post\'{e} sur le groupe de news local (rout\'{e}
vers la liste de distribution) et en regardant comment ils sont trait\'{e}s.




\subsection{Le courrier venant de la liste de distribution}



Le courrier de la liste de distribution est envoy\'{e} \`{a} toutes les adresses
mail abonn\'{e}es. Un alias de mail sp\'{e}cial est abonn\'{e} \`{a} la liste de
distribution en question et tout le trafic \`{a} destination et en
provenance de la liste est ainsi envoy\'{e} 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 {\ttfamily mail2news.pl}.
L'alias de mail sp\'{e}cifie aussi le groupe de news (local) de destination.

Le script {\ttfamily mail2news.pl} traite le message, en appliquant de nouvelles
en-t\^{e}tes et utilise ensuite {\ttfamily rnews} ou {\ttfamily inews} pour poster le
message dans le groupe de news.




\subsection{Messages post\'{e}s dans le groupe de news local}



Le groupe de news local est install\'{e} en tant que groupe mod\'{e}r\'{e}, puisque
ceci nous permet de b\'{e}n\'{e}ficier des possibilit\'{e}s de courrier \'{e}lectronique
d'{\ttfamily innd}. Tout message post\'{e} dans un groupe mod\'{e}r\'{e} n'est pas transmis
automatiquement au groupe. \`{A} la place, les messages sont envoy\'{e}s par
{\itshape email\/} au mod\'{e}rateur du groupe. 

En d\'{e}clarant le mod\'{e}rateur du groupe de news local comme \'{e}tant l'adresse
de la liste de distribution, tous les messages post\'{e}s sur le groupe de
news local seront envoy\'{e}s par {\itshape email\/} \`{a} la liste de distribution par
{\ttfamily innd} et n'appara\^{\i}tront qu'une fois qu'ils auront \'{e}t\'{e} re\c{c}us par
{\ttfamily mail2news.pl} qui ajoute la ligne {\itshape approved\/} n\'{e}cessaire aux
messages pour qu'{\ttfamily innd} accepte de les poster dans le groupe de news. 




\section{Configurer {\ttfamily mail2news}}



Placez le script {\ttfamily mail2news.pl} dans un endroit convenable. Je pr\'{e}f\`{e}re
{\ttfamily /usr/local/scripts}, mais l'endroit d\'{e}pend de vous.

Vous devrez \'{e}diter le script comme suit :

\begin{itemize}
\item  au d\'{e}but du script, assurez-vous que vous pointez vers le binaire
Perl local

\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
#!/usr/bin/perl
# pointe vers l'endroit courant de Perl
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}

\item  j'ai eu des probl\`{e}mes avec les trois lignes suivantes. Les mettre
en commentaire ne pose pas de probl\`{e}mes.

\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
( $version  ) = $] =~ /(\d+\.\d+).*\nPatch level/;
die "$program: demande au moins la version 3 de Perl\n"
       if $version < 3;
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}

\item  \'{e}ditez les lignes suivantes pour pointer vers le programme qui
poste (j'utilise {\ttfamily rnews}) et vers votre machine de news :

\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
# $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
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}

 
\item  assurez-vous que le script est ex\'{e}cutable (mode 755).
\end{itemize}





\section{Mettre en place les alias de mail}



\'{E}ditez {\ttfamily /etc/aliases} pour cr\'{e}er des entr\'{e}es pour les listes de
distribution que vous voulez envoyer vers les news. Chaque entr\'{e}e doit
\^{e}tre de la forme :

\begin{tscreen}
\begin{verbatim}
<adresse email abonn\'{e}e \`{a} la liste>: \
          "| /usr/local/scripts/mail2news.pl <nom du groupe de news local>"
\end{verbatim}
\end{tscreen}


Si par exemple l'adresse de mail \`{a} laquelle il faut envoyer le courrier de
la liste (l'adresse {\itshape email\/} abonn\'{e}e) est {\ttfamily liste\_site} et le groupe
de news local dans lequel il faut poster le courrier s'appelle
{\ttfamily groupe.site.local}, l'alias sera

\begin{tscreen}
\begin{verbatim}
# adresse d'abonnement de groupe pour machin@une.certaine.liste
liste_site: "|/usr/local/scripts/mail2news.pl groupe.site.local"
\end{verbatim}
\end{tscreen}


Cr\'{e}ez une entr\'{e}e pour chaque liste de distribution que vous devez router
vers votre serveur de news local et lancez ensuite {\ttfamily newaliases}.




\section{Configurer les groupes de news et le serveur de news ({\ttfamily innd})}



En utilisant {\ttfamily ctlinnd}, cr\'{e}ez les groupes de news sur votre serveur de
news. Rappelez-vous qu'ils doivent \^{e}tre locaux, donc nommez-les de fa\c{c}on
distincte avec un pr\'{e}fixe de fa\c{c}on \`{a} les exclure de votre distribution de
news (dans le fichier {\ttfamily newsfeeds}).

Vous devez aussi dire \`{a} {\ttfamily innd} que le groupe est mod\'{e}r\'{e} (en utilisant
{\ttfamily ctlinnd}). Rappelez-vous que {\ttfamily innd} est tr\`{e}s sensible aux
propri\'{e}taires et permissions de fichiers, vous devez agir \`{a} ce niveau avec
{\ttfamily innd} en tant qu'utilisateur {\itshape news\/}. Vous indiquez un groupe mod\'{e}r\'{e}
en donnant le param\`{e}tre {\ttfamily m} \`{a} la commande {\ttfamily newgroup}.

\begin{tscreen}
\begin{verbatim}
ctlinnd newgroup <nom du nouveau groupe> m <administrateur>
\end{verbatim}
\end{tscreen}


Le {\ttfamily m} indique \`{a} {\ttfamily innd} que le groupe est mod\'{e}r\'{e}.

\'{E}ditez votre fichier {\ttfamily newsfeeds} pour vous assurer que ces groupes
locaux ne sont pas distribu\'{e}s (sauf si vous voulez sp\'{e}cifiquement que \c{c}a
se passe ainsi).

Par exemple, si votre liste de distribution s'appelle
{\ttfamily groupe.site.local}, vous ajouterez sans doute {\ttfamily !local*} dans le
second champ des sites que vous distribuez (ou dont vous recevez les news)
dans votre fichier {\ttfamily newsfeeds}.

Maintenant, de fa\c{c}on \`{a} vous assurer que les messages des utilisateurs sont
envoy\'{e}s sur la liste automatiquement par {\ttfamily innd}, \'{e}ditez
{\ttfamily /etc/news/moderators} (ou {\ttfamily /usr/local/news/moderators})
pour ajouter une ligne qui d\'{e}clare l'adresse de la liste de distribution
comme mod\'{e}rateur.

\begin{tscreen}
\begin{verbatim}
groupe.site.local:liste@un.site.de.liste
\end{verbatim}
\end{tscreen}





\section{Abonner l'alias {\ttfamily mail2news} \`{a} la liste de distribution}



Vous devez maintenant abonner l'alias de mail \`{a} la liste de distribution.
V\'{e}rifiez avec l'information de la liste de distribution comment s'abonner.
Certaines listes de distribution vous permettent d'abonner une adresse
{\itshape email\/} diff\'{e}rente de celle d'o\`{u} vient l'abonnement (elles v\'{e}rifient
la confirmation avec l'adresse \`{a} abonner avant d'abonner r\'{e}ellement cette
adresse).

D'autres listes de distribution ne permettent pas ceci. Vous devrez donc
{\itshape forger\/} une demande d'abonnement. Il y a plusieurs fa\c{c}ons de faire
ceci. L'une des plus simples est d'utiliser Netscape Mail configur\'{e} (de
mani\`{e}re temporaire) avec l'adresse avec laquelle la liste de distribution
doit envoyer le courrier.

Apr\`{e}s 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 pass\'{e} et vous pouvez maintenant tester l'autre sens en postant un
message de news dans votre nouvelle liste.

Le message {\itshape ne devrait pas\/} appara\^{\i}tre imm\'{e}diatement dans le groupe de
news. Il devrait \^{e}tre envoy\'{e} par courrier \'{e}lectronique et re\c{c}u \`{a} nouveau
et post\'{e} dans le groupe de news.

Si cela fonctionne, vous avez r\'{e}ussi \`{a} router la liste vers les news.




\section{Si \c{c}a ne fonctionne pas...}



Si \c{c}a ne marche pas, vous devez retrouver la trace des messages pour voir
exactement o\`{u} \c{c}a s'arr\^{e}te de fonctionner. Des outils utiles \`{a} ce niveau
sont les logs de mail et de news.

Robert Hart
Melbourne, Victoria, Australie, octobre 1996




\section{Le script {\ttfamily mail2news.pl}}



\par
\addvspace{\medskipamount}
\nopagebreak\hrule
\begin{verbatim}
#!/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 (<STDIN>) {
   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 <STDIN>;   # avale le reste du message

close INEWS;
exit $?;
\end{verbatim} 
\nopagebreak\hrule 
\addvspace{\medskipamount}




\end{document}
