Page suivante Page précédenteTable des matières

9. Le script mail2news.pl


#!/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 $?;


Page suivante Page précédenteTable des matières