diff options
author | Marius Halden <marius.h@lden.org> | 2015-11-16 11:15:10 +0100 |
---|---|---|
committer | Marius Halden <marius.h@lden.org> | 2015-11-16 11:15:10 +0100 |
commit | 1339a64632c441e4d7858bd5946738c9840c624d (patch) | |
tree | 0b1393ca9af05d1af690fbf6c569c195f4136e4c /perllib/Utils | |
parent | 17cc40a8a2387669984ae4a36bb0d30d889d1a07 (diff) | |
parent | 4fb5331abd2fa4c89ebeb89bc92a245fadd0aa19 (diff) |
Merge branch 'fiksgatami-dev' into fiksgatami-prod
Oppgrader prod til 1.7
Diffstat (limited to 'perllib/Utils')
-rw-r--r-- | perllib/Utils/Email.pm | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/perllib/Utils/Email.pm b/perllib/Utils/Email.pm new file mode 100644 index 000000000..a30e41c61 --- /dev/null +++ b/perllib/Utils/Email.pm @@ -0,0 +1,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; |