Server IP : 85.214.239.14 / Your IP : 3.142.198.108 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /usr/bin/ |
Upload File : |
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use Getopt::Long; use Pod::Usage; $Data::Dumper::Sortkeys = 1; $Data::Dumper::Quotekeys = 0; use lib 'lib'; use Mail::DMARC::PurePerl; my %command_line_options = ( 'domain:s' => \my $domain, 'verbose' => \my $verbose, ); GetOptions (%command_line_options); $verbose = 1 if ! defined $verbose; $domain ||= $ARGV[0]; $domain or pod2usage; my $dmarc = Mail::DMARC::PurePerl->new; $dmarc->verbose($verbose); $dmarc->header_from($domain); my $policy = $dmarc->discover_policy() or die "no DMARC policy published for $domain\n"; print Dumper( $policy ); if ( $policy->rua ) { print "\n"; my $uri_count = $dmarc->has_valid_reporting_uri( $policy->rua ); print "valid report URI: "; print $uri_count ? "yes\n" : "no\n"; }; exit; __END__ =pod =head1 NAME dmarc_lookup - look up DMARC policy for a domain =head1 SYNOPSIS dmarc_lookup example.com [ --verbose ] =head1 DESCRIPTION Query the DNS for a DMARC policy for a (sub)domain. Displays any found results as the DNS record as a perl object. In the simplest case, where the domain name in the email From header matches the I<Organizational Domain>, this is roughly equivalent to the following commands: dig +short _dmarc.example.com TXT print $_->txtdata."\n" for Net::DNS::Resolver->new(dnsrch=>0)->send('_dmarc.example.com','TXT')->answer; When the domain name in the email From header (header_from) is not an Organizational Domain (ex: www.example.com), an attempt is made to determine the O.D. using the Mozilla Public Suffix List. When the O.D. differs from the header_from, a second DNS query is sent to _dmarc.[O.D.]. =head1 EXAMPLES A DMARC record in DNS format looks like this: v=DMARC1; p=reject; adkim=s; aspf=s; rua=mailto:dmarc@example.com; pct=100; DMARC records are stored as TXT resource records in the DNS, at _dmarc.example.com. Other ways to retrieve a DMARC record for a domain are: =head1 SEE ALSO L<Mail::DMARC::Policy> =head1 AUTHORS =over 4 =item * Matt Simerson <msimerson@cpan.org> =item * Davide Migliavacca <shari@cpan.org> =item * Marc Bradshaw <marc@marcbradshaw.net> =back =cut