Deliverability

Bulk sender requirements checker

Check one domain against Google's and Yahoo's own published bulk-sender rules, with what neither can see named outright.

Free, no accountLive check

The domain mail is sent from, not the mail server.

Leave this empty to try the common selectors instead.

The IP your mail server sends from.

Try

Result

Fill in the form and press Check the requirements. The verdict and the detail appear here.

What this is

This bulk sender requirements checker runs SPF, DKIM, DMARC and forward-confirmed reverse DNS for one domain and lines each one up against the gmail yahoo bulk sender requirements, cited to the page each company actually publishes it on - never one company's number attributed to the other.

Google and Yahoo each publish their own rules for a sender crossing their own bulk threshold, and the two pages overlap on four things a domain can actually have checked from outside: SPF or DKIM (both, past Google's own 5,000-messages-a-day figure), a DMARC record, and forward-confirmed reverse DNS on the sending IP. Two more items both companies also require - a spam-complaint rate kept low, and TLS on the SMTP connection - cannot be read from outside at all, and this page says so on the same row rather than leaving them out.

The two pages are not the same page copied twice. Yahoo's own FAQ states plainly that it will not publish a volume threshold at all, which is why the 5,000-a-day figure belongs to Google alone - a number quoted for Yahoo under that heading is simply wrong.

How to read the result

Each requirement gets its own small block of three rows - what Google asks for, what Yahoo asks for, and what this domain actually does - so no part of the comparison is ever off the side of the screen, at any window width. The two blocks nothing outside can measure read "Not visible from outside" rather than a dash, since a tool that can't see something should say so, not guess at it.

The tree below those blocks is the evidence behind the forward-confirmed reverse DNS one: the sending IP, the hostname its PTR record names, and every address that hostname resolves back to - the one that matches the original IP is marked, and a second address next to it is a multi-homed host, not a second fault.

Our guides walk the same rules in prose, rule by rule: "What Google and Yahoo require from bulk senders, and how to prove you meet it" lines up every row above against both companies' own pages and names the parts no tool, including this one, can check.

Common mistakes

What goes wrong most often, and how to tell.

  • Quoting Google's 5,000-a-day figure as if Yahoo published it tooYahoo's own FAQ refuses to name a volume threshold at all - "we will not specify a volume threshold" - so a page or email that cites 5,000 messages a day as a Yahoo rule is quoting a number Yahoo never published.
  • Guessing the sending IP from the MX recordAn MX record names the host that *receives* mail for a domain, not the server that sends it. Forward-confirmed reverse DNS is a check on the sending IP, so a tool - or a person - that reads it off MX instead is checking the wrong machine entirely.
  • Treating "p=none" as a DMARC failure for a bulk senderGoogle's own page says the DMARC enforcement policy "can be set to none" and still satisfies its bulk-sender requirement - the record only has to exist and parse. A general review of DMARC maturity is a different question from whether this specific rule is met.

Questions

What people ask about this tool.

  • No - it is Google's own published figure for mail to Gmail accounts. Yahoo's sender best-practices page states the same four authentication requirements but never names a per-day number, and its own FAQ says outright that it will not specify a volume threshold at all.
  • Both are real requirements on Google's and Yahoo's own pages, so leaving them off entirely would make the comparison look more complete than it is. Each gets the same three-row block as the four checkable requirements, with "Not visible from outside" where the domain's own answer would be rather than being silently dropped.
  • It means the one piece of forward-confirmed reverse DNS that Google's and Yahoo's own pages both name as a requirement is not in place yet. Some receivers are stricter about it than others, but neither company's own page treats it as optional once a sender is at bulk volume.
  • Because that is exactly what Google's own page allows: "Your DMARC enforcement policy can be set to none." A record that exists and parses satisfies the bulk-sender rule even before it is tightened to quarantine or reject.

Sources

Every fixed value here comes from the provider’s own documentation. These pages change, so each says the day it was last read.

Use it from the API

The same check, as one request.

Request
curl -X POST https://resellerhq.com/api/tools/bulk-sender-requirements-checker \
  -H "Content-Type: application/json" \
  -d '{"domain":"clean.example","selector":"","ip":"93.184.216.40"}'
Response
{
  "tool": "bulk-sender-requirements-checker",
  "input": {
    "domain": "clean.example",
    "selector": "",
    "ip": "93.184.216.40"
  },
  "result": {
    "verdict": {
      "tone": "success",
      "headline": "clean.example meets what Google and Yahoo can check from outside",
      "summary": "SPF, DKIM, DMARC and reverse DNS all pass. Spam-complaint rate and live SMTP TLS are not checked here - see the two rows below."
    },
    "findings": [
      {
        "id": "dkim-key-type-recognised",
        "severity": "info",
        "title": "DKIM: 1024-bit RSA key",
        "detail": "The modulus decoded from \"p=\" is 1024 bits, read directly from the DER-encoded key rather than estimated from its length."
      },
      {
        "id": "spf-spf-record-found",
        "severity": "pass",
        "title": "SPF: SPF record found",
        "detail": "clean.example publishes \"v=spf1 ip4:93.184.216.40 ~all\", using 0 of the 10 DNS lookups RFC 7208 §4.6.4 allows."
      },
      {
        "id": "spf-softfail-all",
        "severity": "pass",
        "title": "SPF: \"~all\" soft-fails unlisted senders",
        "detail": "A soft fail tells a receiver an unlisted sender probably is not legitimate without demanding the message be rejected outright - the usual setting while confirming a record is complete, before tightening it to \"-all\"."
      },
      {
        "id": "dkim-dkim-record-found",
        "severity": "pass",
        "title": "DKIM: DKIM key published at selector \"google\"",
        "detail": "google._domainkey.clean.example publishes a rsa key."
      },
      {
        "id": "dmarc-dmarc-record-found",
        "severity": "pass",
        "title": "DMARC: DMARC record found",
        "detail": "_dmarc.clean.example publishes \"v=DMARC1; p=reject; rua=mailto:[email protected]\". A receiver that honours this rejects failing mail outright."
      },
      {
        "id": "fcrdns-confirmed",
        "severity": "pass",
        "title": "Forward-confirmed reverse DNS holds for 93.184.216.40",
        "detail": "Every PTR record for the sending IP names a hostname whose own A/AAAA records resolve back to it, which is exactly what Google's and Yahoo's own rules both require."
      }
    ],
    "parts": [
      {
        "kind": "text",
        "title": "What counts as a bulk sender",
        "body": "Google requires all of this once a sender passes 5,000 messages a day to Gmail addresses - Google's own published figure. Yahoo's sender best-practices page states the same four requirements but publishes no per-day threshold of its own; the 5,000-a-day number sometimes quoted for Yahoo is Google's, not Yahoo's. Under either threshold both companies still ask every sender for SPF or DKIM; what the blocks below hold to is the bulk bar, where each wants both."
      },
      {
        "kind": "facts",
        "title": "SPF",
        "rows": [
          [
            "Google",
            "Required past 5,000 a day"
          ],
          [
            "Yahoo",
            "Required for bulk senders"
          ],
          [
            "This domain",
            "looks sound"
          ]
        ]
      },
      {
        "kind": "facts",
        "title": "DKIM",
        "rows": [
          [
            "Google",
            "Required, key 1024-bit+"
          ],
          [
            "Yahoo",
            "Required, key 1024-bit+"
          ],
          [
            "This domain",
            "looks sound"
          ]
        ]
      },
      {
        "kind": "facts",
        "title": "DMARC",
        "rows": [
          [
            "Google",
            "Required; p=none is allowed"
          ],
          [
            "Yahoo",
            "Required, at least p=none"
          ],
          [
            "This domain",
            "looks sound"
          ]
        ]
      },
      {
        "kind": "facts",
        "title": "Forward-confirmed reverse DNS (FCrDNS)",
        "rows": [
          [
            "Google",
            "A PTR that resolves back"
          ],
          [
            "Yahoo",
            "Valid, non-generic PTR"
          ],
          [
            "This domain",
            "Confirmed"
          ]
        ]
      },
      {
        "kind": "facts",
        "title": "Spam-complaint rate",
        "rows": [
          [
            "Google",
            "Below 0.3% in Postmaster Tools"
          ],
          [
            "Yahoo",
            "Below 0.3%"
          ],
          [
            "This domain",
            "Not visible from outside"
          ]
        ]
      },
      {
        "kind": "facts",
        "title": "Live SMTP TLS",
        "rows": [
          [
            "Google",
            "TLS on the SMTP connection"
          ],
          [
            "Yahoo",
            "Not stated on Yahoo's page"
          ],
          [
            "This domain",
            "Not visible from outside"
          ]
        ]
      },
      {
        "kind": "tree",
        "title": "Forward-confirmed reverse DNS, the two hops",
        "nodes": [
          {
            "label": "93.184.216.40",
            "children": [
              {
                "label": "mail.clean.example",
                "children": [
                  {
                    "label": "93.184.216.40",
                    "tone": "success",
                    "note": "matches"
                  }
                ]
              }
            ]
          }
        ]
      }
    ],
    "lookups": [
      {
        "label": "TXT for clean.example",
        "value": "Cloudflare: 1 record"
      },
      {
        "label": "TXT for google._domainkey.clean.example",
        "value": "Cloudflare: 1 record"
      },
      {
        "label": "TXT for _dmarc.clean.example",
        "value": "Cloudflare: 1 record"
      },
      {
        "label": "PTR for 40.216.184.93.in-addr.arpa",
        "value": "Cloudflare: 1 hostname"
      },
      {
        "label": "A for mail.clean.example",
        "value": "93.184.216.40"
      }
    ],
    "limits": [
      "Spam-complaint rate lives in each sender's own Postmaster Tools account; nothing here can read it.",
      "Live SMTP TLS needs a real SMTP connection, which this tool never opens."
    ]
  }
}

This example uses a name RFC 2606 reserves for documentation, ending in .example, .test, .invalid or .localhost. None of them is a real domain, and nobody can register one.

Sell the mailboxes behind the mail you are getting delivered, under your own brand.

Get started

Company names and logos are trademarks of their owners, shown only to identify each service.