Mailtest.me

Deliverability guide

Do your emails land in the inbox or in spam? This guide reviews what the major providers' filters actually look at in 2026 — not the myths from the 2000s — then details SPF, DKIM and DMARC configuration backed by the RFCs, and explains how to set up your own SMTP server, on a VPS or with AWS SES. Every step can be verified with the spam test.

Table of contents

1. Content: what filters really look at 2. SPF, DKIM, DMARC, BIMI: authentication (RFC 7208, 6376, 8301, 7489) 3. Set up your own SMTP server on a VPS (Postfix + OpenDKIM) 4. Set up your SMTP server with AWS SES 5. The "ready to send" checklist

1. Content: what filters really look at

First, a clarification: the famous "trigger words list" (free, urgent, win...) is a myth dating back to the rule-based filters of the 2000s. Since then, Gmail, Outlook and similar providers use machine learning models trained on billions of messages. A single word no longer triggers anything: it's the whole set of signals that matters.

The real signals taken into account

What actually hurts inbox placement

The residual "old-school" patterns (ALL CAPS, !!!, $$$, "100% free", currency symbols in the subject) still count, but as a statistical correlation, not as an absolute rule.

The golden rules of content

List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: <https://votredomaine.com/desinscription>

The URI must use HTTPS and respond to a simple POST, with no navigation. A visible link in the body is required, and requests must be honored within 48 hours. Mailto links or a mere preferences page are not sufficient. Transactional messages (booking confirmation, password reset) are excluded from the one-click requirement.

The factual check: send your draft to a disposable address from the spam test. The score and the AI analysis (SPF, DKIM, DMARC, content, blacklists) tell you exactly where you stand — before sending to your real recipients.

2. SPF, DKIM, DMARC, BIMI: authentication

These mechanisms prove to the receiving server that your email genuinely comes from you. They are checked systematically, and Gmail requires them for any bulk sending. The RFCs below are authoritative — the figures quoted are taken from them.

2.1 SPF — RFC 7208

SPF publishes, as a TXT record, the list of IPs authorized to send for your domain. Mechanisms: ip4, ip6, a, mx, include, and the record always ends with all.

v=spf1 include:_spf.google.com ~all # e.g. sending via Google Workspace v=spf1 ip4:91.134.23.122 -all # e.g. dedicated server

2.2 DKIM — RFC 6376 + RFC 8301

DKIM cryptographically signs certain headers and the body; the public key is published as a TXT record on selector._domainkey.yourdomain.com.

mail._domainkey TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC..."

2.3 DMARC — RFC 7489

DMARC, published on _dmarc.yourdomain.com, tells the receiver what to do with messages that fail SPF/DKIM: none, quarantine or reject.

_dmarc TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@votredomaine.com; adkim=r; aspf=r"

2.4 BIMI — good to know, not essential

BIMI displays your logo next to your emails. A point of rigor: it's an IETF Internet-Draft (not an RFC), and it does not directly improve placement — it's a visual trust indicator.

ConfigurationResult for the receiver
Aligned SPF + DKIM + DMARC (reject)Maximum trust
SPF only, no DKIMPartial — spam risk at Gmail
None of the threeAlmost certainly in spam
A 10-second check: send an email to an address from the spam test — the report details SPF, DKIM and DMARC with the exact verdict of each mechanism and the fixes to apply.

3. Set up your own SMTP server on a VPS (Postfix + OpenDKIM)

A self-hosted SMTP gives you total control, but the infrastructure is demanding: PTR, SPF/DKIM/DMARC, TLS, and progressive IP warm-up. Without this, your IP will be blacklisted within a few days.

Step 1 — Install

sudo apt install postfix opendkim opendkim-tools

opendkim-tools provides opendkim-genkey — a classic pitfall: "command not found" without this package.

Step 2 — Configure OpenDKIM

# /etc/opendkim.conf — the settings that change everything: Mode sv # v = verification only by default; sv enables signing Domain votredomaine.com RequireSafeKeys true # refuses to sign if the private key is readable by others Socket inet:8891@localhost # then enable KeyTable, SigningTable, ExternalIgnoreList, InternalHosts

Step 3 — Generate the keys

sudo mkdir -p /etc/opendkim/keys/votredomaine.com sudo opendkim-genkey -b 2048 -d votredomaine.com -D /etc/opendkim/keys/votredomaine.com -s mail sudo chown -R opendkim:opendkim /etc/opendkim/keys sudo chmod 600 /etc/opendkim/keys/votredomaine.com/mail.private

-b 2048: complies with RFC 8301 and Google's recommendation. Then publish the value of the generated mail.txt file in the mail._domainkey TXT record (split into several strings if > 255 characters).

Step 4 — Hook up Postfix

# /etc/postfix/main.cf: smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept # SigningTable: *@votredomaine.com mail._domainkey.votredomaine.com # KeyTable: mail._domainkey.votredomaine.com votredomaine.com:mail:/etc/opendkim/keys/votredomaine.com/mail.private
sudo systemctl restart opendkim postfix opendkim-testkey -d votredomaine.com -s mail -vvv # validates the DNS publication

Step 5 — PTR, an absolute prerequisite

Google requires it for ALL senders: "The sending IP address must match the IP address of the hostname specified in the Pointer (PTR) record". The hostname must also have an A/AAAA record pointing to the same IP (forward DNS). Its absence or inconsistency produces 4.7.23/5.7.25 errors at Gmail. The PTR is configured in your hosting provider's panel (OVH, Hetzner, Scaleway...), not in your DNS.

Step 6 — TLS and port 25

Step 7 — Warm up and monitor

After each step, send a test email to the disposable address from the spam test: the report confirms SPF, DKIM, DMARC, blacklists and the SpamAssassin score in real time.

4. Set up your SMTP server with AWS SES

Amazon SES (Simple Email Service) outsources the infrastructure: no server to maintain, a reputation managed by AWS, and a pay-per-send cost ($0.10 per 1,000 emails). The trade-off: quotas to raise, identities to verify, and strict consent rules.

Step 1 — The sandbox, then production

Step 2 — Verify the domain

SES gives you the records to publish at your registrar: 3 DKIM records (CNAME) managed automatically, 1 MX (bounces), 1 SPF TXT. SPF and DKIM are therefore handled for you — the major advantage over a self-hosted VPS. All identities used in From/Source/Sender/Return-Path must remain verified, including in production.

Step 3 — SMTP credentials

Console SES → SMTP settings → Create SMTP credentials # generates an IAM user + a dedicated SMTP password email-smtp.eu-west-3.amazonaws.com:587 # STARTTLS email-smtp.eu-west-3.amazonaws.com:465 # implicit TLS
# Python example (smtplib) import smtplib from email.message import EmailMessage msg = EmailMessage() msg["From"] = "contact@votredomaine.com" msg["To"] = "client@exemple.com" msg["Subject"] = "Votre facture est disponible" msg.set_content("Bonjour, votre facture de septembre est en ligne.") with smtplib.SMTP("email-smtp.eu-west-3.amazonaws.com", 587) as s: s.starttls() s.login("VOTRE_UTILISATEUR_SMTP", "VOTRE_MDP_SMTP") s.send_message(msg)

Step 4 — Quotas and best practices

VPS or AWS: the choice

Self-hosted VPS (Postfix)AWS SES
CostIP + VPS (fixed)$0.10 / 1,000 emails
MaintenancePostfix, OpenDKIM, blacklists, PTRNone (managed)
IP reputationBuild it yourselfManaged by AWS
VolumeUnlimitedQuotas to raise
Ideal forHuge volume, total controlQuick start, low maintenance

5. The "ready to send" checklist

  1. SPF published, under 10 lookups, ending with ~all or -all (RFC 7208).
  2. DKIM signed with rsa-sha256, key ≥ 1024 bits (2048 recommended), selector published and testable (RFC 6376 + 8301).
  3. DMARC published with rua=, p=none minimum; SPF or DKIM alignment verified; goal p=quarantine then p=reject (RFC 7489).
  4. PTR valid and consistent with forward DNS (a Gmail requirement for everyone).
  5. TLS enforced on transmission.
  6. RFC 5322 format: Message-ID present, unique headers, simple From.
  7. One-click unsubscribe RFC 8058 for all marketing, honored within 48 h, visible link in the body.
  8. Complaint rate < 0.1% (Gmail), < 0.3% (Yahoo); bounce < 2% (hard < 1%); quarterly list cleaning.
  9. Progressive volume: IP + domain warm-up over 4-6 weeks targeting engaged recipients.
  10. Simple content: max 60:40 text/image, few clear links, zero misleading patterns (false Re:/Fwd:, hidden content).
  11. Monitoring: Postmaster Tools (Google), SNDS/JMRP (Microsoft), Spamhaus blacklists.
Last step, always the same: send a test email and analyze it with the spam test. The score doesn't lie.
@
Email verifier
Verify an email address validity (syntax, DNS, SMTP).
@
Spam test
Send an email to a disposable address and get a full deliverability score (SPF, DKIM, DMARC, content, AI).