Email deliverability
Landing in the inbox (not spam) comes down to authenticating your sending domain. This guide walks through the three DNS records every sender needs — SPF, DKIM, and DMARC — plus how to verify them in Resend and warm up a new domain.
1. Add & verify your domain in Resend
Before anything else, add your sending domain in the Resend dashboard (Domains → Add Domain). Resend generates a set of DNS records unique to your domain — you copy those into your DNS provider (Cloudflare, Namecheap, Route 53, etc.), then click Verify. Send from a subdomain like mail.yourdomain.com or send.yourdomain.com so your root domain's reputation stays independent.
2. SPF — authorize who can send
SPF (Sender Policy Framework) is a TXT record listing which servers are allowed to send mail for your domain. Resend gives you an SPF (or MX + SPF) record to add. It looks roughly like:
Type: TXT
Name: send (or the subdomain Resend shows)
Value: v=spf1 include:amazonses.com ~allGotcha: a domain may have only one SPF record. If you already send through another provider, merge the include: mechanisms into a single record rather than adding a second SPF line.
3. DKIM — cryptographically sign your mail
DKIM (DomainKeys Identified Mail) attaches a signature that proves the message wasn't tampered with and really came from your domain. Resend provides one or more CNAME (or TXT) records — add all of them exactly as shown:
Type: CNAME
Name: resend._domainkey (Resend shows the exact host)
Value: <the target Resend gives you>Don't let your DNS provider append the domain twice (some auto-add it to the Name field). DKIM is the single most important record for inbox placement.
4. DMARC — set a policy & get reports
DMARC tells receiving servers what to do when SPF/DKIM fail, and where to send aggregate reports. Add a TXT record on _dmarc.yourdomain.com. Start relaxed, then tighten:
Type: TXT
Name: _dmarc
Value: v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com; fo=1p=none— monitor only (start here for a week or two).p=quarantine— send failures to spam once you've confirmed alignment.p=reject— the goal: reject unauthenticated mail.
Gmail and Yahoo now require a DMARC record for bulk senders, so don't skip this one.
5. Verify everything
- In Resend, the domain should show a green Verified status once DNS propagates (can take up to ~48h, usually minutes).
- Send a test to mail-tester.com for a 0–10 spam score with a per-record breakdown.
- In Gmail, open a received test → Show original → confirm SPF, DKIM, and DMARC all say PASS.
6. Inbox-placement pitfalls
- No plaintext part. Always send a multipart email (HTML + text). PhluentLabs already does this.
- Spammy content. Avoid ALL-CAPS subjects, excessive
!!!, link shorteners, and image-only emails. - Missing unsubscribe. A visible unsubscribe link (and a list-unsubscribe header) is required for bulk mail — ours is built in.
- Sending to stale lists. High bounce/complaint rates tank reputation. Use double opt-in (the default here) and prune hard bounces.
- Cold domain. Never blast a brand-new domain — see warm-up below.
7. Warm up a new domain
Mailbox providers distrust sudden volume from an unknown domain. Ramp gradually over 2–4 weeks: start with your most-engaged subscribers (recent confirms, frequent openers) and grow volume steadily, watching bounce and complaint rates. Consistent cadence and strong early engagement build reputation faster than raw volume.
Managing PhluentLabs? Admins can see the configured sending domain and quick links in the deliverability panel.
Building an integration? See the subscribe API docs.