Add syntax checking for mail addresses.
* Add check against regexp from http://www.regular-expressions.info/email.html * Change documentation accordingly. * Bump version number to 0.5 Fixes #11. Signed-off-by: Thomas Hochstein <thh@inter.net>
This commit is contained in:
parent
9518c39417
commit
ea5d225aa4
|
@ -1,3 +1,11 @@
|
||||||
|
Version 0.5
|
||||||
|
|
||||||
|
* Add syntax check for mail addresses.
|
||||||
|
Change documentation accordingly.
|
||||||
|
Fixes #11.
|
||||||
|
Thomas Hochstein <thh@inter.net> Sat Jul 23 23:53:22 2011 +0200
|
||||||
|
|
||||||
|
|
||||||
Version 0.4
|
Version 0.4
|
||||||
|
|
||||||
* Add overrides for configuration (MAIL FROM/EHLO).
|
* Add overrides for configuration (MAIL FROM/EHLO).
|
||||||
|
|
14
checkmail.pl
14
checkmail.pl
|
@ -1,6 +1,6 @@
|
||||||
#! /usr/bin/perl -W
|
#! /usr/bin/perl -W
|
||||||
#
|
#
|
||||||
# checkmail Version 0.4 by Thomas Hochstein
|
# checkmail Version 0.5 by Thomas Hochstein
|
||||||
#
|
#
|
||||||
# This script tries to verify the deliverability of (a) mail address(es).
|
# This script tries to verify the deliverability of (a) mail address(es).
|
||||||
#
|
#
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
# It can be redistributed and/or modified under the same terms under
|
# It can be redistributed and/or modified under the same terms under
|
||||||
# which Perl itself is published.
|
# which Perl itself is published.
|
||||||
|
|
||||||
our $VERSION = "0.4";
|
our $VERSION = "0.5";
|
||||||
|
|
||||||
################################# Configuration ################################
|
################################# Configuration ################################
|
||||||
# Please fill in a working configuration!
|
# Please fill in a working configuration!
|
||||||
|
@ -92,6 +92,12 @@ if ($options{'f'}) {
|
||||||
my (%targets,$curstat,$status,$log,$message);
|
my (%targets,$curstat,$status,$log,$message);
|
||||||
foreach (@addresses) {
|
foreach (@addresses) {
|
||||||
my $address = $_;
|
my $address = $_;
|
||||||
|
# regexp taken from http://www.regular-expressions.info/email.html
|
||||||
|
# and escaping of "/" added two times
|
||||||
|
if ($address !~ /^(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i) {
|
||||||
|
printf(" > Address <%s> is syntactically INVALID.\n",$address) if !($options{'q'});
|
||||||
|
$curstat = 2;
|
||||||
|
} else {
|
||||||
my $domain = Mail::Address->new('',$address)->host;
|
my $domain = Mail::Address->new('',$address)->host;
|
||||||
printf(" * Testing %s ...\n",$address) if !($options{'q'});
|
printf(" * Testing %s ...\n",$address) if !($options{'q'});
|
||||||
$log .= "\n===== BEGIN $address =====\n";
|
$log .= "\n===== BEGIN $address =====\n";
|
||||||
|
@ -114,6 +120,7 @@ foreach (@addresses) {
|
||||||
$log .= $message . '.';
|
$log .= $message . '.';
|
||||||
};
|
};
|
||||||
$log .= "====== END $address ======\n";
|
$log .= "====== END $address ======\n";
|
||||||
|
};
|
||||||
$status = $curstat if (!defined($status) or $curstat > $status);
|
$status = $curstat if (!defined($status) or $curstat > $status);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -441,7 +448,8 @@ After configuring the script you may run your first test with
|
||||||
|
|
||||||
checkmail user@example.org
|
checkmail user@example.org
|
||||||
|
|
||||||
B<checkmail> will try to determine the mail exchanger(s) (MX)
|
B<checkmail> will check the address for syntactic validity. If the
|
||||||
|
address is valid, it will try to determine the mail exchanger(s) (MX)
|
||||||
responsible for I<example.org> by querying the DNS for the respective
|
responsible for I<example.org> by querying the DNS for the respective
|
||||||
MX records and then try to connect via SMTP (on port 25) to each of
|
MX records and then try to connect via SMTP (on port 25) to each of
|
||||||
them in order of precedence (if necessary). It will run through the
|
them in order of precedence (if necessary). It will run through the
|
||||||
|
|
Loading…
Reference in a new issue