summaryrefslogtreecommitdiffstats
path: root/check-mail-addr.pl
diff options
context:
space:
mode:
authorFlorian Pritz <bluewind@xssn.at>2010-10-30 21:36:11 +0200
committerFlorian Pritz <bluewind@xssn.at>2010-10-30 21:36:11 +0200
commitac4624cd9bf1faf29cff2b04654bac9cbec03f48 (patch)
tree3ddad15ff880b381381255d5ae71c23fbfea0388 /check-mail-addr.pl
parente1c46fd66be4c56a738fd89b828b2e29b4eb676c (diff)
downloadbin-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-xcheck-mail-addr.pl47
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";
+