aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/Utils/Email.pm
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2015-11-16 11:15:10 +0100
committerMarius Halden <marius.h@lden.org>2015-11-16 11:15:10 +0100
commit1339a64632c441e4d7858bd5946738c9840c624d (patch)
tree0b1393ca9af05d1af690fbf6c569c195f4136e4c /perllib/Utils/Email.pm
parent17cc40a8a2387669984ae4a36bb0d30d889d1a07 (diff)
parent4fb5331abd2fa4c89ebeb89bc92a245fadd0aa19 (diff)
Merge branch 'fiksgatami-dev' into fiksgatami-prod
Oppgrader prod til 1.7
Diffstat (limited to 'perllib/Utils/Email.pm')
-rw-r--r--perllib/Utils/Email.pm37
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;