NetSendo Logo

Email deliverability for self-hosted senders (2026 guide)

Updated: · 12 min read · NetSendo Team

Cover: Email deliverability for self-hosted senders. SPF, DKIM, DMARC, bulk-sender rules and IP warming

What do Gmail, Yahoo and Outlook require from bulk senders in 2026?

All three big consumer mailbox providers now require authenticated mail from high-volume senders. You need SPF and DKIM, plus a DMARC record of at least p=none that passes through a domain aligned with your visible From address. Gmail and Yahoo also require one-click unsubscribe and a spam complaint rate below 0.3%. Outlook.com rejects non-compliant mail outright.

Requirement Gmail (personal accounts) Yahoo Outlook.com (outlook.com, hotmail.com, live.com)
Who it applies to Senders of close to 5,000+ messages/day to personal Gmail accounts. Once you cross it, you count as a bulk sender permanently "Bulk senders" (no number given on the page) Domains sending more than 5,000 emails/day
SPF Required (SPF and DKIM) Required (SPF and DKIM) Must pass
DKIM Required. Key of 1024 bits or longer Required Must pass
DMARC Required. "Your DMARC enforcement policy can be set to none" "Valid DMARC policy with at least p=none", and DMARC must pass "At least p=none"
Alignment From domain aligned with the SPF or DKIM domain From domain aligned with the SPF or DKIM domain Align with SPF or DKIM, "preferably both"
One-click unsubscribe Required for marketing and subscribed mail (RFC 8058, one HTTPS URL) Required. RFC 8058 POST "highly recommended", mailto accepted "Functional unsubscribe links" recommended
Honour unsubscribes Within 48 hours Within 2 days Not specified
Spam rate Below 0.30% in Postmaster Tools. Aim for under 0.10% Below 0.3% No number given
Reverse DNS (PTR) Valid forward and reverse DNS Valid forward and reverse DNS, "meaningful, non-generic" Not listed
TLS Required Not listed Not listed
Feedback / data Postmaster Tools Complaint Feedback Loop, "needed for all DKIM domains" SNDS and JMRP
Enforcement Rules since 1 Feb 2024. Stricter enforcement from Nov 2025, including temporary and permanent rejections In force (no date on the page) Since 5 May 2025: 550; 5.7.515 Access denied…

As of 2026-10-17. Sources: Google sender guidelines, Google FAQ, Yahoo best practices, Microsoft announcement.

Two details catch self-hosters out:

  • Gmail's spam rate is measured, not estimated. It is the rate shown in Postmaster Tools. Google tells senders never to reach 0.30% and to keep it under 0.10%.
  • Microsoft changed course. The April 2025 post first said non-compliant mail would go to Junk. The 29 April update replaced that with outright rejection from 5 May 2025, using the 5.7.515 error.

If you send fewer than 5,000 a day, Google still requires SPF or DKIM, valid PTR records, TLS, RFC 5322-formatted messages and a spam rate below 0.3% from all senders. Set everything up anyway. Volume grows, and the bulk-sender label never goes away.

Why is deliverability harder when you self-host?

Self-hosting doesn't change the rules. It changes who's responsible. On a SaaS platform the vendor runs the sending infrastructure and polices other customers on shared IPs. When you run your own platform, you own every link in the chain:

  1. DNS: SPF, DKIM, DMARC and, for your own IPs, PTR.
  2. The sending path: an SMTP relay or API (Amazon SES, Mailgun, SendGrid, Gmail API) or your own MTA.
  3. IP reputation: shared or dedicated, and warm-up if it's new.
  4. List quality: consent, bounces, suppression, inactive contacts.
  5. Monitoring: Postmaster Tools, SNDS, DMARC reports, blacklists.

The upside is control. No vendor suspends you for another customer's spam, and you can keep costs flat as the list grows. The downside is that nobody else will fix it.

How do SPF, DKIM and DMARC fit together?

SPF authorises the servers that may send for the envelope (bounce) domain. DKIM signs the message with a key published in your DNS. DMARC checks that at least one of them passes for a domain aligned with the From address people see, and tells receivers what to do when neither does.

How a receiving server authenticates a message: it checks SPF against the envelope MAIL FROM domain, verifies the DKIM signature using the selector record, looks up DMARC at _dmarc of the From domain and checks alignment, and checks the PTR record of the sending IP The four DNS lookups a receiver makes for one incoming message, and which domain each one uses.

Example DNS records

Below, example.com is your From domain, bounce.example.com is the envelope (Return-Path) subdomain, and 203.0.113.10 is a documentation IP. Replace all three.

; SPF + MX for a custom MAIL FROM subdomain on Amazon SES (values from the SES docs)
bounce.example.com.          TXT  "v=spf1 include:amazonses.com ~all"
bounce.example.com.          MX   10 feedback-smtp.eu-west-1.amazonses.com.

; SPF when you send from your own IP (e.g. NMI)
example.com.                 TXT  "v=spf1 ip4:203.0.113.10 ~all"

; DKIM: selector "ns1", public key generated by your provider or NMI (shortened)
ns1._domainkey.example.com.  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOC..."

; DMARC: start in monitoring mode and collect aggregate reports
_dmarc.example.com.          TXT  "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com"

; PTR for your own IP: set at the IP owner (hosting provider), not in your zone
10.113.0.203.in-addr.arpa.   PTR  mail1.example.com.

Rules that save hours of debugging:

  • One SPF record per name, and at most 10 DNS lookups. RFC 7208 counts include, a, mx, ptr, exists and redirect toward the limit, and going over returns permerror. ip4 and ip6 don't count.
  • SPF checks the envelope domain, not the From header. For SPF to count toward DMARC, the MAIL FROM domain must align with the From domain. That's why AWS recommends a custom MAIL FROM subdomain. With SES's default amazonses.com envelope, only DKIM can align.
  • Make DKIM do the alignment work. Sign with d=example.com, or a subdomain of it, using a 2048-bit key. Gmail needs at least 1024 bits.
  • Move DMARC from none to enforcement gradually. dmarc.org recommends this order: publish p=none, read the reports, fix every legitimate stream, then go to quarantine and finally reject.
  • PTR must match. The IP's reverse name should resolve forward to the same IP (Gmail and Yahoo both ask for valid forward and reverse DNS). Yahoo also wants a "meaningful, non-generic" name.

How do I add one-click unsubscribe (RFC 8058)?

You add two headers to every marketing message, serve an HTTPS endpoint that unsubscribes on a POST, and make sure DKIM signs both headers.

List-Unsubscribe: <https://news.example.com/unsubscribe/opaque-token>
List-Unsubscribe-Post: List-Unsubscribe=One-Click

RFC 8058 requirements:

  • List-Unsubscribe must contain one HTTPS URI. You can add a mailto URI too.
  • The message must have a valid DKIM signature that covers both headers. Without it, receivers shouldn't offer one-click.
  • The mailbox sends a POST with the body List-Unsubscribe=One-Click, without cookies or authorisation. Your endpoint must not answer with a redirect, and the URL itself has to identify the subscriber, typically with a signed token.
  • Then actually stop mailing them: within 48 hours for Gmail, 2 days for Yahoo.

In NetSendo: the changelog lists RFC 8058 support under Unreleased as of 17 October 2026, so it comes after v2.1.3. The signed unsubscribe URLs accept the one-click POST, and broadcasts and autoresponders sent to a list get both headers automatically. A List-Unsubscribe you set yourself takes precedence, and EMAIL_LIST_UNSUBSCRIBE=false turns the automatic headers off. On v2.1.3 and earlier the unsubscribe URL only answers GET, so check your version before you rely on it.

Should a self-hosted sender use a shared or a dedicated IP?

Use a shared IP unless you send large volumes on a steady schedule. A dedicated IP isolates your reputation from other senders, but a new IP has no reputation at all. It has to be warmed up and then kept busy.

Shared IP (SES default, most relays) Dedicated IP (e.g. SES standard) Your own IPs (e.g. NetSendo NMI)
Ready to use Immediately After warm-up After PTR setup and warm-up
Reputation Shared with the provider's other customers Yours alone Yours alone
Good for Low or irregular volume High, predictable volume High volume, full control
Minimum activity None Several hundred emails per mailbox provider in 24 hours, at least once a month (AWS) Same logic: steady volume
Extra cost Included $24.95 per IP per month (SES standard). Managed: $15/month + per-message fee Server and IPs from your host
You handle Content and list Warm-up, consistency PTR, blacklists, warm-up, MTA operations

As of 2026-10-17. Sources: Amazon SES dedicated IPs, SES pricing, NetSendo NMI docs.

AWS states it plainly: "If you don't plan to send large volumes of email on a regular and predictable basis, we recommend that you use shared IP addresses." NetSendo has no sending limits of its own and works with any of these paths. You can connect SMTP (SES, Mailgun or your own server), the Gmail API, SendGrid or the built-in NMI MTA under Settings → Mailboxes (configuration docs).

If you plan to run your own IPs, first confirm that your hosting provider lets you set reverse DNS and allows outbound SMTP on port 25.

What does a safe IP warm-up schedule look like?

Raise daily volume gradually over roughly two to six weeks, mail your most engaged subscribers first, and slow down as soon as you see throttling or blocking. AWS says some providers trust a new IP "in around two weeks, while for others it may take up to six weeks". SES's own automatic warm-up for standard dedicated IPs "steadily increases over 45 days".

NetSendo's NMI ships a 28-day default schedule (NMI_WARMING_DAYS=28, auto-advancing daily):

Days Daily limit (NMI default)
1–3 50–200
4–7 500–2,000
8–14 5,000–20,000
15–21 30,000–60,000
22–28 80,000–100,000

Source: NetSendo NMI docs, checked 2026-10-17. This is a default, not a universal standard. Stretch it if your list is less engaged.

Bar chart of NetSendo NMI's default 28-day IP warm-up: daily limits rise from 50–200 messages in days 1–3 to 80,000–100,000 in days 22–28, on a logarithmic scale NMI's default warm-up ranges per phase, on a log scale. Each bar spans the minimum and maximum daily limit.

Warm-up rules that matter more than the exact numbers:

  • Engaged recipients first. Start with people who opened or clicked recently. AWS says this keeps the complaint rate low.
  • Watch bounces daily. If you see blocking or throttling messages (4xx deferrals, "rate limited"), hold or cut the volume for a day.
  • Don't spike after warm-up. AWS warns that large, sudden jumps get an IP blocked or throttled. After warm-up, keep sending around 1,000 emails a day to each provider you want to keep a reputation with.
  • One IP, one kind of mail. Keep marketing and transactional mail on separate IPs or pools, so a bad campaign can't hurt password resets.

How do I keep my list clean enough to stay under 0.3% complaints?

Mail only people who asked to hear from you, remove addresses that bounce, and stop mailing people who've stopped reading. Complaints come mostly from people who forgot they signed up or never did.

  • Use double opt-in for new signups. It stops typos, bots and malicious signups from reaching your list.
  • Process bounces automatically. NetSendo reads delivery reports from the bounce (Return-Path) mailbox over IMAP, marks hard bounces, counts soft bounces against a per-list threshold, and skips bounced and unsubscribed contacts at send time (per the changelog).
  • Keep a suppression list. Addresses on NetSendo's account-wide suppression list are skipped everywhere, including future imports.
  • Sunset inactive contacts. Tag people with no opens or clicks in 6–12 months, send one re-permission email, then stop. NetSendo's MCP server includes analyze_list_health, verify_list_emails and a clean_list that defaults to a dry run. See the MCP guide.
  • Never import bought or scraped lists. No warm-up schedule survives spam traps.
  • Make unsubscribing easier than complaining. Put a visible link in the footer and add one-click headers. People who can't find the link click "Report spam" instead.

Which tools should I use to monitor deliverability?

Use the mailbox providers' own dashboards, read your DMARC reports, and check blacklists. Third-party seed tests are useful, but the providers' own data comes first.

Tool What it shows Notes
Google Postmaster Tools Spam rate, reputation, authentication, delivery errors for mail to personal Gmail accounts Verify your domain with a TXT or CNAME record. Data can be missing on low-volume days
Yahoo Complaint Feedback Loop Complaints from Yahoo users Yahoo says an active CFL "is needed for all DKIM domains" (best practices)
Microsoft SNDS + JMRP Per-IP data for Outlook.com, plus reports when users mark your mail as junk For IP owners: request access to the IPs you're responsible for
DMARC aggregate reports (rua) Which IPs send as your domain and whether SPF/DKIM pass and align Use a report parser. Raw XML is hard to read
Blacklist (DNSBL) checks Whether your IP is listed on Spamhaus, SpamCop, Barracuda and others NMI checks every 24 hours by default and alerts on a listing

As of 2026-10-17.

NetSendo also lets you add custom headers per mailbox or per API send, for example Feedback-ID for Postmaster Tools' feedback loop.

How does NetSendo help with deliverability?

NetSendo gives you the controls. Whether mail reaches the inbox still depends on your list and your content. These features are documented in the NMI docs, the changelog and the configuration docs:

  • Any sending path. SMTP (Amazon SES, Mailgun, your own server), Gmail API, SendGrid, or NMI. NetSendo itself has no sending limits.
  • NMI (NetSendo Mail Infrastructure). An optional Haraka-based MTA started with docker compose --profile nmi up -d. It adds shared and dedicated IP pools, the 28-day warm-up schedule, automatic 2048-bit DKIM keys with DNS verification and optional rotation, DNSBL monitoring, and reputation thresholds. By default it pauses below a score of 50 and caps bounces at 5% and complaints at 0.1%.
  • Domain authentication helpers. An SPF generator that checks the lookup limit, a DMARC generator and wizard (none, quarantine, reject), and domain status checks.
  • Bounce handling and suppression. IMAP bounce processing, soft-bounce thresholds, list or global bounce scope, and an account-wide suppression list.
  • One-click unsubscribe. Automatic RFC 8058 headers are in the next release (see above).
  • Custom headers per account, list, mailbox or message.

The licence terms are on the pricing page. SILVER is a free licence for your own business, and you still pay for the server and sending. NetSendo is source-available, not open source. Here's the difference.

Deliverability checklist for self-hosted senders

  1. Send from your own domain, never a free-mail address. Use a subdomain such as news.example.com if you want to keep marketing reputation separate.
  2. Publish one SPF record per sending name and keep it under 10 lookups.
  3. Sign with DKIM (2048-bit) on a domain aligned with your From address.
  4. Use a custom MAIL FROM (bounce) subdomain so SPF can align too.
  5. Publish DMARC p=none with a rua address and read the reports weekly.
  6. On your own IPs, set PTR to a meaningful hostname that resolves back to the IP, and enable TLS.
  7. Add List-Unsubscribe + List-Unsubscribe-Post and process unsubscribes within 48 hours.
  8. Start on a shared IP. Move to a dedicated IP only with steady, high volume.
  9. Warm up new IPs over at least 2–4 weeks, engaged recipients first.
  10. Use double opt-in, automatic bounce processing and a suppression list.
  11. Sunset contacts with no engagement in 6–12 months.
  12. Register Postmaster Tools, Yahoo CFL and SNDS/JMRP. Keep the spam rate under 0.10%.
  13. Monitor blacklists and pause sending when bounce or complaint rates spike.
  14. Once the DMARC reports are clean, move to quarantine, then reject.

Moving from a SaaS tool? The self-hosted Mailchimp alternative guide covers migration. Mailboxes and environment variables are in the configuration docs.

Frequently asked questions

What are Gmail's bulk sender requirements?
Senders of about 5,000+ messages a day to personal Gmail accounts need SPF and DKIM, a DMARC record (p=none is allowed), a From domain aligned with SPF or DKIM, one-click unsubscribe for marketing mail, valid forward and reverse DNS, TLS, and a spam rate below 0.30% in Postmaster Tools, ideally under 0.10%.
Is DMARC p=none enough in 2026?
For the Gmail, Yahoo and Outlook.com bulk-sender rules, yes: all three accept p=none as long as DMARC passes through an aligned SPF or DKIM result. dmarc.org recommends using p=none to collect reports and then moving to quarantine and reject once your legitimate mail is accounted for.
Do I need a dedicated IP to send from a self-hosted platform?
Usually not. AWS recommends shared IPs unless you send large volumes on a regular, predictable schedule. A dedicated IP gives you your own reputation but needs warm-up and steady volume. AWS says to send several hundred emails per mailbox provider within 24 hours at least once a month.
How long does IP warm-up take?
AWS says two to six weeks, depending on the mailbox provider, and its automatic warm-up for standard dedicated IPs runs over 45 days. NetSendo's NMI uses a 28-day default schedule, from 50–200 messages a day in days 1–3 to 80,000–100,000 in days 22–28.
What is one-click unsubscribe (RFC 8058)?
It is a pair of headers, List-Unsubscribe with one HTTPS URL and List-Unsubscribe-Post: List-Unsubscribe=One-Click, that lets the mailbox show an unsubscribe button. The mailbox then sends a POST to that URL. The message must carry a valid DKIM signature covering both headers.
What happens if I don't meet Outlook's requirements?
Since 5 May 2025, Outlook.com rejects non-compliant mail from domains sending over 5,000 messages a day with the error '550; 5.7.515 Access denied, sending domain [SendingDomain] does not meet the required authentication level.'
Does NetSendo guarantee inbox placement?
No tool can. NetSendo handles authentication setup, bounces, suppression and, with NMI, dedicated IPs, warm-up and blacklist checks. Whether mail reaches the inbox still depends on your list, your content and how recipients react.

Try NetSendo on your own server

Self-hosted email & SMS marketing with a free Silver license. Install with Docker Compose in minutes.

Sources

  1. Google: Email sender guidelines · checked 2026-10-17
  2. Google: Email sender guidelines FAQ · checked 2026-10-17
  3. Google: Set up Postmaster Tools · checked 2026-10-17
  4. Yahoo Sender Hub: Sender best practices · checked 2026-10-17
  5. Microsoft Tech Community: Outlook's new requirements for high-volume senders (2 Apr 2025, updated 29 Apr 2025) · checked 2026-10-17
  6. Microsoft: Smart Network Data Services (SNDS) · checked 2026-10-17
  7. RFC 8058: Signaling One-Click Functionality for List Email Headers · checked 2026-10-17
  8. RFC 7208: Sender Policy Framework (SPF) · checked 2026-10-17
  9. dmarc.org: Overview · checked 2026-10-17
  10. Amazon SES: Dedicated IP addresses · checked 2026-10-17
  11. Amazon SES: Warming up dedicated IP addresses (standard) · checked 2026-10-17
  12. Amazon SES: Using a custom MAIL FROM domain · checked 2026-10-17
  13. Amazon SES pricing · checked 2026-10-17
  14. NetSendo: NMI (NetSendo Mail Infrastructure) docs · checked 2026-10-17
  15. NetSendo changelog · checked 2026-10-17