diff options
author | Florian Pritz <bluewind@xssn.at> | 2010-10-30 21:36:11 +0200 |
---|---|---|
committer | Florian Pritz <bluewind@xssn.at> | 2010-10-30 21:36:11 +0200 |
commit | ac4624cd9bf1faf29cff2b04654bac9cbec03f48 (patch) | |
tree | 3ddad15ff880b381381255d5ae71c23fbfea0388 /check-mail-addr.pl | |
parent | e1c46fd66be4c56a738fd89b828b2e29b4eb676c (diff) | |
download | bin-ac4624cd9bf1faf29cff2b04654bac9cbec03f48.tar.gz bin-ac4624cd9bf1faf29cff2b04654bac9cbec03f48.tar.xz |
check-mail-addr.pl: rewrite using IO::Socket::INET
Signed-off-by: Florian Pritz <bluewind@xssn.at>
Diffstat (limited to 'check-mail-addr.pl')
-rwxr-xr-x | check-mail-addr.pl | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/check-mail-addr.pl b/check-mail-addr.pl index f50ed3c..29f23c2 100755 --- a/check-mail-addr.pl +++ b/check-mail-addr.pl @@ -1,17 +1,50 @@ #!/usr/bin/perl use warnings; use strict; -use Mail::CheckUser qw(check_email last_check); +use IO::Socket::INET; use File::Basename; +use Net::Domain qw(hostfqdn hostdomain); +use Net::DNS; +use Data::Dumper; if(@ARGV != 1) { print "usage: ", basename($0), " <emailaddress>\n"; - exit 2; + exit; } -if(check_email($ARGV[0])) { - exit 0; -} else { - print last_check()->{reason}, "\n"; - exit 1; +autoflush STDOUT 1; + +sub post { + my $socket = shift; + my $command = shift; + my $ret; + + print " >> $command"; + print $socket $command; + while ($ret = $socket->getline) { + print "<< ".$ret; + $ret =~ /[0-9]([- ]).*/; + last if ($1 eq " "); + } + } + +my $email = $ARGV[0]; +$email =~ m/.*@(.*)/; +my $domain = $1; + +print "Getting MX for $domain\n"; +my @mx = mx($domain); + +print "Connecting to ".$mx[0]->exchange."\n"; +my $socket = IO::Socket::INET->new( + PeerAddr => $mx[0]->exchange, + PeerPort => 25, + Proto => "tcp") || die "Error: couldn't create socket."; + +print "<< ".$socket->getline; +post $socket,"EHLO ".hostfqdn()."\n"; +post $socket, "MAIL FROM:<>\n"; +post $socket, "RCPT TO:<$email>\n"; +post $socket, "QUIT\n"; + |