Skip to content

Email security check: SPF, DKIM and DMARC

SPF, DMARC, DKIM, MTA-STS, TLS-RPT, CAA, DNSSEC and nameserver redundancy.

Last reviewed

Weight in the score

20%

One of six modules, scoring policy v2.1.0

Sources

  • DNS

Email is the easiest way to impersonate an organisation. Anyone can send a message that claims to come from your domain. SPF, DKIM and DMARC are the records that let receiving mail servers tell a real message from a forged one, and they are published in public DNS, so they can be read from the outside.

We read those records and check whether they actually protect you, not only whether they exist. An SPF record that ends in +all authorises every server on the internet, and a DMARC policy of p=none asks receivers to take no action. Both look configured and neither stops spoofing.

The rest of the module covers the transport and the zone around your mail: whether MTA-STS is enforced, whether TLS reporting is set up, whether CAA limits who can issue certificates for you, whether DNSSEC is enabled, and whether you have enough nameservers. Mail-transport checks only apply to domains that receive mail.

Findings this module can raise

Every finding in a report says what was tested, why it matters, the impact and how to fix it. These are the findings this module can raise, most serious first. Terms are explained in the glossary.

Highseverity 70 to 89

  • 80

    SPF authorises all senders

    The all mechanism decides what receivers do with mail from servers not listed in the record. +all authorises the entire internet; no all at all leaves it neutral.

    How to fix it: End the record with -all (reject) once you are confident every legitimate sender is listed, or ~all (softfail) while you verify. Use your DMARC aggregate reports to find senders you have missed before tightening.

    What was tested and the impact
    What was tested
    The qualifier on the SPF record's all mechanism
    Impact
    Anyone can send mail claiming to be from your domain and pass SPF. This also breaks DMARC, which relies on SPF or DKIM alignment to make a pass/fail decision.
  • 70

    DMARC record missing

    DMARC builds on SPF and DKIM to provide email authentication and reporting

    How to fix it: Publish a DMARC TXT record at _dmarc.<your-domain> starting with v=DMARC1; p=none; rua=mailto:dmarc@<your-domain>. Monitor aggregate reports for 30 days, then graduate to p=quarantine and finally p=reject once SPF/DKIM are aligned for all legitimate senders.

    What was tested and the impact
    What was tested
    DNS DMARC record lookup
    Impact
    Missing DMARC leaves email authentication incomplete and vulnerable to spoofing

Mediumseverity 40 to 69

  • 65

    Insufficient nameservers

    Fewer than two nameservers means there is no redundancy in the one system every other service depends on. RFC 1034 has recommended at least two, on separate networks, since 1987.

    How to fix it: Add at least one more nameserver, ideally with a different provider or at minimum in a different network and location. Most managed DNS providers supply four by default; if you are running your own, this is a strong argument for moving to a managed service.

    What was tested and the impact
    What was tested
    The count of NS records for the domain
    Impact
    If the single nameserver becomes unreachable, the domain stops resolving entirely: website, email, and every API integration fail at once, and cached answers expire progressively so the outage spreads rather than appearing instantly. It is also trivially easy to overwhelm with traffic.
  • 60

    SPF record missing

    SPF prevents email spoofing by specifying authorized mail servers

    How to fix it: Publish an SPF TXT record at the apex of your domain. Start with v=spf1 include:<your-mail-provider> ~all (e.g. include:_spf.google.com for Google Workspace, include:spf.protection.outlook.com for M365). After 30 days of clean DMARC reports, harden to -all.

    What was tested and the impact
    What was tested
    DNS SPF record lookup
    Impact
    Without SPF, attackers can send convincing phishing emails from your domain
  • 60

    DNSSEC not enabled

    DNSSEC cryptographically signs DNS records to prevent spoofing

    How to fix it: Enable DNSSEC at your DNS provider (Route53, Cloudflare, and Google DNS all offer one-click enablement). Verify the DS record is published at your registrar so the signing chain is anchored at the TLD; until the DS is in place at the registrar, DNSSEC is configured but not actually validated.

    What was tested and the impact
    What was tested
    DNS DNSSEC validation
    Impact
    Without DNSSEC, DNS responses can be intercepted and modified
  • 55

    DMARC policy set to none

    DMARC is published but set to p=none, which asks receivers to report on failures while still delivering the mail. It is the correct place to start, and the wrong place to stop.

    How to fix it: Read your aggregate reports until every legitimate sender passes SPF or DKIM alignment, then move to p=quarantine (optionally with pct= to ramp gradually), and finally p=reject. Most domains stall at none indefinitely; treat this as a project with an end date rather than a permanent state.

    What was tested and the impact
    What was tested
    The policy (p=) value in the DMARC record
    Impact
    Spoofed mail from your domain is still delivered to recipients. You gain visibility through aggregate reports, but no protection: anyone can send as your domain and it will land in the inbox.
  • 50

    SPF record invalid

    An SPF record with a syntax error is not partially effective: receivers that cannot parse it generally treat it as permerror and ignore it entirely. The domain is left with no SPF protection while appearing configured.

    How to fix it: Validate the record with an SPF checker. The usual causes are more than one v=spf1 record on the domain (only one is permitted), exceeding the ten-DNS-lookup limit, or a stray character. Consolidate to a single record and use include: for third-party senders.

    What was tested and the impact
    What was tested
    Syntax of the published SPF TXT record
    Impact
    Spoofed mail claiming to come from your domain passes unchecked, and DMARC cannot reach a pass verdict through SPF alignment, weakening it too. The failure is silent: nothing warns you that the record you published is being discarded.
  • 50

    CAA record missing

    CAA records prevent unauthorized SSL certificate issuance

    How to fix it: Publish CAA records naming your authorized CA(s), e.g. 0 issue "letsencrypt.org" and 0 issue "digicert.com". Add 0 iodef "mailto:security@<your-domain>" so you receive notifications when issuance is attempted by a non-authorized CA.

    What was tested and the impact
    What was tested
    DNS CAA record lookup
    Impact
    Attackers could obtain fraudulent certificates for phishing sites
  • 45

    MTA-STS policy not enforced

    MTA-STS tells sending servers to require TLS for your domain. In "testing" mode they report failures but deliver anyway, so the policy provides no actual protection.

    How to fix it: Confirm from your TLS-RPT reports that legitimate senders are succeeding, then change the policy mode to enforce. Keep the same max_age so caches roll over cleanly.

    What was tested and the impact
    What was tested
    The _mta-sts TXT record and the published policy file
    Impact
    Mail can still be delivered over an unencrypted or downgraded connection, which is exactly what MTA-STS exists to prevent. The published policy gives a false impression of protection.
  • 45

    SPF record has no all mechanism

    The all mechanism decides what receivers do with mail from servers not listed in the record. +all authorises the entire internet; no all at all leaves it neutral.

    How to fix it: End the record with -all (reject) once you are confident every legitimate sender is listed, or ~all (softfail) while you verify. Use your DMARC aggregate reports to find senders you have missed before tightening.

    What was tested and the impact
    What was tested
    The qualifier on the SPF record's all mechanism
    Impact
    Anyone can send mail claiming to be from your domain and pass SPF. This also breaks DMARC, which relies on SPF or DKIM alignment to make a pass/fail decision.

Lowseverity 0 to 39

  • 30

    TLS reporting not configured

    TLS-RPT is where receiving servers send daily reports about failures to deliver mail to you over TLS.

    How to fix it: Publish a TXT record at _smtp._tls with v=TLSRPTv1; rua=mailto:.... Point it at a monitored mailbox or a reporting service; the reports are JSON and small.

    What was tested and the impact
    What was tested
    The _smtp._tls TXT record
    Impact
    Without it, a certificate expiring on your mail servers, or an active downgrade attack, produces no signal at all until users report missing mail.

Depends on the evidenceseverity set by what is found

The other modules

Sources