aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/poptest
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/poptest')
-rw-r--r--contrib/poptest84
1 files changed, 84 insertions, 0 deletions
diff --git a/contrib/poptest b/contrib/poptest
new file mode 100644
index 00000000..3f74cffa
--- /dev/null
+++ b/contrib/poptest
@@ -0,0 +1,84 @@
+#!/usr/bin/perl
+# Copyright 2000 john Summerfield ,summer@os2.ami.com.au>
+# Your choice of licence: GPL 2 or later, or same licence as Perl.
+#
+# Warranty? None
+# If it breaks? The pieces are yours
+# If it breaks something? You drove it.
+# Bugs? At least one.
+
+# now we've cleared the air;
+# This supposed to allow one to talk pop-3 to a mail server. If you're lucky (and know how)
+# you might also be able to talk a few other Internet protocols with it.
+# Typically, it's run thus:
+# pop2test.1 <mailserver> [<mailport>]
+# mailport's optional; default is 110 (pop-3).
+#
+# Having started, you type away much as you would with telnet.
+#
+#
+#
+# It has this great advantage over telnet: it reads its input from stdin and writes to stdout;
+# you can prepare the entire sequence in a file, then run it this:
+# pop2test.1 <thefileyoujustcreated >theresultsyouwanttoperuse host port
+#
+#
+# uses:
+# 1 Debugging POP3 (and maybe imap does anyone know?) mail problems
+# 2 Deleting the occasional piece of mail that's too big or stuffs fetchmail.
+# 3 Talking to sendmail
+#
+use Socket;
+sub hx;
+sub getreply;
+$timeout=1;
+$RemoteHost = $ARGV[0];shift;
+$RemotePort = $ARGV[0] || 110;shift;
+($PRname,$PRaliases,$PRport,$PRproto) = getservbyname($RemotePort,'tcp');
+$PRport=$RemotePort unless $PRport;
+$proto=getprotobyname($PRproto);
+$RemoteIP = inet_aton $RemoteHost or die "Can't resolve $RemoteHost";
+$that = pack 'Sna4x8',AF_INET, $PRport, $RemoteIP;
+socket(REMOTESITE,AF_INET,SOCK_STREAM,$proto)
+ or die "Can't create socket to $RemoteHost: $!\n";;
+connect(REMOTESITE, $that) or die "Can't connect: $!\n";
+select(REMOTESITE);$|=1;select STDOUT;
+$rin = $win = $ein = '';
+vec($rin,fileno(REMOTESITE),1) = 1;
+#vec($win,fileno(REMOTESITE),1) = 1;
+$ein = $rin | $win;
+getreply;
+while ($L=<STDIN>)
+{
+ chomp $L;
+ print REMOTESITE $L . "\r\n";
+ print "send: " . $L . "\n";
+ getreply;
+}
+print REMOTESITE "Quit\r\n";
+getreply;
+#print <REMOTESITE>;
+close REMOTESITE;
+exit;
+# P
+sub hx
+{
+ $N=$_[0];shift;
+ $S=$_[0];shift;
+ return "$N(" . unpack("h", $S) . ") ";
+}
+sub getreply
+{
+ while ('x')
+ {
+ ($nfound,$timeleft) = select($rout=$rin, undef, $eout=$ein, $timeout);
+ last if $nfound == 0;
+# print "nf($nfound) tl($timeleft) " . hx("rin",$rin) . hx("rout", $rout) . hx("ein",$ein) . hx("eout",$eout) . "\n";
+ $Reply= <REMOTESITE>;
+ print "recv: " . $Reply;
+ last if $Reply eq '';
+ $Reply =~ s/[\r\n]*//;
+ last if $Reply eq '.';
+ }
+}
+