state
$RhostClass
= {
"Aol"
=> [
".mail.aol.com"
,
".mx.aol.com"
],
"Apple"
=> [
".mail.icloud.com"
,
".apple.com"
,
".me.com"
],
"Cloudflare"
=> [
".mx.cloudflare.net"
],
"Cox"
=> [
"cox.net"
],
"Facebook"
=> [
".facebook.com"
],
"FrancePTT"
=> [
".laposte.net"
,
".orange.fr"
,
".wanadoo.fr"
],
"GoDaddy"
=> [
"smtp.secureserver.net"
,
"mailstore1.secureserver.net"
],
"Google"
=> [
"aspmx.l.google.com"
,
"gmail-smtp-in.l.google.com"
],
"GSuite"
=> [
"googlemail.com"
],
"IUA"
=> [
".email.ua"
],
"KDDI"
=> [
".ezweb.ne.jp"
,
"msmx.au.com"
],
"MessageLabs"
=> [
".messagelabs.com"
],
"Microsoft"
=> [
".prod.outlook.com"
,
".protection.outlook.com"
,
".onmicrosoft.com"
,
".exchangelabs.com"
,],
"Mimecast"
=> [
".mimecast.com"
],
"NTTDOCOMO"
=> [
"mfsmax.docomo.ne.jp"
],
"Outlook"
=> [
".hotmail.com"
],
"Spectrum"
=> [
"charter.net"
],
"Tencent"
=> [
".qq.com"
],
"YahooInc"
=> [
".yahoodns.net"
],
};
sub
name {
my
$class
=
shift
;
my
$argvs
=
shift
||
return
""
;
my
$rhostclass
=
""
;
my
$clienthost
=
lc
$argvs
->{
"lhost"
} ||
""
;
my
$remotehost
=
lc
$argvs
->{
"rhost"
} ||
""
;
my
$domainpart
=
lc
$argvs
->{
"destination"
} ||
""
;
FINDRHOST:
while
(
$rhostclass
eq
""
) {
for
my
$e
(
keys
%$RhostClass
) {
next
unless
grep
{
index
(
$_
,
$domainpart
) > -1 }
$RhostClass
->{
$e
}->@*;
$rhostclass
=
$e
;
last
FINDRHOST;
}
for
my
$e
(
keys
%$RhostClass
) {
next
unless
grep
{
index
(
$remotehost
,
$_
) > -1 }
$RhostClass
->{
$e
}->@*;
$rhostclass
=
$e
;
last
FINDRHOST;
}
for
my
$e
(
keys
%$RhostClass
) {
next
unless
grep
{
index
(
$clienthost
,
$_
) > -1 }
$RhostClass
->{
$e
}->@*;
$rhostclass
=
$e
;
last
FINDRHOST;
}
last
;
}
return
$rhostclass
;
}
sub
find {
my
$class
=
shift
;
my
$argvs
=
shift
||
return
undef
;
my
$rhost
= __PACKAGE__->name(
$argvs
) ||
return
""
;
$rhost
= __PACKAGE__.
"::"
.
$rhost
; (
my
$modulepath
=
$rhost
) =~ s|::|/|g;
require
$modulepath
.
'.pm'
;
return
$rhost
->find(
$argvs
);
}
1;