generic mail-to-news interface
Tom Christiansen
tchrist at convex.com
Mon Oct 16 23:24:34 AEST 1989
Here is a perl script that you can use to send mail messages
to newsgroups. It expects to be passed the newsgroup as an
argument, or else included in the headers. You may have to
alter the pathname for inews.
It doesn't really *require* perl version 3, although you'd
have to tweak STDIN to stdin and the
print INEWS while <STDIN>;
to
while (<stdin>) {
print INEWS;
}
As well as the one "warn" to "print stderr".
--tom
ps: kudos to Dave Cohrs <dave at cs.wisc.edu> for the original version
of this script written in csh+grep+sed+ed.
================= CUT HERE ===============================================
#!/usr/local/bin/perl
($program = $0) =~ s%.*/%%;
( $version ) = $] =~ /(\d+\.\d+).*\nPatch level/;
die "$program: requires at least version 3 of perl\n"
if $version < 3;
$inews = "/usr/spool/news/lib/inews";
$inews = "/usr/local/bin/inews" unless -x $inews;
die "$program: can't find inews\n" unless -x $inews;
$iopts = "-h";
if ($#ARGV < 0) {
# $newsgroup = "test";
# we'll expect the newsgroup line in the body
} elsif ($#ARGV == 0) {
$newsgroup = $ARGV[0];
} else {
die "usage: $program [newsgroup]\n";
}
# in case inews dumps core or something crazy
$SIG{'PIPE'} = "plumber";
sub plumber { die "$program: \"$inews\" died prematurely!\n"; }
open (INEWS, "| $inews $iopts") ||
die "$program: can't run $inews\n";
# header munging loop
while (<STDIN>) {
last if /^$/;
# transform real from: line back to icky style
s/^From:\s+(.*) <(.*)>/From: $2 ($1)/;
# transform from_ line to path header; also works locally
s/^From\s+(\S+)@(\S+).*/Path: $2!$1/
|| s/^From\s+(\S+)[^@]*$/Path: $1\n/;
print INEWS
if /^(From|Subject|Date|Path|Newsgroups|Organization|Message-ID):/i;
$saw_subject |= ( $+ eq 'Subject' );
$saw_newsgroup |= ( $+ eq 'Newsgroups' );
}
warn "$program: didn't expect newsgroup in both headers and ARGV\n"
if $newsgroup && $saw_newsgroup;
die "$program: didn't get newsgroup from either headers or ARGV\n"
unless $newsgroup || $saw_newsgroup;
printf INEWS "Newsgroups: %s\n", $newsgroup if $newsgroup;
print INEWS "Subject: Untitled\n" unless $saw_subject;
print INEWS "\n";
print INEWS while <STDIN>; # gobble rest of message
close INEWS;
exit $?;
================= END OF CUT HERE ========================================
Tom Christiansen {uunet,uiucdcs,sun}!convex!tchrist
Convex Computer Corporation tchrist at convex.COM
"EMACS belongs in <sys/errno.h>: Editor too big!"
More information about the Alt.sources
mailing list