
Email deliverability for automated and AI senders is harder than it looks — not because the rules are different, but because the failure modes compound faster at machine scale. A human sender who makes a mistake sends 50 bad emails. An agent misconfigured at 3 AM sends 50,000 before anyone notices. This post covers the mechanisms that matter: authentication infrastructure, IP reputation, content signals, and the behavioral patterns that make automated sending look credible rather than spammy.
Why automated senders face higher scrutiny
Receiving MTAs (mail transfer agents) treat volume, velocity, and consistency as reputation signals. Human senders naturally vary — they pause, batch by timezone, write differently each time. Automated senders do the opposite: constant velocity, homogeneous content, predictable scheduling. These patterns overlap heavily with bulk spam and phishing operations, so spam filters weight them negatively by default.
Google's Postmaster Tools data shows that sender domain reputation drops fastest when complaint rates exceed 0.10% (their published threshold for bulk senders). At machine volume, even a 0.1% complaint rate on 500,000 emails per day is 500 complaints — enough to trigger automated suppression at Gmail. The math works against you unless you build reputation defensively from the start.
Three specific behaviors mark automated senders as suspicious to receiving infrastructure:
- Sudden volume ramps — Going from 0 to 10,000 emails/day overnight looks like a compromised account or botnet.
- Uniform send cadence — Emails sent at exactly 60-second intervals look like cron jobs, not humans. They are cron jobs, but you don't want that to be obvious.
- Template fingerprinting — Identical HTML structure across thousands of messages lets spam filters classify the entire stream from a single sample.
Authentication: SPF, DKIM, and DMARC are non-negotiable
Authentication doesn't improve deliverability directly — it prevents deliverability from collapsing. Without it, receiving servers have no way to verify that the IP sending on behalf of notifications@yourapp.com is actually authorized to do so.
SPF (Sender Policy Framework) is a DNS TXT record that lists the IPs and domains authorized to send mail for your domain. A typical record:
v=spf1 include:mailsai.com ip4:203.0.113.42 -all
The -all (hard fail) at the end tells receiving servers to reject mail from any source not listed. Use ~all (soft fail) only during testing. SPF has a 10-DNS-lookup limit — exceeding it silently breaks authentication.
DKIM (DomainKeys Identified Mail) adds a cryptographic signature to each outgoing message. The sending server signs with a private key; the receiving server verifies with the public key published in DNS at selector._domainkey.yourdomain.com. For AI agents sending at volume, use 2048-bit RSA keys (1024-bit is deprecated). Rotate selectors every 6-12 months.
DMARC (Domain-based Message Authentication, Reporting & Conformance) ties SPF and DKIM together and tells receiving servers what to do when authentication fails:
v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@yourdomain.com; pct=100
p=quarantine sends failing mail to spam. p=reject drops it entirely. Start with p=none (monitor mode) for 2-4 weeks before enforcing. The rua tag gives you aggregate reports — XML files sent daily that show authentication pass/fail rates by source IP. Parse them. They tell you if a misconfigured agent is sending unauthenticated mail before your reputation takes the hit.
For agents sending from subdomains (agent.yourdomain.com), DMARC alignment requires the From: header domain to match the SPF or DKIM signing domain. A common failure: the agent sends from agent.yourdomain.com but DKIM signs with yourdomain.com using a different organizational domain — check that your d= tag aligns.
IP reputation: shared vs. dedicated infrastructure
Shared IP pools are fine for low-volume transactional mail — OTPs, password resets — where you're relying on the provider's aggregate reputation. For AI agents sending at scale or with novel content patterns, shared IPs create a problem: another tenant's behavior affects your reputation.
Dedicated IPs give you control over your own reputation, but they require warming. A cold IP with no sending history looks identical to a spammer's freshly provisioned server. Receiving MTAs like Gmail, Outlook, and Yahoo maintain IP-level reputation scores, and a cold IP starts neutral-to-suspicious.
IP warming schedule (conservative, for a target of 50k/day):
| Week | Daily Volume | Notes |
|---|---|---|
| 1 | 200–500 | Highly engaged recipients only |
| 2 | 1,000–2,000 | Monitor bounce/complaint rates |
| 3 | 5,000–10,000 | Expand to broader list |
| 4 | 20,000–30,000 | Watch Postmaster Tools |
| 5+ | Full volume | Only if reputation is stable |
During warming, send exclusively to your most engaged recipients — people who have opened or clicked recently. Inbox placement on a warm IP depends on the receiving server seeing consistent positive engagement signals (opens, replies, moves-to-primary) before it builds trust.
For AI agents with unpredictable volume, a workflow that fires 100 emails one hour and 10,000 the next, dedicated IP warming is particularly important. Volume spikes on a shared IP can tank a pool that otherwise has good reputation. Mails.ai's dedicated IP infrastructure is built specifically for this pattern, where agent workloads drive irregular volume rather than predictable bulk sends.
Content signals that trigger spam filters
Modern spam filters (SpamAssassin, Google's ML classifiers, Microsoft SmartScreen) don't just pattern-match keywords. They evaluate structural features of the message.
HTML-to-text ratio — Emails with large amounts of HTML and minimal visible text score poorly. If your agent sends heavily templated HTML with a single line of dynamic content, the filter sees a template. Include a plain text multipart/alternative part and make it substantive, not just [Your email client doesn't support HTML].
Link density — Multiple tracked links, especially shortened URLs or redirect chains, are a spam signal. If your agent sends notification emails with 8 utm_-tagged links, consolidate them. One primary CTA link beats six.
Domain reputation in body — The domains in your email body are reputation-checked independently of your sending domain. If your agent links to a domain previously associated with spam (common with URL shorteners), the entire message takes a hit. Use your own domain for redirects.
Homogeneity across sends — If every email from your agent has identical <body> structure with only one variable field, Bayesian classifiers can label all of them from a single example. Vary your templates, not just the personalization tokens.
From name and address consistency — Changing From: names or addresses frequently signals address rotation, a common spam tactic. Keep sender identity stable. For agents that send from multiple addresses (e.g., one per workflow), use consistent patterns like workflow-name@agent.yourdomain.com.
List hygiene and bounce handling
Hard bounces — permanent delivery failures (5xx SMTP codes) — destroy IP reputation faster than almost anything else. A 2% hard bounce rate on a major ISP can get your IP blocklisted within hours.
For automated senders, bounce handling isn't just list cleanup — it's a real-time feedback loop that your agent must process. The mechanism:
- Your sending infrastructure returns a bounce event (via webhook or SMTP DSN)
- Your agent receives the
5xxerror code and recipient address - The address is immediately suppressed — not queued for retry, not logged for later
- Suppression is checked before any subsequent send to that address
Common codes to handle:
550 5.1.1— Mailbox does not exist (hard bounce, suppress immediately)552 5.2.2— Mailbox full (soft bounce, retry with backoff, max 3 attempts)421 4.7.0— Temporary connection throttling (back off and retry, don't suppress)550 5.7.1— Policy rejection, often spam (suppress, review content)
Soft bounces (4xx) should be retried with exponential backoff — typically 1 hour, 4 hours, 24 hours, then suppress. Never retry on the same 15-minute schedule your agent fires on; ISPs throttle IPs that hammer against temporary failures.
For AI agents processing inbound email, the bounce loop closes cleanly: bounces come in as structured webhook events, the agent parses the DSN, extracts the original message ID, and updates its suppression list before the next workflow cycle.
Sending rate and behavioral patterns
ISPs implement connection-level rate limiting. Gmail limits inbound connections from a single IP; Microsoft 365 throttles based on messages per connection. Violating these limits triggers temporary deferrals (4xx responses), which eat queue time and delay delivery without actually blocking anything — but repeated violations increase the probability of outright rejection.
Practical limits for automated senders:
- Gmail: ~10 messages per SMTP connection; no more than 10 concurrent connections per IP
- Microsoft 365 (EXO): 30 messages/minute from a single IP for unknown senders; 1,500/hour max
- Yahoo/AOL: Connection throttling starts around 100 messages/minute per IP
Distribute sends across time windows proportional to your recipients' timezones. An agent sending 10,000 emails at 00:00 UTC will hit Microsoft's throttle limits hard because most business recipients are on Exchange Online. Stagger the queue.
The other behavioral signal worth managing is your sending schedule's relationship to complaint rates. Complaint rates spike when recipients don't recognize the sender, which happens when there's a long gap between sign-up and first email. For agents that enroll users and then trigger email weeks later, a re-engagement message reminding the user why they're receiving it significantly reduces spam complaints.
Monitoring reputation in production
Authentication setup gets you in the door. Ongoing monitoring keeps you there.
Tools to run continuously:
- Google Postmaster Tools — Free, requires domain verification. Shows domain reputation (Good/Medium/Low/Bad), IP reputation, spam rate, DMARC compliance, and delivery errors. Check weekly at minimum, daily during volume ramps.
- Microsoft SNDS (Smart Network Data Services) — Shows complaint rate and filter verdicts for your IPs sending to Outlook/Hotmail. Register your IP range.
- MXToolbox — Blocklist monitoring across 100+ lists. Set up alerts for your sending IPs.
- DMARC aggregate reports — Parse the
ruaXML reports. Libraries likeparsedmarc(Python) make this programmatic.
For AI agent email infrastructure, the monitoring loop should be automated: ingest Postmaster Tools data via their API, alert if domain reputation drops below "Medium", and pause agent sends if complaint rate exceeds 0.08% (below Google's 0.10% hard threshold, giving you headroom to investigate).
flowchart LR
A[Agent sends email] --> B[MTA delivers]
B --> C[Postmaster Tools API]
B --> D[DMARC rua report]
B --> E[Bounce webhook]
C --> F[Reputation monitor]
D --> F
E --> G[Suppression list]
F --> H{Reputation OK}
H -- yes --> A
H -- no --> I[Pause sends and alert]
Unsubscribe and compliance infrastructure
CAN-SPAM requires a functional unsubscribe mechanism in commercial email. GDPR requires it in all email to EU residents. Gmail and Yahoo's 2024 bulk sender requirements made one-click unsubscribe (List-Unsubscribe-Post header) mandatory for senders above 5,000 messages/day to Gmail.
The header looks like:
List-Unsubscribe: <mailto:unsub@yourdomain.com?subject=unsub-abc123>, <https://yourdomain.com/unsub?token=abc123>
List-Unsubscribe-Post: List-Unsubscribe=One-Click
The List-Unsubscribe-Post header tells Gmail's UI to show a one-click unsubscribe button. When a user clicks it, Gmail sends a POST request to your HTTPS URL — your agent must process this synchronously and suppress the address before the next send cycle.
For AI agents, unsubscribes are particularly important because agents can re-engage the same address from different workflow branches. Your suppression list must be global across all agent workflows, not per-workflow. A user who unsubscribes from one agent-generated email should be suppressed from all of them.
Frequently Asked Questions
Does using a subdomain for agent email protect my main domain reputation?
Yes, partially. Sending from agent.yourdomain.com isolates reputation at the subdomain level for Postmaster Tools and some ISP reputation systems. Your main domain's SPF/DKIM setup still needs to be correct. The tradeoff: agent.yourdomain.com starts with no reputation history, so it behaves like a new sender. It also has lower inherent trust than a domain with years of clean sending history. Use subdomains for agent traffic once your main domain has established reputation, not as a shortcut around warming.
How do AI-generated email bodies affect spam filter scoring?
LLM-generated text is grammatically clean and topically coherent, which actually reduces the kind of word-salad signals that naive spam filters caught. The risk is homogeneity at scale — if your agent generates emails using a consistent prompt structure, the outputs will share syntactic patterns that classifiers can fingerprint. Vary your prompts and templates. Also, AI-generated text at volume has started to appear on blocklists based on content classifiers trained specifically to detect it — keep the content relevant and contextual rather than generic.
What SMTP response codes should trigger immediate IP rotation?
None should trigger automatic IP rotation — that's a spam tactic, and rotation without warming makes things worse. A 421 4.7.0 from Gmail means slow down; a 550 5.7.1 means your content or IP is being rejected by policy. Rotation doesn't fix either. Instead: 421 → back off and retry; 550 5.7.1 → pause sends, review content and IP reputation, check blocklists, then resume after remediation.
How should agents handle DMARC aggregate reports programmatically?
DMARC aggregate reports (RUA) are gzip-compressed XML files sent to the address in your rua= tag. Parse them with a library — parsedmarc for Python, dmarc-report-parser for Node — and store results in a time-series database. Key fields to track: auth_results.dkim.result, auth_results.spf.result, policy_evaluated.disposition, and the source IP. Alert when you see DKIM failures or reject dispositions from IPs you don't recognize — that's either a misconfigured agent or someone spoofing your domain.
Is there a minimum warm-up period before an agent can send at full volume?
Five to six weeks is the practical minimum for a dedicated IP reaching 50k+ emails/day. Below 10k/day, three weeks may be sufficient if complaint and bounce rates stay low throughout. The calendar time matters less than the cumulative sent volume and engagement signals received. An IP that sent 100k emails over six weeks with 0% complaints and 40% open rates will have better reputation than one that sent the same volume in two weeks with 0.5% complaints.
Do AI agents need different deliverability infrastructure than standard transactional email?
Yes, for a few specific reasons. Agents send at irregular volumes (workflow-driven, not scheduled), which requires infrastructure that handles burst without reputation damage — typically a warm dedicated IP with queue management. Agents also generate more diverse content patterns than transactional email (OTPs are highly templated; agent replies are not), which means content-level filtering is more relevant. And agents often send bidirectionally, meaning inbound parsing and classification is as important as outbound deliverability — a complete email infrastructure for agents needs both sides working together.