Email providers

What a provider needs to carry it

Any email provider can carry Agent Emailing if it does three things. This page lists what a provider must and should support, describes which kinds of provider do so today, and explains how to test one.

The provider never signs anything and is never trusted to have checked anything. It carries an attachment and delivers it unchanged.

Required

What a provider must support

  • 1. Send an attachment unchanged

    The sender chooses the attachment's media type and filename, and the bytes arrive unchanged after decoding.

    Section 11.2

  • 2. Deliver an attachment unchanged

    The receiving side can get the attachment's exact bytes, from the raw message or as an attachment download.

    Section 11.2

  • 3. Sign with DKIM aligned to the sender's domain

    Every message is DKIM-signed with the signing domain aligned to the From domain. A domain the provider manages is enough.

    Sections 6.4 and 11.2

Recommended

What a provider should support

  1. Push delivery of inbound mail: a webhook, a websocket, server-sent events, or IMAP IDLE. Polling works, but it adds delay.
  2. At-least-once delivery with a stable event identifier, so a receiver can tell a retry from a new email.
  3. Inbound authentication results: SPF, each DKIM signature with its domain and result, and DMARC with alignment. Bridged mode needs these.
  4. Threading fields on sending, or a reply operation that sets them, so people see one thread.
  5. Custom headers, at least Auto-Submitted, then the optional hint headers.
  6. A custom sending domain, so an organization can send from its own domain.
  7. Delivery status reporting for bounces and deferrals.
  8. Keeping inbound mail for at least seven days, the mailbox window.
  9. Leaving the text part unchanged, with no added footer or banner. Software that checks the human part warns when the text was changed.

Kinds of provider

Which kinds of provider meet it

This table describes kinds of provider, not products. The names in the last column are examples for reference, linked to their own documentation. They are not recommendations.

  • usually
  • varies
  • rarely
KindRequired itemsPush deliveryAuthentication resultsCustom headersExamples
Inbox services built for agentsAn inbox per agent, created through an interface. usually usually webhooks, websockets or server-sent events varies varies from any header to a short list AgentMail, Primitive, Nylas Agent Accounts, Mailtrap, Hostinger Agentic Mail, Robotomail
Sending services that also receiveBuilt for application mail, with an inbound feature. usually usually webhooks varies usually Resend, Mailgun, Postmark, SendGrid
Cloud mail infrastructureRaw sending and receiving that you assemble yourself. usually usually notifications to your code usually usually, though some set their own Message-ID Amazon SES
Mail routed to code at the network edgeInbound mail runs a function you write. usually usually the function runs for each message varies varies Cloudflare Email Service
A person's own mailbox, through an interfaceThe agent uses a mailbox a person already has. usually usually varies usually Gmail API, with low daily sending limits (500 a day for a personal account, 2,000 for a work account) and agent mail mixed into a person's own
A mail server you runYour own SMTP and IMAP servers. usually usually IMAP IDLE usually usually Any standard mail server. You keep its reputation and deliverability yourself.

From their documentation

What some providers document today

Each entry below says what the provider's public documentation said on 29 October 2026, with a link to it. Providers change, so check their documentation before relying on an entry. Every provider listed here documents the first two required items. Check how each one signs mail from your domain with DKIM in its own documentation. The list is in alphabetical order.

ProviderAttachmentsExact bytes on receiptPush deliveryCustom headersNotes
AgentMail Chosen content type; 6 MB per request inline, 10 MB per message over SMTP The raw message by download link Signed webhooks, websockets, IMAP IDLE A headers map on sending Inbound messages carry SPF, DKIM and DMARC results. Custom domains on paid plans.
Amazon SES You build the raw message The raw message, stored to S3 Notifications to your code Yes, in the raw message Sets its own Message-ID and Date (documentation), which section 3.6 allows for.
Cloudflare Email Service Raw message on reply, or SMTP The raw message in a Worker A Worker runs for each message In a raw reply; forwarding adds only X- headers Outbound messages up to 5 MiB, inbound up to 25 MiB (limits).
Mailgun Yes The raw message, posted by a route Routes post to your URL Parameters that start with h: Sends from your own domain.
Nylas Agent Accounts Yes, or a raw message The raw message on request Webhooks custom_headers on sending A hosted inbox per agent, on a Nylas domain or your own (product page).
Primitive Chosen content type; up to 100 files and 30 MiB The raw message, with a SHA-256 for it and for each attachment Signed webhooks, hosted functions Only Auto-Submitted, X-Auto-Response-Suppress and Precedence Detailed SPF, DKIM and DMARC results. New agent accounts start able to reply only. Custom domains.
Resend Yes, up to 40 MB per email The raw message by download link Webhooks, with the content fetched afterwards A headers object on sending Sends from your own domain.

Not yet checked against their documentation: Hostinger Agentic Mail, Mailtrap, Postmark, Robotomail, SendGrid, and smaller inbox services.

For builders

One adapter per provider

A bridge, or an agent's runtime, that should work with any provider puts a small adapter in front of each one. The adapter turns the provider's interface into four operations: say what the provider supports, send one email, receive inbound mail, and report a sent email's delivery status. It never changes the bytes of the envelope or of a file.

The full interface is in section 11.4 of the specification.

Test a provider

The conformance fixtures

The fixtures are email files with really signed envelopes, and a list of cases that says what each one must produce. The keys are published test keys and control nothing.

The carrier test

A provider passes when it carries 01-request.eml from one of its addresses to another, and the receiving side recovers an envelope whose canonical form equals the one in cases.json, an agenda.txt whose SHA-256 equals the one listed there, and a text part whose digest equals the one the envelope signs. The sending side may rebuild the email through the provider's own interface, as long as it attaches the envelope and the file unchanged and leaves the text unchanged.

The reference checker

check-fixtures.mjs is a small reference receiver. Download the conformance folder, with lib.mjs and mail.mjs beside it, and run it with Node.js 20 or later. It needs nothing else installed.

node conformance/check-fixtures.mjs
# pass  e01  01-request.eml
# ...
# all 19 cases pass