#! /usr/bin/perl

# test Postmaster - rough draft version

# At least change this:
$myhost = 'insecurity.org';

use Net::Telnet;

    $ip = shift;
    $smtp = new Net::Telnet;
    $smtp->errmode("return");
    $openretval = $smtp->open(Host => $ip, Port => 25, Timeout => 10);

    if (!defined($openretval)) {
       print  " - Postmaster Test - CONN_REFUSED\nThe remote system refused the request.\n\n";
       exit(255);
    }

    ($prebanner, $banner) = $smtp->waitfor('/^\d\d\d .*$/');
    print "\nBanners seen: $prebanner $banner";

    print "\nHELO $myhost (send) ... ";
    $helo_retval = $smtp->print("HELO $myhost");
    if (!defined($helo_retval) or !$helo_retval) {
        print  " - Postmaster Send Test FAILED(HELO)\n";
        exit(1);
    }

    print "\nGetting HELO (response) ... ";
    ($prematch, $match) = $smtp->waitfor('/^\d{3}.*$/m');
    if (!defined($match) or $match !~ /^2/) {
        print  " - Postmaster Response Test FAILED(HELO)\n";
        exit(2);
    }

    print "\nMAIL From: <> (send) ... ";
    $rcpt_retval = $smtp->print("MAIL FROM: <>");
    if (!defined($rcpt_retval) or !$rcpt_retval) {
        print  " - Empty MAIL From Send Test FAILED(Mail From)\n";
        exit(3);
    }
 
    print "\nGetting MAIL From: <> (response) ... ";
    ($prematch, $match) = $smtp->waitfor('/^\d{3}.*$/m');
    if (!defined($match) or $match !~ /^2/) {
        print  " - Empty MAIL From Test FAILED(MAIL From)\n";
        exit(4);
    }

    print "\nRCPT To: <postmaster> (send) ... ";
    $rcpt_retval = $smtp->print("RCPT TO: <postmaster>");
    if (!defined($rcpt_retval) or !$rcpt_retval) {
        print  " - Postmaster Send Test FAILED(RCPT To)\n";
        exit(5);
    }
 
    print "\nGetting RCPT To: <postmaster> (response) ... ";
    ($prematch, $match) = $smtp->waitfor('/^\d{3}.*$/m');
    if (!defined($match) or $match !~ /^2/) {
        print  " - Postmaster Response Test FAILED(RCPT To)\n";
        exit(6);
    }

    print "\n";
    $rcpt_retval = $smtp->print("RSET");
    $rcpt_retval = $smtp->print("QUIT");
    print  " - OK.  Postmaster Test Successful...\n";


__END__

Exit status:
    > 0 (zero) is an Error, where

	 odd is send errors and
	even is response errors.

  1 = Error in HELO cmd send
  2 = Error in HELO response
  3 = Error in MAIL FROM <> cmd send
  4 = Error in MAIL FROM <> response
  5 = Error in RCPT TO <postmaster> cmd send
  6 = Error in RCPT TO <postmaster> cmd response

255 = Connection timed-out or was refused.
