home *** CD-ROM | disk | FTP | other *** search
- Path: tut.cis.ohio-state.edu!cs.utexas.edu!uunet!convex!convex.com!tchrist
- From: tchrist@convex.com (Tom Christiansen)
- Newsgroups: alt.sources
- Subject: generic mail-to-news interface
- Message-ID: <2100@convex.UUCP>
- Date: 16 Oct 89 13:24:34 GMT
- Sender: news@convex.UUCP
- Reply-To: tchrist@convex.com (Tom Christiansen)
- Organization: Convex Computer Corporation, Richardson, Tx.
- Lines: 89
-
-
- 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@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@convex.COM
- "EMACS belongs in <sys/errno.h>: Editor too big!"
-
-