blob: a30e41c61cb3cc84186c9cb14d319fdae0a09e4b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package Utils::Email;
use Email::Address;
use Net::DNS::Resolver;
# DMARC stabbity stab
sub test_dmarc {
my $email = shift;
my $addr = (Email::Address->parse($email))[0];
return unless $addr;
my $domain = $addr->host;
my @answers = _send(Net::DNS::Resolver->new, "_dmarc.$domain", 'TXT');
@answers = map { $_->txtdata } @answers;
my $dmarc = join(' ', @answers);
return unless $dmarc =~ /p *= *reject/;
return 1;
}
# Same as send->answer, but follows one CNAME and returns only matching results
sub _send {
my ($resolver, $domain, $type) = @_;
my $packet = $resolver->send($domain, $type);
my @answers;
foreach my $rr ($packet->answer) {
if ($rr->type eq 'CNAME') {
push @answers, $resolver->send($rr->cname, $type)->answer;
} else {
push @answers, $rr;
}
}
return grep { $_->type eq $type } @answers;
}
1;
|