diff options
Diffstat (limited to 'contrib/poptest')
-rw-r--r-- | contrib/poptest | 84 |
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 '.'; + } +} + |