#!/usr/bin/perl # # testmail < file # # sender - source e-mail address # recipient - destination e-mail address # hostname - remote mail server to test # file - e-mail message # # copyright 2004 danny howard # # May be freely redirectibuted and modified, with proper attribution. # (BSD-style open source license) use IO::Socket; my $from = $ARGV[0]; my $rcpt = $ARGV[1]; my $host = $ARGV[2]; my $host_me = `hostname`; chomp $host_me; die "Usage:\n\n$0 < file\n\n" unless( $from && $rcpt && $host ); my $sock = IO::Socket::INET->new( Proto=>"tcp", PeerAddr=>$host, PeerPort=>"smtp(25)") or die "$0: connection to $host failed: $@\n"; $SIG{'ALRM'} = sub { die "$0: timeout waiting for socket I/O\n"; }; $sock->autoflush(1); my ($rcv, $snd); $rcv = $sock->getline(); print $rcv; $snd = "HELO $host_me\r\n"; $sock->print($snd); print $snd; $rcv = $sock->getline(); print $rcv; $snd = "MAIL FROM:$from\r\n"; $sock->print($snd); print $snd; $rcv = $sock->getline(); print $rcv; $snd = "RCPT TO:$rcpt\r\n"; $sock->print($snd); print $snd; $rcv = $sock->getline(); print $rcv; $snd = "DATA\r\n"; $sock->print($snd); print $snd; $rcv = $sock->getline(); print $rcv; while( ) { my $ln = $_; $ln =~ s/\n/\r\n/; $sock->print($ln); } $snd = "\r\n.\r\n"; $sock->print($snd); print $snd; $rcv = $sock->getline(); print $rcv;