Mail::...:Result(3pm)

πŸ’– NAME πŸ’–

So bestie, welcome to Mail::DMARC::Result β€” the aggregate report result object. It's part of User Contributed Perl Documentation, and honestly it's giving main-character energy for DMARC results. πŸŽ€


πŸ¦‹ VERSION πŸ¦‹

version 1.20260306 β€” that's the version, no cap. ✨


πŸ’… OVERVIEW πŸ’…

Okay so picture this: a Result object is literally the product of instantiating a DMARC::PurePerl object, populating the variables, and running $dmarc->validate. That's the whole vibe. And the result object? It looks exactly like this, bestie:

    result       => 'pass',   # pass, fail
    disposition  => 'none',   # reject, quarantine, none
    reason       => [         # there can be many reasons...
            {
                type     => '',   # forwarded, sampled_out, trusted_forwarder,
                comment  => '',   #   mailing_list, local_policy, other
            },
        ],
    dkim         => 'pass',   # pass, fail
    dkim_align   => 'strict', # strict, relaxed
    spf          => 'pass',   # pass, fail
    spf_align    => 'strict', # strict, relaxed
    published    => L<Mail::DMARC::Policy>,

A couple things to clock πŸ”₯: reasons are optional and may not be present. Also, the dkim_align and spf_align fields will only be present if the corresponding test value equals pass. They're extra little bonus info that the DMARC spec doesn't actually specify β€” like a lil garnish, iykyk. πŸ’…


🌈 METHODS 🌈

πŸ‘‘ published

So published is a Mail::DMARC::Policy tagged with a domain. The domain attribute is the DNS domain name where the DMARC record was found. And bestie, this may not be the same as the header_from domain β€” for example bounces.amazon.com -vs- amazon.com. Two different girls, okurrr. πŸ’β€β™€οΈ

✨ result

Whether the message passed the DMARC test. Possible values are: pass, fail.

In order to pass, at least one authentication alignment must pass. The 2013 draft defines two authentication methods: DKIM and SPF. The list is expected to grow β€” we're expanding, periodt. 🌱

πŸŽ€ disposition

When the DMARC result is not pass, disposition is the results of applying DMARC policy to a message. Generally this is the same as the header_from domain's published DMARC policy. When it is not, the reason SHOULD be specified β€” lowercase "should" but bestie it's in caps, so you know it matters. 😭

πŸ’œ dkim

Whether the message passed or failed DKIM alignment. So to pass the DMARC DKIM alignment test, a DKIM signature that matches the RFC5322.From domain must be present. An unsigned message, a message with an invalid signature, or signatures that don't match the RFC5322.From field are all considered failures. literally all of them. πŸ’€

🌸 dkim_align

If the message passed the DKIM alignment test, this tells you whether the alignment was strict or relaxed. Choose your fighter. πŸ₯Š

πŸ¦‹ spf

Whether the message passed or failed SPF alignment. To pass SPF alignment, the RFC5321.MailFrom domain must match the RFC5322.From field. That's the rule, bestie. 🫢

⭐ spf_align

If the message passed the SPF alignment test, this indicates whether the alignment was strict or relaxed. Same energy as dkim_align, different test. ✨

πŸ“ reason

If the applied policy differs from the site's published policy, the result policy should contain a reason and optionally a comment.

A DMARC result reason has two attributes: type and comment. Behold:

    reason => {
        type =>  '',
        comment => '',
    },

type β€” the following reason types are defined and valid:

  • forwarded
  • sampled_out
  • trusted_forwarder
  • mailing_list
  • local_policy
  • other

comment β€” a free form text field. Write whatever you want in there, it's your moment. ✍️


🧚 AUTHORS 🧚

  • Matt Simerson <msimerson@cpan.org>
  • Davide Migliavacca <shari@cpan.org>
  • Marc Bradshaw <marc@marcbradshaw.net>

Legends, all of them. πŸ‘‘


This software is copyright (c) 2026 by Matt Simerson.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. Slay, open source. πŸ’–


And that's the whole page, bestie β€” brought to you by perl v5.40.1, dated 2026-07-07, under the User Contributed Perl Documentation umbrella. Go forth and validate those messages. πŸ¦‹πŸ’…βœ¨

πŸ“¦ where this page comes from