Yesterday I played a bit with the Net::NNTP module, and used it to write a short Perl program that posted a simple test message to the Usenet group alt.test, which is dedicated to exactly such testing. And today I cleaned up the program a little, and decided to put the Perl program online as a short example on how to post using Net::NNTP.
Yesterday, I had already used the Perl Package Manager, which comes with ActivePerl, to install the libnet bundle. This bundle does include the Net::NNTP module, which makes posting to Usenet an easy thing to do.
Next, I wrote a small Perl program which connects to the server, logs in using a username and a password, checks if posting is allowed, and then posts a message. The complete cleaned up version, which includes checking for errors, is given below:
#!/usr/bin/perl use strict; use warnings; use Net::NNTP; my $SERVER = 'news.example.com; my $USERNAME = 'user'; my $PASSWORD = 'password'; my $DEBUG = 0; my $nntp = Net::NNTP->new( $SERVER, Debug => $DEBUG ); $nntp->authinfo( $USERNAME, $PASSWORD ) or die "Authentication failed: ", $nntp->message; $nntp->postok() or die "Posting not allowed:", $nntp->message; my $headers = <<'HEADERS_END'; Newsgroups: alt.test Subject: This is a test From: test <email@example.com> HEADERS_END my $body = <<"BODY_END"; This is a test. BODY_END my $sig_sep = "-- \n"; my $signature = 'http://johnbokma.com/perl'; my $message = $headers . "\n" . $body . $sig_sep . $signature; $nntp->post( $message ) or die "nntp_post: posting failed: ", $nntp->message; $nntp->quit;
Note that you have to replace the dummy values for
$PASSWORD with working values in order for the Perl program to work.
Moreover, note that this program doesn't use a valid email address. Instead of making up one myself, which is a very bad idea; one might ending up abusing someone else's domain, I decided to use the recommended invalid TLD (top level domain) to make clear that the email address is not a valid one.
Finally, if you want to use a signature, make sure you're using the correct signature separator: two '-' characters, followed by exactly one space on a line by itself as shown in the above example program.