# Best email APIs for AI agents (2026)

Why I think AI Inbx is the best email API for products that give agents email, the bugs it saves you from, and when AgentMail, Nylas or Postmark fit better.

[Pau Kraft](https://paukraft.com)

Founder, AI Inbx · [@paukraft on X](https://x.com/paukraft)

5 November 2026 · 18 min read Updated 6 November 2026

TL;DR

I think AI Inbx is the best email API for products that give agents email: agent platforms, support desks, sales tools and any SaaS whose agents send and answer mail for its customers. Agents go wrong on the mail that isn't a clean reply, and AI Inbx handles that mail in the API instead of leaving it to your code:

-   **Replies read whole.** On AI Inbx a reply without reply headers stays on its thread, and answers typed inside the quote are kept. More
-   **Automated mail labelled.** Every inbound email has a category, and out-of-office return dates and verification codes arrive as fields. More
-   **Sending kept safe.** AI Inbx holds mail to the limits and sending hours you set, and suppresses replies asking to stop. More
-   **Customers kept apart.** Each customer's domains, pacing rules, suppression lists and reputation sit in its own space, and your platform-wide limits still cap all of them. More
-   **Every address works.** Nothing is created per address, and your users' Gmail and Outlook connect to the same API. More
-   **The bill follows emails.** No charge per address, inbox or mailbox: 300 addresses for 50 customers cost $59 a month on AI Inbx, against $149 to $500 on the APIs that price inboxes or accounts; only Sendmux, with all 50 customers on one team, costs less ($44.50). Costs
-   **Built for volume.** Less for the agent to read and no model call on automated mail, with pacing rule limits that grow with the plan. More

Another API is the better pick when one personal agent needs IMAP and SMTP (AgentMail), your users are on Exchange, iCloud, Yahoo or IMAP accounts (Nylas), you mostly send transactional mail (Postmark or Resend), or outbound goes through your customers' own accounts (Sendmux). Several have free plans, and with few addresses and high volume several cost less than AI Inbx (costs).

*I'm Pau, and I founded AI Inbx, so I'm not neutral, but I believe I've portrayed each provider fairly, including where it's the better pick. Everything said here about the other products is from their public docs and pricing pages as of November 2026, linked where it's used. If something is wrong or out of date, email me and I'll fix it.*

I didn't set out to start an email company. I built email agents that run in production for enterprises in the sourcing industry, processing thousands of emails a month. Most of that work went into the mail around the replies, and AI Inbx does that work in the API, so this post judges every API by it.

## How to choose

Six questions decide whether an agent product holds up with real customers' mail:

1.  **Does the agent read what was written?** Threads that hold without reply headers, and answers inside the quote kept.
2.  **Can it tell a person from a machine?** Out-of-office replies and verification emails labelled, with the return date or the code as a field.
3.  **Does sending stay safe as volume grows?** Limits you set, sending hours, and opt-outs honoured however they arrive.
4.  **Are customers kept apart?** Domains, rules, suppression lists and sending reputation per customer.
5.  **What does a new address cost?** An API call and a line on the bill, or nothing.
6.  **Whose mailboxes can it use?** Your domains, your users' Gmail and Outlook, or Exchange and IMAP accounts.

## How do they compare?

Both tables draw from the same fact files as every comparison on this blog, with a source link in every cell. Postmark, Mailgun and Amazon SES have no thread object and don't connect users' mailboxes, so they appear only in their own sections.

### Where they differ most

| Feature | AI Inbx | AgentMail | MailSlurp | Nuntly | Nylas | OpenMail | Resend | Sendmux |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Receiving |
| **Threads that hold without reply headers** Replies join their conversation even when they arrive without reply headers: a colleague answering from another address, a client that drops them, a changed subject. Partial: threads are grouped by reply headers, or by the mailbox provider's own threading, and nothing more is documented. | **Yes** Every email belongs to a thread, including replies that arrive without reply headers, from a colleague's address or under a changed subject; threads are listed, read and replied to through the API. Replies join their conversation even when a client mangles or drops the reply headers, a colleague answers from another address or the subject changes; a shared subject alone never merges two conversations. [1](https://docs.aiinbx.com/guides/threads) [2](https://docs.aiinbx.com/guides/receiving#threading) [3](https://aiinbx.com/features/threading) | **Partial** Threads are created automatically and can be listed, searched and read per inbox, per pod or across the organization. Replies without reply headers are not described as joining their thread. [1](https://docs.agentmail.to/threads) [2](https://docs.agentmail.to/knowledge-base/threaded-conversations) | **Partial** GET /emails/threads lists conversation threads inferred from Message-ID, In-Reply-To and References, and GET /emails/threads/{threadId}/items returns their messages. Replies without reply headers are not described as joining their thread. [1](https://api.mailslurp.com/v2/api-docs/) [2](https://www.mailslurp.com/llms.txt) | **Partial** Messages are grouped into threads by In-Reply-To and References; without a matching header, a message joins a thread in the same inbox whose normalised subject matches and that had activity in the last 7 days, otherwise a new thread starts. [1](https://nuntly.com/docs/guides/receiving-threads) | **Partial** For Google and Microsoft accounts the Threads API returns the provider's own Gmail threads and Outlook conversations; Nylas groups IMAP mail itself, and Agent Account replies are linked by In-Reply-To and References, with replies without those headers not described. [1](https://developer.nylas.com/docs/v3/email/threads/) [2](https://developer.nylas.com/docs/v3/agent-accounts/email-threading/) | **Partial** Threading matches In-Reply-To and References against earlier Message-IDs, and the docs state that a message with no match starts a new thread; threads can be listed per inbox and read in order. [1](https://docs.openmail.sh/concepts/threading) | **Partial** Inboxes (announced 2026-10-22) group emails sent and received in reply to each other into threads that can be listed, searched and replied to; the Chat SDK adapter threads by Message-ID, In-Reply-To and References, and replies without those headers are not described. [1](https://resend.com/docs/guides/inboxes/threads) [2](https://resend.com/blog/announcing-inboxes) [3](https://resend.com/docs/chat-sdk) | **Partial** The Mailbox API lists conversation threads and their messages, which carry in\_reply\_to and references; how replies without reply headers are grouped is not described. [1](https://sendmux.ai/docs/developer-tools/mailbox-api/threads) [2](https://sendmux.ai/docs/api/mailbox-api/list-mailbox-threads) [3](https://app.sendmux.ai/api/v1/openapi.json) |
| **Reply text, inline answers kept** Each inbound message comes with the newly written text separated from quoted history and signatures, and answers typed inside the quote are kept. Partial: the quote is removed or marked, but answers inside it are not kept or not documented as kept. | **Yes** Each email carries stripped\_text and stripped\_html without the quoted conversation, keeping answers typed inline into the quote, and segments marking written, quoted and signature parts; a sender's signature is kept the first time they use it in a thread. stripped\_text keeps answers typed into the quote next to the lines they answer, also when the mail client leaves the quote unmarked, as long as the answered message is on the thread. [1](https://docs.aiinbx.com/guides/receiving#what-was-written) [2](https://aiinbx.com/solutions/email-reply-parser) | **Partial** Every message has extracted\_text and extracted\_html without quoted history and trailing boilerplate; the sender's own signature is kept. When the sender answers between quoted lines, extracted\_text keeps the message whole so the answers are not lost; extracted\_html still cuts at the first quote. [1](https://docs.agentmail.to/reply-extraction) | **Not documented** The email schema has body, bodyExcerpt and textExcerpt fields; a field with the new text separated from quoted history is not documented. [1](https://api.mailslurp.com/v2/api-docs/) | **Not documented** Message content is served as HTML, plain-text or raw MIME download links; a field with quoted history and signatures removed is not documented. [1](https://nuntly.com/docs/guides/receiving-messages) [2](https://nuntly.com/docs/api-reference/messages/retrieve-message-content) | **Partial** Clean Conversations (PUT /messages/clean or the message.created.cleaned webhook) removes reply and forward content and signatures and returns the latest message; Nylas calls the cleaning heuristic, and whether answers typed inside the quote are kept is not described. [1](https://developer.nylas.com/docs/v3/email/parse-messages/) [2](https://developer.nylas.com/docs/cookbook/email/clean-messages/) [3](https://developer.nylas.com/docs/reference/notifications/messages/message-created-cleaned/) | **Partial** The MCP server's read\_thread tool strips quoted reply history, while the API and webhook fields carry the full body; whether answers typed inside the quote are kept is not described. [1](https://docs.openmail.sh/integrations/mcp) [2](https://docs.openmail.sh/pages/webhooks/events) [3](https://api.openmail.sh/openapi.json) | **No** The documented received-email and thread-email objects carry the full html and text bodies, with no field for the newly written text apart from the quoted history. [1](https://resend.com/docs/api-reference/emails/retrieve-received-email) [2](https://resend.com/docs/api-reference/inboxes/get-thread-email) | **Partial** The clean content endpoint strips quoted replies and signatures by default (strip\_quotes, strip\_signature); whether answers typed inside a quote are kept is not documented. [1](https://sendmux.ai/docs/developer-tools/mailbox-api/message-content) |
| **Out-of-office with return date** Out-of-office and other automatic replies are flagged on the message, with the day the sender is back and the colleague they name as fields. Partial: automatic replies are flagged, without those details. | **Yes** Every inbound email has a category such as human, out\_of\_office or auto\_reply, and an away reply carries the reason, return day and named contacts when it states them. An out\_of\_office or auto\_reply email carries unavailable with the reason (absent, left or unmonitored), back\_on for the first day back and the contacts the reply names, each when the reply states it. [1](https://docs.aiinbx.com/guides/receiving#categories) [2](https://aiinbx.com/solutions/auto-reply-detection) [3](https://docs.aiinbx.com/guides/receiving#what-automated-mail-asks-for) | **Not documented** The docs and message schema do not mention flagging out-of-office or other automatic replies. [1](https://docs.agentmail.to/api-reference/inboxes/messages/get) [2](https://docs.agentmail.to/events) | **Not documented** The docs and email schema do not mention flagging out-of-office or other automatic replies. [1](https://api.mailslurp.com/v2/api-docs/) [2](https://www.mailslurp.com/docs/emails/) | **Not documented** Received messages carry security and spam checks; flagging of out-of-office or other automatic replies is not documented. [1](https://nuntly.com/docs/guides/receiving-messages) [2](https://nuntly.com/docs/guides/receiving-webhooks) | **Partial** Automated replies to mail sent through Nylas are reported on Google and Microsoft grants as a message.bounce\_detected event with type automated\_reply, not a flag on the message, and Nylas states that detection doesn't extract return dates. [1](https://developer.nylas.com/docs/v3/email/send-email/) | **Partial** Each inbound message has a category (personal, automated, marketing, bounce, spam or malicious) and an auto\_replyable flag; the documented fields include no return date or alternative contact. [1](https://docs.openmail.sh/pages/webhooks/events) [2](https://api.openmail.sh/openapi.json) | **No** The documented received-email, thread-email and inbox.email.received objects have no field marking out-of-office or other automatic replies; the raw headers are returned. [1](https://resend.com/docs/api-reference/emails/retrieve-received-email) [2](https://resend.com/docs/webhooks/inboxes/email-received) | **Not documented** Flagging of out-of-office or other automatic replies is not documented. [1](https://sendmux.ai/docs/developer-tools/mailbox-api/message-content) [2](https://sendmux.ai/docs/webhooks/setup) |
| **Verification codes as fields** A verification email comes with its one-time code or confirmation link as fields on the message. | **Yes** A verification email carries verification.code and verification.link, both written in the email, on the email and its email.received event. [1](https://docs.aiinbx.com/guides/receiving#what-automated-mail-asks-for) | **No** The documented Get Message response has no field for a code or confirmation link; with AgentID, an assistant reads the verification email itself or signs the agent in without one. [1](https://docs.agentmail.to/api-reference/inboxes/messages/get) [2](https://docs.agentmail.to/agentid-in-assistants) | **Partial** POST /emails/{emailId}/codes extracts one-time codes on request (pattern, LLM or OCR) and returns the best code with ranked candidates, and GET /emails/{emailId}/links lists the links in an email; the email object itself carries no code field. [1](https://api.mailslurp.com/v2/api-docs/) [2](https://www.mailslurp.com/docs/emails/) | **No** The documented message fields (sender, recipients, subject, status, labels, attachment count, raw headers) include no field for a one-time code or confirmation link. [1](https://nuntly.com/docs/guides/receiving-messages) [2](https://nuntly.com/openapi.json) | **Partial** The Nylas CLI's otp get and otp watch commands return a 6-digit code found in recent mail; API messages carry no code field, and Nylas's Agent Account recipe extracts codes in your own code with regex and an LLM fallback. [1](https://developer.nylas.com/docs/cookbook/cli/extract-otp-codes/) [2](https://developer.nylas.com/docs/cookbook/agent-accounts/extract-otp-code/) | **No** The documented message.received fields and Message schema include no field for a one-time code or confirmation link; the MCP server's list\_unread\_threads tool filters out OTP mail as machine-generated. [1](https://docs.openmail.sh/pages/webhooks/events) [2](https://api.openmail.sh/openapi.json) [3](https://docs.openmail.sh/integrations/mcp) | **No** The documented received-email and thread-email objects have no fields for one-time codes or confirmation links. [1](https://resend.com/docs/api-reference/emails/retrieve-received-email) [2](https://resend.com/docs/api-reference/inboxes/get-thread-email) | **No** The OpenAPI message and clean content schemas list every field (no additional properties); extracted\_links returns the body's links, and no field holds a one-time code or marks a confirmation link. [1](https://app.sendmux.ai/api/v1/openapi.json) [2](https://sendmux.ai/docs/developer-tools/mailbox-api/message-content) |
| Mailboxes |
| **Any address on a domain** Mail to any address on a receiving domain is accepted without creating each address first. | **Yes** Once the inbound MX record resolves, mail to any address on the domain is accepted, plus addresses such as reply+ord\_8812@ included, with nothing registered per address. [1](https://docs.aiinbx.com/guides/receiving#receiving-on-a-domain) | **No** AgentMail's blog states it does not offer catch-all; each receiving address needs an inbox. [1](https://www.agentmail.to/blog/catch-all-vs-inbox-per-agent) [2](https://docs.agentmail.to/google-workspace) | **Yes** Each custom domain gets a catch-all inbox that receives mail not addressed to a specific inbox on the domain. [1](https://www.mailslurp.com/docs/custom-domains/) | **Yes** Enabling receiving creates a default catch-all inbox (\`\*\`) that takes mail for every address without its own inbox. [1](https://nuntly.com/docs/guides/receiving-inboxes) | **Not documented** Agent Accounts are created per address; the docs don't say what happens to mail for an address on the domain with no Agent Account. [1](https://developer.nylas.com/docs/v3/agent-accounts/provisioning/) | **No** Mail a verified custom domain accepts for an address with no inbox is dropped and recorded as inbound\_rejected\_no\_inbox in the policy audit log. [1](https://docs.openmail.sh/api-reference/policy/list-correspondent-policy-audit-events) [2](https://api.openmail.sh/openapi.json) | **Yes** Once the MX record is added, Resend receives email for any address at the domain. [1](https://resend.com/docs/dashboard/receiving/introduction) | **No** A catch-all mailbox is listed as a planned domain control; for now each address needs its own mailbox. [1](https://sendmux.ai/docs/domains/settings) |
| **Connect users' Gmail** Read and send from a user's existing Gmail or Google Workspace mailbox after they grant access. | **Yes** Users connect Gmail or Google Workspace over OAuth through your own Google OAuth app, from a hosted page, a link or the API; mail syncs in and can be sent as the account and its Send-as aliases. [1](https://docs.aiinbx.com/guides/mailboxes) [2](https://aiinbx.com/features/mailboxes) | **No** AgentMail gives each agent its own inbox; its docs describe no way to connect an existing Gmail or Google Workspace mailbox. [1](https://docs.agentmail.to/knowledge-base/what-is-agentmail) [2](https://www.agentmail.to/blog/best-email-api-for-ai-agents-2026) | **Yes** Connectors sync a Gmail or Google Workspace mailbox into a MailSlurp inbox and send through it; the connector docs use IMAP and SMTP with an app password, and the agent guide also names Google OAuth. [1](https://www.mailslurp.com/docs/connectors/) [2](https://www.mailslurp.com/docs/agents/) | **No** Nuntly sends and receives on domains you verify with it, and receives on a subdomain it provides (built on AWS SES); connecting a user's existing Gmail mailbox is outside that scope. [1](https://nuntly.com/llms.txt) [2](https://nuntly.com/docs/guides/receiving-overview) | **Yes** A Google connector lets users grant OAuth access to Gmail. [1](https://developer.nylas.com/docs/provider-guides/google/) | **No** OpenMail gives each agent a dedicated inbox it hosts, not a shared mailbox; connecting an existing Gmail account is not part of the product (an inbox can forward copies to Gmail). [1](https://openmail.sh/llms.txt) [2](https://api.openmail.sh/openapi.json) | **No** Inboxes live on your own verified domains; an existing mailbox can be forwarded into an inbox, and no Google account connection is documented. [1](https://resend.com/docs/guides/inboxes/create-inboxes) | **Partial** Gmail and Google Workspace accounts connect as sending accounts with the gmail.send scope only; reading their mail is not requested. [1](https://sendmux.ai/docs/sending/accounts/google-microsoft) |
| **Connect users' Outlook** Read and send from a user's existing Outlook or Microsoft 365 mailbox after they grant access. | **Yes** Users connect Outlook or Microsoft 365 over OAuth through your own Microsoft Entra app, from a hosted page, a link or the API; mail syncs in and can be sent as the account. [1](https://docs.aiinbx.com/guides/mailboxes) [2](https://aiinbx.com/features/mailboxes) | **No** AgentMail gives each agent its own inbox; its docs describe no way to connect an existing Outlook or Microsoft 365 mailbox. [1](https://docs.agentmail.to/knowledge-base/what-is-agentmail) [2](https://www.agentmail.to/blog/best-email-api-for-ai-agents-2026) | **Yes** Connectors sync an Outlook or Microsoft 365 mailbox over IMAP and SMTP (outlook.office365.com) with a password or app password and send through it. [1](https://www.mailslurp.com/docs/connectors/) [2](https://www.mailslurp.com/docs/agents/) | **No** Nuntly sends and receives on domains you verify with it, and receives on a subdomain it provides (built on AWS SES); connecting a user's existing Outlook mailbox is outside that scope. [1](https://nuntly.com/llms.txt) [2](https://nuntly.com/docs/guides/receiving-overview) | **Yes** The Microsoft connector covers Microsoft 365, Exchange Online, Exchange Server 2003+ and personal Outlook.com accounts, and an EWS connector covers Exchange on-prem. [1](https://developer.nylas.com/docs/provider-guides/microsoft/) [2](https://developer.nylas.com/docs/provider-guides/exchange-on-prem/) | **No** OpenMail gives each agent a dedicated inbox it hosts, not a shared mailbox; connecting an existing Outlook account is not part of the product. [1](https://openmail.sh/llms.txt) | **No** Inboxes live on your own verified domains; an existing mailbox can be forwarded into an inbox, and no Microsoft account connection is documented. [1](https://resend.com/docs/guides/inboxes/create-inboxes) | **Partial** Outlook and Microsoft 365 accounts connect as sending accounts with Mail.Send only; reading their mail is not requested. [1](https://sendmux.ai/docs/sending/accounts/google-microsoft) |
| Sending |
| **Configurable send limits** You set limits such as N per hour per sending address or per recipient domain, and the provider holds mail back to keep to them. | **Yes** Limit rules cap sends per rolling window for the rule, each sending address, sending domain, recipient or recipient domain, and hold the rest until there is room; plans set how many active rules a workspace holds. [1](https://docs.aiinbx.com/guides/pacing#rate-limits) [2](https://aiinbx.com/features/pacing) | **Not documented** Docs describe plan send limits per day and per 5 minutes and a warm-up schedule to follow yourself; limits you set per address or recipient domain are not documented. [1](https://docs.agentmail.to/knowledge-base/rate-limits) [2](https://docs.agentmail.to/email-deliverability) | **Not documented** A sending queue retries emails when the account hits temporary limits; customer-set limits per hour, sender or recipient domain are not documented. [1](https://www.mailslurp.com/docs/emails/) | **Partial** The Broadcast docs say delivery is paced by Nuntly; limits you set yourself per sender or recipient domain are not documented. [1](https://nuntly.com/docs/guides/broadcast-overview) [2](https://nuntly.com/docs/api-reference/rate-limits) | **Partial** For Agent Accounts a policy sets a daily send quota per account, and sends over it return HTTP 429 rather than being held; connected mailboxes follow their provider's limits. [1](https://developer.nylas.com/docs/v3/agent-accounts/policies-rules-lists/) [2](https://developer.nylas.com/docs/v3/agent-accounts/send-limits/) | **Not documented** OpenMail applies its own per-inbox burst limit (10/minute) and a new-recipient cap and rejects sends over them with a 429; limits you set yourself are not documented, and Enterprise caps are negotiated with OpenMail. [1](https://docs.openmail.sh/concepts/rate-limits) | **Not documented** Resend documents its own API rate limit (10 requests per second per team by default) and plan quotas; limits you set per address or recipient domain are not documented. [1](https://resend.com/docs/api-reference/rate-limit) | **Yes** Your own sending accounts take per-second, per-minute, per-hour and per-day quotas, and mail over an account's cap is held; the managed Amazon SES account's quotas cannot be edited. [1](https://sendmux.ai/docs/use-cases/cold-email-outreach) [2](https://sendmux.ai/docs/sending/accounts) |
| **Sending hours** You set the hours mail may go out, for example weekdays 9–17 in a timezone, and mail outside them waits. | **Yes** Hours rules set weekly sending windows in an IANA timezone, optionally opening and closing at a varying minute each day; mail outside them waits. [1](https://docs.aiinbx.com/guides/pacing#sending-hours) [2](https://aiinbx.com/features/sending-hours) | **Not documented** Docs suggest sending drafts at a chosen time with send\_at; account-wide sending hours are not documented. [1](https://docs.agentmail.to/drafts) | **Not documented** Individual emails can be scheduled; a setting for allowed sending hours is not documented. [1](https://www.mailslurp.com/docs/emails/) | **Not documented** Sending windows are not documented; individual emails can be timed with scheduledAt. [1](https://nuntly.com/docs/api-reference/emails/send-email) | **Not documented** The docs describe per-message send\_at scheduling; no setting for allowed sending hours was found. [1](https://developer.nylas.com/docs/v3/email/scheduled-send/) | **No** Not in the API reference: the send endpoint has no scheduling field and no sending-window setting is listed, so mail goes out when it is sent. [1](https://docs.openmail.sh/concepts/rate-limits) [2](https://docs.openmail.sh/api-reference/messages/send-email) | **Not documented** Individual emails can be scheduled for a time; a setting for allowed sending hours is not documented. [1](https://resend.com/docs/dashboard/emails/schedule-email) | **Not documented** Sending windows by time of day are not documented. [1](https://sendmux.ai/docs/sending/accounts) |
| **Opt-out replies suppressed** A reply asking not to be emailed again is recognised and the address is suppressed without your code reading it. | **Yes** A reply asking to stop is recognised as an opt-out and suppressed automatically, reported as email.unsubscribed with source reply. [1](https://docs.aiinbx.com/guides/suppressions#reacting-to-the-events) [2](https://docs.aiinbx.com/webhooks/events/email-unsubscribed) | **No** The docs tell you to read a reply's extracted\_text to decide whether it is an opt-out and then add the address to the send block list yourself. [1](https://docs.agentmail.to/knowledge-base/cold-outreach) [2](https://docs.agentmail.to/knowledge-base/account-suspended) | **Not documented** Bounced and List-Unsubscribe recipients are blocked from further sends; recognising an opt-out written in a reply is not documented. [1](https://api.mailslurp.com/v2/api-docs/) | **Not documented** The docs add addresses to the suppression list on permanent bounces and spam complaints and handle Broadcast unsubscribe links; recognising an opt-out written in a reply is not documented. [1](https://nuntly.com/docs/guides/broadcast-unsubscribe) | **No** Nylas states it doesn't ship unsubscribe handling or suppression lists. [1](https://developer.nylas.com/docs/cookbook/email/sendgrid-alternative/) | **Not documented** Suppression is documented for hard bounces, spam complaints and one-click unsubscribes; opt-outs written in a reply are not described. [1](https://docs.openmail.sh/concepts/suppressions) | **Not documented** Suppressions come from bounces, complaints and manual additions, and Broadcast unsubscribes from Resend's unsubscribe link; recognising an opt-out written in a reply is not described. [1](https://resend.com/docs/dashboard/emails/email-suppressions) [2](https://resend.com/docs/dashboard/contacts/managing-unsubscribe-list) | **Not documented** Recognising opt-out requests in replies is not documented; the cold outreach guide asks senders to settle their own suppression and opt-out handling. [1](https://sendmux.ai/docs/use-cases/cold-email-outreach) |
| **Bot opens filtered** Opens from privacy proxies and security scanners (such as Apple Mail Privacy Protection) are marked or separated from human opens. | **Yes** Every open and click event carries bot and bot\_reason, marking Apple Mail Privacy Protection fetches, security scanners and other automated hits. [1](https://docs.aiinbx.com/webhooks/events/email-opened#bot-detection) [2](https://docs.aiinbx.com/webhooks/events/email-clicked) [3](https://aiinbx.com/solutions/email-open-tracking) | **No** The docs say proxy and security-scanner image loads can register an open and advise treating very fast opens with suspicion. [1](https://docs.agentmail.to/knowledge-base/open-tracking) | **Not documented** The tracking pixel docs do not mention separating privacy-proxy or scanner opens. [1](https://api.mailslurp.com/v2/api-docs/) | **Yes** Open and click events carry an optional isBotEvent field (Likely or Unlikely); it does not change whether the event is counted. [1](https://nuntly.com/docs/guides/sending-webhooks) | **No** Nylas's docs say Apple Mail Privacy Protection preloads the pixel, so Nylas may report an open the recipient never made, and advise treating opens as a soft signal. [1](https://developer.nylas.com/docs/cookbook/use-cases/automate/automate-customer-onboarding/) [2](https://developer.nylas.com/docs/cookbook/use-cases/build/track-email-opens/) | **No** OpenMail does not track opens, so there are no opens to filter. [1](https://docs.openmail.sh/best-practices/email-deliverability) | **No** Resend's docs state that pre-delivery scanning and privacy features can trigger an open event without the recipient reading the email; no flag separating these opens is documented. [1](https://resend.com/docs/dashboard/domains/tracking) [2](https://resend.com/docs/webhooks/emails/opened) | **Not documented** Open reporting and bot-open filtering are not documented. [1](https://sendmux.ai/docs/webhooks/setup) |
| Platform |
| **Sending reputation per customer** Each of your customers' sending reputation is kept apart, so one customer's bounces or complaints don't pause another's mail. | **Yes** Each space sends on its own reputation: bounces and complaints count against the space the mail left from, and a space over the line is paused by itself; mailbox providers still judge every subdomain of one wildcard as that one domain. [1](https://docs.aiinbx.com/guides/spaces#one-reputation-per-space) [2](https://docs.aiinbx.com/concepts#space) | **Partial** AgentMail can suspend a single inbox or pod while the rest of the account keeps sending, but it weighs bounce and complaint signals across the organization's mail and can also suspend the whole account. [1](https://docs.agentmail.to/knowledge-base/account-suspended) | **Not documented** The API reports SES tenant sending and reputation status per MailSlurp user; whether environments or other resources within one account keep separate sending reputation is not documented. [1](https://api.mailslurp.com/v2/api-docs/) [2](https://www.mailslurp.com/docs/environments/) | **Not documented** The docs say high bounce or complaint rates may lead to suspension of the sending domain or account and keep one suppression list per organization; keeping each customer's reputation apart is not documented. [1](https://nuntly.com/docs/guides/observability-sending) [2](https://nuntly.com/docs/guides/broadcast-unsubscribe) | **Yes** Nylas tracks bounce and complaint rates and pauses sending per sending domain, and documents one Agent Account per customer on the customer's own domain with its own sender reputation; connected mailboxes send through each user's own provider. [1](https://developer.nylas.com/docs/v3/agent-accounts/send-limits/) [2](https://developer.nylas.com/docs/v3/agent-accounts/) [3](https://developer.nylas.com/docs/cookbook/email/choosing-an-email-api/) | **Yes** Reputation is tracked per inbox and per domain, and the reputation engine suspends a single inbox or pod without affecting the whole account; the account-wide cold-outreach cap is shared across pods. [1](https://docs.openmail.sh/pages/webhooks/events) [2](https://docs.openmail.sh/concepts/rate-limits) [3](https://docs.openmail.sh/best-practices/email-deliverability) | **Partial** Resend's multi-tenant guide says tenants in one account share its sender reputation and one tenant's poor sending can affect all of them; independent reputation takes a separate Resend account per tenant. [1](https://resend.com/docs/knowledge-base/setting-up-resend-for-multi-tenants) | **Not documented** Teams separate each customer's mailboxes, providers, logs and billing; whether bounces and complaints on managed sending are counted or acted on per team is not documented. [1](https://sendmux.ai/docs/account/teams-and-access) [2](https://sendmux.ai/docs/monitoring/deliverability) |
| Policy |
| **No charge per address** The price doesn't depend on how many addresses, inboxes or mailboxes you use; it follows email volume or a flat fee. | **Yes** Price follows emails per month; addresses are never counted or charged. Developer ($5/month) caps custom domains at 50 and connected mailboxes at 100; both are unlimited from Growth ($29/month). [1](https://aiinbx.com/pricing) [2](https://docs.aiinbx.com/guides/billing#domains-mailboxes-and-pacing-rules) | **No** Plans include 3, 10 or 150 inboxes, and on Developer and Startup each extra inbox is a $2/month add-on. [1](https://www.agentmail.to/pricing) | **No** Each plan includes a number of inboxes created per month (100 to 5,000) and inboxes kept (250 on Starter), and on Pro and Growth extra inboxes are billed at usage rates. [1](https://app.mailslurp.com/pricing/) | **Partial** Plans are priced by monthly email volume and include 1, 10, 100 or unlimited inboxes; the pricing page lists no charge per extra inbox. [1](https://nuntly.com/pricing.md) [2](https://nuntly.com/pricing) | **No** Plans include a set number of connected accounts and Agent Accounts, and each additional connected account is charged (+$2.25 per account on Essentials, +$2.00 on Pro monthly). [1](https://www.nylas.com/pricing/) | **No** Free has 3 inboxes as a hard cap; Pro includes 10 inboxes and then bills €1 per extra inbox per month. [1](https://openmail.sh/pricing) | **No** Every plan includes 3 inboxes and paid plans add more at $1 per inbox per month; sending and plain receiving on a verified domain are priced by email volume. [1](https://resend.com/pricing) | **Partial** No per-seat or per-mailbox fees, but each isolated customer is its own team at $7 a month on Pro, on top of usage billed per event; Free holds 2 mailboxes. [1](https://sendmux.ai/pricing/) |

Checked 5 November 2026 from each product's public docs and pricing. Spotted a mistake? Email [me@paukraft.com](mailto:me@paukraft.com).

"Partial" on threads means replies are grouped by reply headers or the mailbox provider's own threading, so a reply that arrives without them can split off.

### Everything else, with pricing

| Feature | AI Inbx | AgentMail | MailSlurp | Nuntly | Nylas | OpenMail | Resend | Sendmux |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Receiving |
| **Attachments as text, scans included** PDFs, documents and spreadsheets arrive with their content as text or Markdown, ready for an LLM, and scanned or image-only PDF pages are read too. Partial: text is extracted only from a PDF's text layer, only for some file types, or only on a separate request. | **Yes** PDFs, documents and spreadsheets come with prepared Markdown or text; scanned pages are read too and count against a monthly page allowance. [1](https://docs.aiinbx.com/guides/attachments) [2](https://docs.aiinbx.com/guides/billing#advanced-attachment-processing) | **Partial** Get Attachment returns a text\_url with text extracted from PDF, Word, Excel and text files up to 10 MB; PDF text comes from the text layer only, and the docs say scanned or image-only PDFs have no text. [1](https://docs.agentmail.to/reply-extraction) | **Partial** Text is extracted on a separate request to POST /attachments/{attachmentId}/text, with AUTO, NATIVE (text, Word, spreadsheets, PDFs with embedded text), OCR or LLM methods; it does not arrive with the email. [1](https://api.mailslurp.com/v2/api-docs/) [2](https://www.mailslurp.com/docs/ai-transformers/) | **Not documented** Attachments come with metadata and a temporary download URL; extracting their content as text is not documented. [1](https://nuntly.com/docs/api-reference/messages/list-message-attachments) [2](https://nuntly.com/docs/api-reference/messages/retrieve-message-attachment) | **No** Attachments download as raw bytes; Nylas's own recipe passes PDFs and images to your model to extract their content. [1](https://developer.nylas.com/docs/cookbook/email/parse-email-attachments/) | **Partial** Inbound attachments carry parsedText from PDFs, Office documents, CSV, text files and images, including scanned documents sent as images (OCR), up to 10 MB per file and 50,000 characters; reading scanned pages inside a PDF is not described. [1](https://docs.openmail.sh/concepts/attachments) | **No** Received attachments come as metadata plus a download\_url valid for 1 hour, from which your app downloads the content; extracted text is not among the documented fields. [1](https://resend.com/docs/dashboard/receiving/attachments) | **Partial** A separate request extracts an attachment of up to 7.5 MB as Markdown text at no extra charge; OCR is unavailable, so scanned pages are not read. [1](https://sendmux.ai/docs/developer-tools/mailbox-api/message-content) [2](https://sendmux.ai/docs/api/mailbox-api/request-attachment-text) |
| Mailboxes |
| **Subdomains for each customer** Each of your customers can get their own subdomain to send and receive on, without them editing DNS. | **Yes** After one wildcard domain such as \*.saas.com is verified, each customer's subdomain is created through the API with no DNS of its own, and can be placed in that customer's space. [1](https://docs.aiinbx.com/guides/domains#wildcards-and-subdomains) [2](https://aiinbx.com/features/wildcard-domains) | **Yes** With subdomains\_enabled and one wildcard MX record on a parent domain, inboxes can be created on any subdomain; they share the parent domain's DKIM key and sending identity. [1](https://docs.agentmail.to/knowledge-base/subdomain-inboxes) [2](https://www.agentmail.to/blog/custom-domains-for-thousands-of-agent-inboxes) | **Not documented** The custom domain docs describe verifying domains you control; giving each customer a provider-managed subdomain is not documented. [1](https://www.mailslurp.com/docs/custom-domains/) | **Not documented** Each organization gets one receiving-only provided subdomain at sign-up; giving each of your customers a subdomain without DNS edits is not documented. [1](https://nuntly.com/docs/guides/ai-agents) [2](https://nuntly.com/docs/api-reference/inboxes/create-inbox) | **Partial** Each customer subdomain is registered as its own domain with MX and TXT records that you publish, and plans include 1 (Essentials), 10 (Pro) or 20 (Pro annual) custom sending domains; nylas.email trial subdomains need no DNS and are documented for prototyping and demos. [1](https://developer.nylas.com/docs/v3/agent-accounts/dns-provider-setup/) [2](https://developer.nylas.com/docs/v3/agent-accounts/provisioning/) [3](https://www.nylas.com/pricing/) | **Partial** A custom domain, which can be a subdomain, can be scoped to one customer's pod; each domain is added and verified with its own DNS records. [1](https://docs.openmail.sh/concepts/pods) [2](https://docs.openmail.sh/concepts/custom-domains) | **Partial** Subdomains can be added through the Domains API, but each is added and verified individually with its own DNS records and counts toward the plan's domain limit. [1](https://resend.com/docs/dashboard/domains/introduction) [2](https://resend.com/docs/knowledge-base/setting-up-resend-for-multi-tenants) | **Not documented** Addresses on the shared myagent.mx domain need no DNS; per-customer subdomains without DNS edits are not documented. [1](https://sendmux.ai/docs/domains) |
| **IMAP and SMTP** Connect mailboxes over IMAP, or send and read through SMTP/IMAP credentials. | **No** AI Inbx is an HTTP API with no SMTP relay, and mailboxes connect over Google and Microsoft OAuth, not IMAP. [1](https://aiinbx.com/solutions/send-email-api) [2](https://docs.aiinbx.com/guides/mailboxes) | **Yes** AgentMail inboxes can be read over IMAP and sent from over SMTP, with the inbox address as username and an API key as password. [1](https://docs.agentmail.to/imap-smtp) | **Yes** Inboxes have IMAP and SMTP credentials for mail clients and libraries, and connectors link external mailboxes over IMAP and SMTP. [1](https://www.mailslurp.com/docs/imap-smtp/) [2](https://www.mailslurp.com/docs/connectors/) | **Partial** An SMTP relay on port 587 is available for sending; received mail is read through the API and webhooks, and IMAP access is not documented. [1](https://nuntly.com/docs/guides/send-emails-with-smtp) [2](https://nuntly.com/docs/guides/receiving-overview) [3](https://nuntly.com/rfc/imap) | **Yes** Connected IMAP accounts are read over IMAP and sent through SMTP, and Agent Accounts can be opened in mail clients over IMAP and SMTP submission on paid plans. [1](https://developer.nylas.com/docs/provider-guides/imap/) [2](https://developer.nylas.com/docs/v3/agent-accounts/mail-clients/) | **No** Not in the API reference: access is through the REST API, webhooks, WebSocket, CLI and MCP server, with no IMAP or SMTP access listed. [1](https://openmail.sh/llms.txt) [2](https://api.openmail.sh/openapi.json) | **Partial** An SMTP relay (smtp.resend.com) is available for sending; IMAP access is not documented. [1](https://resend.com/docs/send-with-smtp) | **Yes** Each mailbox password works for IMAP retrieval and SMTP submission, and custom SMTP accounts can be added as sending providers. [1](https://sendmux.ai/docs/mailboxes) [2](https://sendmux.ai/docs/sending/smtp) [3](https://sendmux.ai/docs/sending/accounts) |
| Sending |
| **Reply by thread** Reply to a conversation by its ID; recipients, subject and reply headers are filled in for you. | **Yes** threads.reply takes a thread ID and the text; sender, recipients (following Reply-To), subject and In-Reply-To/References are filled in from the thread, and email\_id pins the reply to one message. [1](https://docs.aiinbx.com/guides/threads#replying) | **Yes** Reply and Reply All take a message ID and fill in recipients, subject and threading headers; the reply joins the same thread. [1](https://docs.agentmail.to/api-reference/inboxes/messages/reply) [2](https://docs.agentmail.to/threads) | **Yes** Replying to an email by its ID uses the original subject and thread headers and resolves the recipient from the sender or Reply-To; the agent API can create a threaded reply draft. [1](https://api.mailslurp.com/v2/api-docs/) [2](https://www.mailslurp.com/llms.txt) | **Yes** The Reply API answers a received message by its ID in the same thread with In-Reply-To set; replyAll copies the other recipients. [1](https://nuntly.com/docs/guides/receiving-send-reply) | **Partial** A send with reply\_to\_message\_id gets In-Reply-To and References added by Nylas; per Nylas's reply guide, the caller sets the to recipients and the subject. [1](https://developer.nylas.com/docs/v3/email/send-email/) [2](https://developer.nylas.com/docs/v3/agent-accounts/email-threading/) [3](https://developer.nylas.com/docs/cookbook/email/threads/reply-to-a-thread/) | **Partial** Sending with threadId sets In-Reply-To, References and the Re: subject and quotes the previous message; the to address is a required field. [1](https://docs.openmail.sh/concepts/threading) [2](https://docs.openmail.sh/api-reference/messages/send-email) | **Yes** The Inboxes reply endpoint answers a message in a thread; recipients come from Reply-To or the sender, the subject defaults to the thread subject with Re:, and threading headers are set by Resend. [1](https://resend.com/docs/api-reference/inboxes/reply-thread-email) [2](https://resend.com/docs/chat-sdk) | **Yes** A saved draft created from a message with action reply gets the recipients, subject and thread headers filled in, then is sent by its ID. [1](https://sendmux.ai/docs/developer-tools/mailbox-api/saved-drafts) |
| **Drafts for approval** Create a draft through the API that a person or process approves before it is sent. | **Yes** draft: true stores a send, reply or forward unsent with a review\_url; it can be edited and sent from the console or through the API. [1](https://docs.aiinbx.com/guides/drafts) | **Yes** Drafts can be created, edited, listed across the organization and sent later, for human-in-the-loop review. [1](https://docs.agentmail.to/drafts) [2](https://docs.agentmail.to/knowledge-base/human-in-the-loop) | **Yes** Drafts can be created, edited and sent through the API; the AGENT\_DRAFT\_ONLY role lets an agent draft without sending, for review in the Agents workspace. [1](https://www.mailslurp.com/llms.txt) [2](https://www.mailslurp.com/docs/agents/) | **Partial** Broadcasts are created as drafts and go out with a separate send request; drafts for single transactional or inbox messages are not documented. [1](https://nuntly.com/docs/guides/broadcast-sending) | **Yes** The Drafts API creates, updates and sends drafts, and Nylas recommends the draft-first path when a person reviews before sending. [1](https://developer.nylas.com/docs/v3/email/send-email/) [2](https://developer.nylas.com/docs/v3/agent-accounts/supported-endpoints/) | **Not documented** The description of inbox-scoped keys mentions an inbox's drafts, but the API reference lists no draft endpoints. [1](https://docs.openmail.sh/concepts/inboxes) [2](https://api.openmail.sh/openapi.json) | **Yes** Inbox drafts can be created, updated and sent through the API; the built-in inbox agent saves replies and forwards as drafts for a team member to send. [1](https://resend.com/docs/guides/inboxes/drafts) [2](https://resend.com/docs/guides/inboxes/agent) | **Yes** Saved drafts have revisions; sending names the exact reviewed revision, so a person or agent can approve it first. [1](https://sendmux.ai/docs/developer-tools/mailbox-api/saved-drafts) |
| Platform |
| **Separation per customer** Your customers' domains, mailboxes and settings are kept apart inside one account (sub-accounts, pods, spaces or similar). | **Yes** Spaces keep each customer's domains, mailboxes, mail, pacing rules, suppression lists and sending reputation apart inside one workspace; API keys and webhook endpoints are workspace-wide. [1](https://docs.aiinbx.com/guides/spaces) [2](https://aiinbx.com/features/spaces) | **Yes** Pods isolate each customer's inboxes, domains, threads and drafts, with pod-scoped API keys and webhooks; Terms §4(c) make integrating into your own app subject to your subscription tier, and §8(l) forbid making API keys or account credentials available to any third party. [1](https://docs.agentmail.to/documentation/core-concepts/pods) [2](https://docs.agentmail.to/multi-tenancy) [3](https://www.agentmail.to/legal/terms) | **Partial** Environments give one organization separate workspaces with their own inboxes, domains, API keys and webhooks; the pricing page lists isolated environments under Enterprise. [1](https://www.mailslurp.com/docs/environments/) [2](https://app.mailslurp.com/pricing/) | **Partial** Namespaces group and isolate inboxes per tenant, mapped to your own externalId, on Starter and above; in the API reference, domains, webhooks and API keys carry no namespace. [1](https://nuntly.com/docs/guides/receiving-namespaces) [2](https://nuntly.com/pricing.md) [3](https://nuntly.com/openapi.json) | **Yes** Workspaces group an application's grants per customer organization, and for Agent Accounts carry the policy and rules (Agent Account workspace isolation is not on the Free plan). [1](https://developer.nylas.com/docs/dev-guide/platform/workspaces/) [2](https://developer.nylas.com/docs/v3/agent-accounts/workspaces/) [3](https://www.nylas.com/pricing/) | **Yes** Pods are isolated sub-accounts, addressable by your own clientId, that hold a tenant's inboxes and scoped domains, with pod-scoped API keys; unlimited on every plan. [1](https://docs.openmail.sh/concepts/pods) [2](https://openmail.sh/pricing) | **Partial** Resend's multi-tenant guide uses one account with domain-scoped API keys and tags, or a separate Resend team per customer; per-tenant analytics are not available natively and teams cannot be created through the API. [1](https://resend.com/docs/knowledge-base/setting-up-resend-for-multi-tenants) [2](https://resend.com/docs/dashboard/settings/team) | **Yes** One team per customer isolates mailboxes, providers, delivery logs, billing and API keys; each Pro team costs $7 a month plus usage. [1](https://sendmux.ai/solutions/platform-builders/) [2](https://sendmux.ai/docs/account/teams-and-access) |
| **MCP server** An official MCP server so AI assistants and agents can use the product directly. | **Yes** Two remote MCP servers: one runs the whole workspace, the other gives an agent one address to send from and read. [1](https://docs.aiinbx.com/mcp) [2](https://docs.aiinbx.com/guides/agent-inbox) | **Yes** A hosted MCP server at mcp.agentmail.to/mcp with inbox, message, thread, draft and attachment tools, using OAuth or an API key. [1](https://docs.agentmail.to/integrations/mcp) | **Yes** Hosted MCP server at api.mailslurp.com/mcp with OAuth or scoped agent keys and tools to read, search, reply and manage drafts. [1](https://www.mailslurp.com/docs/mcp/) [2](https://www.mailslurp.com/llms.txt) | **Yes** The @nuntly/sdk-mcp server gives agents tools to send email, manage domains and webhooks, and read and reply to inbound messages. [1](https://nuntly.com/docs/guides/ai-agents) | **Yes** A hosted Nylas MCP server (mcp.us.nylas.com and mcp.eu.nylas.com) gives agents email tools. [1](https://developer.nylas.com/docs/dev-guide/mcp/) | **Yes** Hosted MCP server at mcp.openmail.sh/mcp with OAuth or API key, 19 tools, read-only and single-inbox modes; listed in the ChatGPT plugin directory and MCP Registry. [1](https://docs.openmail.sh/integrations/mcp) | **Yes** A hosted remote MCP server at mcp.resend.com with OAuth login, and the same open-source server (resend-mcp) to run locally. [1](https://resend.com/docs/mcp-server) | **Yes** A hosted MCP server at mcp.sendmux.ai (or the local sendmux-mcp package) exposes Management, Mailbox and Sending tools after OAuth, plus a separate docs search MCP. [1](https://sendmux.ai/docs/ai-integrations/mcp) |
| **SOC 2 report** A SOC 2 Type II report is available to customers. | **No** No SOC 2 report is published; the DPA offers security documentation, questionnaire responses and one customer audit a year. [1](https://aiinbx.com/dpa#assistance) | **Yes** AgentMail completed a SOC 2 Type II audit in 2025; the report is shared through its Trust Center after access approval, and the pricing page lists it on Startup and Enterprise. [1](https://docs.agentmail.to/documentation/resources/security-privacy/soc-2-compliance) [2](https://www.agentmail.to/pricing) | **Partial** The trust centre lists SOC 2 Type 1 as compliant, and Enterprise includes SOC 2 documentation for security reviews; a Type II report is not listed. [1](https://trust.inc/pettman-o) [2](https://app.mailslurp.com/pricing/) | **Not documented** The site cites GDPR compliance; a SOC 2 report is not mentioned. [1](https://nuntly.com/README.md) [2](https://nuntly.com/pricing.md) | **Yes** The SOC 2 Type II report is available under NDA to current and prospective customers through the Nylas Trust Center. [1](https://www.nylas.com/security/) | **Not documented** The pricing page, docs and terms do not mention a SOC 2 report. [1](https://openmail.sh/pricing) [2](https://openmail.sh/terms) | **Yes** Resend is SOC 2 Type II compliant, and the report can be downloaded from the Documents page in the dashboard. [1](https://resend.com/docs/security) | **No** Asked whether it is SOC 2 or otherwise certified, the enterprise page says Sendmux is not certified against a specific standard yet and that certifications are on its roadmap. [1](https://sendmux.ai/solutions/enterprise/) |
| Policy |
| **Cold outreach allowed** The terms or acceptable use policy allow sending unsolicited B2B outreach, within the law. | **Yes** The Acceptable Use Policy allows marketing email that the applicable law permits and bans unlawful unsolicited email, stating that a public address, a scraped list or legitimate interest alone is not permission. [1](https://aiinbx.com/acceptable-use#permission) [2](https://aiinbx.com/use-cases/cold-outreach) | **No** The docs state AgentMail does not support cold outreach, and Terms §8(h) prohibit unsolicited email. [1](https://docs.agentmail.to/knowledge-base/cold-outreach) [2](https://www.agentmail.to/legal/terms) | **Yes** The acceptable use terms prohibit unsolicited communications in violation of applicable law and purchased, harvested or rented lists; lawful outreach is not prohibited. [1](https://www.mailslurp.com/full-terms-and-conditions/) | **No** The docs list cold outreach to prospects as not allowed, and the Terms of Service prohibit unsolicited bulk email and purchased or scraped lists. [1](https://nuntly.com/docs/guides/broadcast-overview) [2](https://nuntly.com/legal/terms-of-service) | **Partial** The Terms of Use bar sending 'any unsolicited or unauthorized advertising, promotional materials, email ... or other form of solicitation', while the Agent Accounts docs list a sales agent that 'runs cold outreach campaigns' as a use case. [1](https://www.nylas.com/legal/terms/) [2](https://developer.nylas.com/docs/v3/agent-accounts/) | **Yes** The terms allow individual, relevant B2B outreach without prior opt-in where lawful, from your own verified domain, to non-purchased business addresses, with opt-out and at most two follow-ups; a daily cap on new recipients applies. [1](https://openmail.sh/terms) [2](https://docs.openmail.sh/concepts/rate-limits) | **No** The Acceptable Use Policy prohibits unsolicited messages of any kind, including cold outreach, purchased lists or scraped contact data. [1](https://resend.com/legal/acceptable-use) | **Yes** Cold outreach is a documented use case through your own Gmail, Outlook or SMTP accounts to prospects you may lawfully contact; the managed Amazon SES route is for transactional email only. [1](https://sendmux.ai/docs/use-cases/cold-email-outreach) [2](https://sendmux.ai/acceptable-use/) |
| Pricing |
| What you pay for | Monthly plans by emails per month, sent and received both counting; plans also set how many custom domains, managed mailboxes and active custom pacing rules a workspace holds, and an allowance of advanced attachment processing pages. | Monthly plans sized by inboxes, emails per month and custom domains; on Developer and Startup, add-ons cost $2/month per extra inbox, per extra domain and per 1,000 extra monthly sends, and $5/month per seat. | Monthly plans sized by emails received, inboxes created and inboxes kept per month, with allowances for device previews, placement tests, warmup and AI tokens; Pro and Growth bill extra usage at published rates, and phone numbers are billed separately. | Monthly email volume, priced in EUR tiers; inbox, domain and webhook caps step up with the plan. | Monthly plan fee plus per-unit overage: connected accounts, Agent Accounts (per account), and Agent Account emails sent, storage and bandwidth. | A monthly plan plus usage: Pro includes 10 inboxes, 10,000 emails and 10 GB storage, then bills per extra inbox, email and GB; seats are not billed. | Transactional plans scale with emails sent and received per month; marketing plans scale with contacts; inboxes beyond the 3 included are $1 per inbox per month. | Per event: $0.50 per 1,000 provider-accepted recipients through your own providers, $0.75 per 1,000 through managed sending, $0.50 per 1,000 inbound mailbox deliveries, $0.02 per GB-month of storage, plus $7 per team per month on Pro. No per-seat or per-mailbox fees. |
| Free tier | No free plan: the pricing FAQ says Developer is $5 a month and includes 5,000 emails. | Free, $0/month, no credit card: 3 inboxes, 1 custom domain, 3,000 emails/month (100/day), 3 GB storage, 2 seats; the "Sent via AgentMail" footer is not removed on Free. | Free, $0, no card, 1 user: 250 emails received/month, 100 inboxes created/month, temporary inboxes only, 200 MB storage; no external sending, phone numbers or custom domains. | EUR 0/month: 3,000 emails/month, 100 emails/day, 1 domain, 1 inbox, 1 webhook, 30-day data retention. | Free, $0/month: 5 connected accounts, 3 Agent Accounts, 3,000 Agent Account emails/month, 3 GB storage and bandwidth; no custom sending domains (Nylas trial domain), 20 sends per Agent Account per day, all limits hard caps. | Free, €0/month, no credit card: 3 inboxes (hard cap), 3,000 emails/month, 3 GB storage, addresses on OpenMail's shared domains only, up to 100 emails/day; Free emails end with a "Sent with OpenMail, email for agents." line. | Free: $0/mo, 3,000 emails/mo (sent and received) with a limit of 100 emails per day, 3 domains, 3 inboxes, 1 webhook endpoint; 1,000 marketing contacts. | $0 per team per month: 2 mailboxes, 1 domain, 1 connected sending account, 1 webhook, 2 credentials, $1 usage credit, 50 provider-accepted recipients per UTC day (managed sending 2 per hour); outgoing messages get an "Email sent via Sendmux" footer. |
| Cheapest plan | Developer: $5/month for 5,000 emails, 50 custom domains, 100 managed mailboxes, 100 active custom pacing rules and 100 advanced attachment processing pages a month. | Developer, $20/month: 10 inboxes, 10,000 emails/month (1,000/day, 100 per 5 minutes), 10 custom domains, 10 GB storage, 2 seats, email support. | Starter, $19.99/month, 1 user, personal use: 2,500 emails received/month, 500 inboxes created/month, 250 inboxes kept, 500 MB storage; external sending not included, custom domains as a paid add-on. | Starter from EUR 10/month for 10,000 emails/month (EUR 16 for 50,000, EUR 28 for 100,000): no daily limit, 10 domains, 10 inboxes, 3 webhooks, 30-day retention. | Essentials, $15/month: 10 connected accounts (+$2.25 per additional account), 10 Agent Accounts, 10,000 Agent Account emails/month, 10 GB storage and bandwidth, 1 custom sending domain; Agent Account resources are hard-capped with no overage. | Pro, €9/month + usage: 10 inboxes then €1/inbox/month, 10,000 emails/month then €0.001/email, 10 GB storage then €0.10/GB/month, unlimited custom domains, spend management, no OpenMail footer. | Pro: $20/mo for 50,000 emails/mo, no daily limit, 10 domains, 5 webhook endpoints, 3 inboxes; overage $0.90 per 1,000 emails. | Pro: $7 per team per month plus prepaid usage, with Unlimited\* resources (fair usage, increases need admin approval) and a managed-sending starting allowance of 1,000 accepted recipients per day. |
| Other limits | Growth: $29/month for 30,000 emails, unlimited domains and mailboxes, 1,000 pacing rules, 500 pages. Scale: $99/month for 100,000 emails, unlimited domains, mailboxes and pacing rules, 2,000 pages. Extra usage is opt-in at $0.001 per email ($1 per 1,000) and $0.01 per advanced page, with optional monthly spending caps; without it, sending stops at the allowance while receiving continues. Every plan has every feature. Billing is monthly only, in USD excluding tax. The provided <slug>.aiinbx.app domain is capped at 100 emails a day. | Startup, $200/month: 150 inboxes, 150 custom domains, 15,000 emails/day (1,500 per 5 minutes) with no separate monthly cap, unlimited storage, 10 seats, SOC 2 report. Enterprise is custom: up to unlimited inboxes, usage-based pricing, BYO cloud, dedicated IPs, OIDC/SAML SSO. Docs state custom domains start on Developer, while the pricing page lists 1 on Free. | External sending starts on Pro, $69/month (1 user, commercial use): 500 external sends/month, 5,000 emails received, 1,000 inboxes created/month, no limit on inboxes kept, 1 GB. Growth, $199/month: 2 users, 5,000 inboxes created/month, 1 custom domain included, 5 GB. The emails-received allowance is shared across all inboxes. Enterprise adds SSO, SCIM, isolated environments and SOC 2 documentation. Prices shown in USD; the page also offers EUR. | Scale runs from EUR 68/month (100,000 emails) to EUR 625/month (1,500,000 emails) with 1,000 domains, 100 inboxes and 10 webhooks; Enterprise (2,000,000+ emails) is custom with unlimited inboxes. Storage is 1 GB per inbox below Enterprise. Dedicated IPs are an add-on on Scale and Enterprise. Namespaces start at Starter. | Pro is $49/month (or $43/month billed annually): 25 connected accounts (+$2.00, annual +$1.75 each), 50 Agent Accounts (+$0.40, annual +$0.20 each), 50,000 Agent Account emails/month (from +$0.80, annual +$0.70 per 1,000), 50 GB storage and 50 GB/month bandwidth, 10 custom sending domains (20 on annual). Agent Accounts are counted cumulatively per month, so accounts deleted mid-month still count. Agent Account sends share 5 requests per second per organization in production. Custom tracking domain needs the $2,400/year Accelerator Package (Pro Annual). Enterprise is custom. | Docs list per-inbox send limits of 10/minute and 200/day (the pricing page lists no daily send limit on Pro) and a daily cap on new recipients: on Pro 20/day per inbox and 150/day per account during warm-up, custom-domain tiers from 20 to 100/day, account cap rising to at most 500/day. Inbox creation is limited to 100/day per account. Enterprise is custom: dedicated sending IPs, SSO, volume discounts, 1-hour SLA. | Domains: Free 3, Pro 10, Scale 1,000; domains add-on $20/mo adds 100 domains on paid transactional plans. Additional inboxes $1/inbox/month on paid plans with pay-as-you-go; Free stops at 3. Every email sent or received through an inbox counts toward the transactional quota. Overage capped at 5x the monthly quota. API rate limit 10 requests per second per team by default, same on every plan. Self-serve plans are monthly only. | A team is the isolation boundary, so each isolated customer is its own $7/month Pro team. Every accepted To, CC and BCC recipient is billed. Enterprise is custom, with dedicated infrastructure and custom SLAs. |
| Sources | [1](https://aiinbx.com/pricing) [2](https://docs.aiinbx.com/guides/billing) [3](https://docs.aiinbx.com/guides/domains#your-provided-domain) | [1](https://www.agentmail.to/pricing) [2](https://docs.agentmail.to/knowledge-base/rate-limits) [3](https://docs.agentmail.to/knowledge-base/change-plan-billing) | [1](https://app.mailslurp.com/pricing/) | [1](https://nuntly.com/pricing) [2](https://nuntly.com/pricing.md) | [1](https://www.nylas.com/pricing/) [2](https://developer.nylas.com/docs/v3/agent-accounts/send-limits/) | [1](https://openmail.sh/pricing) [2](https://docs.openmail.sh/concepts/rate-limits) [3](https://docs.openmail.sh/concepts/inboxes) | [1](https://resend.com/pricing) [2](https://resend.com/docs/knowledge-base/what-is-resend-pricing) [3](https://resend.com/docs/knowledge-base/how-to-add-more-domains) [4](https://resend.com/docs/knowledge-base/account-quotas-and-limits) [5](https://resend.com/docs/api-reference/rate-limit) | [1](https://sendmux.ai/pricing/) [2](https://sendmux.ai/docs/account/team-limits) [3](https://sendmux.ai/docs/sending/accounts) [4](https://sendmux.ai/solutions/platform-builders/) |

Checked 6 November 2026 from each product's public docs and pricing. Spotted a mistake? Email [me@paukraft.com](mailto:me@paukraft.com).

## AI Inbx

AI Inbx sends and receives email for your app over one API: every address on your domains, and your users' Gmail and Outlook.

### Replies the agent can act on

`thread_id` holds when a client mangles or drops the reply headers, a colleague answers from another address, or the subject changes. A shared subject alone never merges two conversations, and mail that could belong to either starts a thread of its own ([threading](/features/threading)). None of the other ten APIs here documents keeping a reply without headers on its thread by more than its subject.

Think of how a person files mail. Shown a reply with no reply headers, they read it, recognise the conversation it continues and put it there. AI Inbx does that for every inbound email, before your code sees it. With threading on reply headers alone, that work moves to your agent: for each reply that arrives without them, it has to search earlier mail to find out whether a conversation already exists, and that costs tokens and time on every message.

`stripped_text` is what the sender wrote, with the quoted conversation and a repeated signature removed and inline answers kept. Shortened, from the [receiving guide](https://docs.aiinbx.com/guides/receiving#what-was-written):

```
{
  "text": "Hi Lena, answers inline.\n\nOn Mon, 1 Sep 2026 at 10:44, Lena Bergmann <lena@bergmann-metall.de> wrote:\n> 1. How many units per month?\n\n500, ramping to 800 in Q4.\n\n> 2. Which finish?\n\nAnodised black.\n\nBest\nTom",
  "stripped_text": "Hi Lena, answers inline.\n\n> 1. How many units per month?\n500, ramping to 800 in Q4.\n\n> 2. Which finish?\nAnodised black.\n\nBest\nTom"
}
```

A cut at the first quote would hand your agent "Hi Lena, answers inline." and nothing else. Inline answers are found even when the mail client leaves the quote unmarked, as Outlook does, as long as the message being answered is on the thread. `segments` gives the written, quoted and signature parts in order, and `stripped_html` has the same cut for display.

PDFs, documents and spreadsheets are prepared as Markdown as the email arrives, scanned PDF pages included, and `include: ["attachment_content"]` returns that text with the email in one call ([attachments guide](https://docs.aiinbx.com/guides/attachments#prepared-text)). AgentMail reads only a PDF's [text layer](https://docs.agentmail.to/reply-extraction), so a scanned PDF has no text, and MailSlurp and Sendmux extract text on a [separate request](https://sendmux.ai/docs/api/mailbox-api/request-attachment-text) per attachment. Scanned pages count against a monthly allowance, 100 on Developer, and cost $0.01 a page past it once extra usage is on ([attachments](/features/attachments)).

### Automated mail, labelled with what it asks for

Every inbound email has a `category`: `human`, `out_of_office`, `auto_reply`, `bounce`, `verification`, `transactional`, `notification`, `marketing` or `spam`. An away reply also carries `unavailable`, with the reason (away, left, or an unmonitored address), the return date and the colleagues it names ([docs](https://docs.aiinbx.com/guides/receiving#what-automated-mail-asks-for)):

```
if (event.data.unavailable?.contacts.length) {
  // Turn the sequence to the colleague the reply named.
  await restartSequence(event.data.thread_id, event.data.unavailable.contacts)
} else if (event.data.unavailable?.back_on) {
  await pauseSequenceUntil(event.data.thread_id, event.data.unavailable.back_on)
}
```

A sign-up confirmation carries `verification.code` and `verification.link`, so an agent finishes the sign-up without parsing the email. None of the other ten APIs here gives a return date or a named colleague as a field.

### Limits, sending hours and opt-outs

[Pacing rules](https://docs.aiinbx.com/guides/pacing) cap sends per rolling window for each sending address, sending domain, recipient or recipient domain, or for the rule as a whole. Mail over a limit waits instead of failing, in a queue you can read and release. Hours rules set sending windows in an IANA timezone, with daylight saving handled, and can open and close at a varying minute each day. A platform can set its own ceiling and each customer's hours, from the [pacing guide](https://docs.aiinbx.com/guides/pacing#spaces):

```
// Yours: 5,000 a day across the whole platform, whichever space sends it.
await aiinbx.pacingRules.create({
  name: "Platform ceiling",
  kind: "limit",
  match: [{ field: "from", pattern: "*" }],
  limit: { scope: "rule", amount: 5000, per_seconds: 86_400 },
})

// Theirs: business hours for one customer's mail only.
await aiinbx.pacingRules.create({
  name: "Acme business hours",
  kind: "hours",
  space_id: "spc_...",
  match: [{ field: "from", pattern: "*" }],
  schedule: {
    timezone: "Europe/London",
    windows: [{ days: [0, 1, 2, 3, 4], start_minute: 540, end_minute: 1020 }],
  },
})
```

[Suppressions](https://docs.aiinbx.com/guides/suppressions) come from bounces that show an address is dead, complaints, unsubscribe links, one-click unsubscribes and replies asking to stop. A reply such as "please stop emailing me" is suppressed and reported as [`email.unsubscribed`](https://docs.aiinbx.com/guides/suppressions#reacting-to-the-events) with `source: "reply"`, even if nobody reads it. Opens and clicks carry a `bot` flag for Apple Mail Privacy Protection fetches and security scanners, so a scanner's click doesn't trigger a follow-up.

None of the other ten APIs here documents suppressing opt-outs written in replies, or a sending window that holds mail outside set hours.

### Every customer kept apart

A [space](/features/spaces) holds one customer's domains, mailboxes, mail, pacing rules and suppression lists, and sends on its own reputation: a space over the bounce or complaint line is paused by itself, and your workspace-wide rules still cap everything. Gmail and Outlook judge mail by the domain it is signed with, and every subdomain of one wildcard is signed as that domain, so a customer who wants a reputation wholly their own connects their own domain ([spaces guide](https://docs.aiinbx.com/guides/spaces#one-reputation-per-space)).

### Every address works, Gmail and Outlook too

Every address on a verified domain sends, and once the domain's MX record points to AI Inbx every address receives too, `reply+ord_8812@` included. After one [wildcard domain](/features/wildcard-domains) such as `*.saas.com` verifies, each customer gets `customer.saas.com` from the API with no DNS of their own. When a customer's own domain won't verify, [`diagnostics`](https://docs.aiinbx.com/guides/domains#diagnostics) reads the live zone and names the record to add. For a pilot, every workspace has `<slug>.aiinbx.app`, where every address works with no DNS, capped at 100 emails a day and 20 an hour ([provided domain](https://docs.aiinbx.com/guides/domains#your-provided-domain)).

Users can [connect Gmail and Outlook](/features/mailboxes) through your own OAuth app. Their mail arrives as the same threads and events and is answered with the same reply call.

### No inbox to create, no keys to hand out

For a platform, I think an inbox per agent is a second copy of your tenant model. Your backend already knows which address belongs to which customer, and your own auth decides who reads what. Mirroring that into provider-side inboxes adds create and delete calls to keep in sync, and an address made on the fly, such as `reply+t123@acme.com` for one ticket, needs an API call before it can receive.

The same goes for keys. An AI Inbx API key acts for your whole workspace, and your customers call your API, never ours ([authentication](https://docs.aiinbx.com/authentication)). In my view, handing customers keys scoped to their inboxes at your email provider is the wrong design for a platform: it ties them to your vendor and moves your auth boundary into someone else's system.

The inbox does fit one agent with one owner and no backend in between, such as Claude Code on a developer's laptop, where the provider has to limit the agent to its own mail. AI Inbx covers that as an option: the [inbox MCP server](https://docs.aiinbx.com/guides/agent-inbox) or `aiinbx login --inbox` scopes an agent to the addresses you give it. The whole argument is in [Why inboxes are the wrong primitive](/blog/why-inboxes-are-the-wrong-primitive).

### Answering, approving and retrying

`threads.reply` takes a thread ID and the text, and works out the sender, recipients, subject and reply headers. The call follows Reply-To, keeps colleagues on reply-all, and `email_id` pins which message it answers. A Reply-To naming only your own addresses fails with `no_recipients` instead of mailing yourself ([threads guide](https://docs.aiinbx.com/guides/threads#replying)).

`draft: true` holds a send, reply or forward for a person to approve at `draft.review_url`. `scheduled_at` defers a send up to 30 days, and a scheduled email can be edited, moved or cancelled. An `Idempotency-Key` stops a retried request from sending twice, and webhook event ids stay the same across retries and replays so a handler can deduplicate. `GET /events` lets a worker catch up on anything it missed, and a [server-sent event stream](https://docs.aiinbx.com/reference/conventions#live) serves an agent without a public URL. For agents there are [two MCP servers](/features/mcp), one for the whole workspace and one scoped to an agent's own addresses, and a [CLI](/features/cli) where every API operation is a command.

### Built for agents at volume

I built AI Inbx for email agents at scale, where the parts above add up. With `stripped_text` the agent reads what is new on a long thread, not the whole conversation again, and I think it is the best reply stripping you can get from an email API. `category` lets your code hand only mail from people to the agent, and attachment text arrives once with the email. Pacing rules are checked on every send, up to 100 on Developer, 1,000 on Growth and no limit on Scale.

AI Inbx has no IMAP or SMTP, WebSockets, hosted templates, self-hosting, SOC 2 report or free plan; connected mailboxes are Gmail and Outlook through your own OAuth app, and SDKs are TypeScript and Python.

**Pick AI Inbx if** your agents send and answer mail for your customers, on your domains, theirs or their Gmail and Outlook.

## AgentMail

AgentMail hosts an inbox for each agent, created through the API on `@agentmail.to` or your own domain ([docs](https://docs.agentmail.to/knowledge-base/what-is-agentmail)). In my view, AgentMail is made for personal assistants: it is the [official email plugin for OpenClaw](https://www.agentmail.to/build/openclaw).

AgentMail's inboxes work over [IMAP and SMTP](https://docs.agentmail.to/imap-smtp), and events also arrive over [WebSockets](https://docs.agentmail.to/websockets). AgentMail has a free plan, and Startup and Enterprise include a [SOC 2 Type II report](https://docs.agentmail.to/documentation/resources/security-privacy/soc-2-compliance).

AgentMail's docs thread by [reply headers](https://docs.agentmail.to/knowledge-base/threaded-conversations) and describe no out-of-office flag. They tell you to [read replies for opt-outs](https://docs.agentmail.to/knowledge-base/cold-outreach) and block the address yourself. AgentMail [has no catch-all](https://www.agentmail.to/blog/catch-all-vs-inbox-per-agent), and its [terms](https://www.agentmail.to/legal/terms) (§4(c)) tie integrating its inboxes into your own app to your subscription tier. Its [multi-tenancy guide](https://docs.agentmail.to/multi-tenancy) says to give each customer a scoped API key, while the same terms (§8(l)) forbid making API keys available to any third party.

**Pick AgentMail if** one personal agent needs its own inbox over IMAP and SMTP, or you need a free plan or a SOC 2 report today. More in [AI Inbx vs AgentMail](/blog/ai-inbx-vs-agentmail) and [AgentMail alternatives](/blog/agentmail-alternatives).

## Nylas

Nylas connects your users' existing mailboxes and also hosts Agent Accounts, mailboxes of its own for agents.

Nylas connects Microsoft 365, Exchange Online and Server, [Exchange on-prem](https://developer.nylas.com/docs/provider-guides/exchange-on-prem/), iCloud, Yahoo and IMAP accounts ([provider guides](https://developer.nylas.com/docs/provider-guides/microsoft/)). Nylas has SDKs for Ruby and Kotlin/Java besides Node.js and Python, and a [SOC 2 Type II report](https://www.nylas.com/security/).

Nylas [threads](https://developer.nylas.com/docs/v3/email/threads/) follow Gmail's and Outlook's own threading on connected accounts. Nylas reports out-of-office replies as a bounce event and [states](https://developer.nylas.com/docs/v3/email/send-email/) that its detection doesn't extract return dates. A Nylas reply sets the threading headers, but you set recipients and subject ([reply guide](https://developer.nylas.com/docs/cookbook/email/threads/reply-to-a-thread/)). Nylas says it [doesn't ship suppression lists](https://developer.nylas.com/docs/cookbook/email/sendgrid-alternative/), and an Agent Account over its daily [send quota](https://developer.nylas.com/docs/v3/agent-accounts/send-limits/) gets a 429 instead of having mail held.

**Pick Nylas if** your users are on Exchange, iCloud, Yahoo or IMAP accounts. More in [AI Inbx vs Nylas](/blog/ai-inbx-vs-nylas).

## OpenMail

OpenMail hosts an inbox for each agent, reached through its API, CLI and MCP server ([pods](https://docs.openmail.sh/concepts/pods)).

OpenMail [extracts text from attachments](https://docs.openmail.sh/concepts/attachments), images included. OpenMail labels inbound mail with a `category` and an `auto_replyable` flag ([events](https://docs.openmail.sh/pages/webhooks/events)), and its [terms](https://openmail.sh/terms) allow individual B2B outreach under written conditions.

OpenMail threads by reply headers, and a message with no match [starts a new thread](https://docs.openmail.sh/concepts/threading). OpenMail's labels carry no return date or named contact, mail to an address with no inbox is dropped, and there is no IMAP or SMTP access. Its attachment docs don't describe reading scanned pages inside a PDF.

**Pick OpenMail if** you need text from image attachments, or B2B outreach under its written conditions.

## Resend

Resend is an email API for developers, built around transactional sending, with receiving and, since October 2026, [Inboxes](https://resend.com/blog/announcing-inboxes) for threaded conversations.

Resend has [hosted templates](https://resend.com/docs/dashboard/templates/introduction) and React Email, SDKs in more languages than AI Inbx, a [SOC 2 Type II report](https://resend.com/docs/security) and a free plan. Resend [receives](https://resend.com/docs/dashboard/receiving/introduction) for any address on a domain once the MX record is added.

Resend's [received emails](https://resend.com/docs/api-reference/emails/retrieve-received-email) carry the full bodies, with no field for the newly written text and none marking automatic replies. Resend's [multi-tenant guide](https://resend.com/docs/knowledge-base/setting-up-resend-for-multi-tenants) says tenants in one account share its sender reputation.

**Pick Resend if** you mostly send transactional mail and want templates.

## Sendmux (now Qubrics)

Sendmux (now Qubrics) routes outbound mail through your customers' own Gmail, Outlook and SMTP accounts, with agent mailboxes alongside ([accounts](https://sendmux.ai/docs/sending/accounts)).

Sendmux holds mail over the per-account caps you set on those accounts ([cold email guide](https://sendmux.ai/docs/use-cases/cold-email-outreach)), and documents cold outreach through them. Sendmux mailboxes work over [IMAP and SMTP](https://sendmux.ai/docs/mailboxes), and nothing is charged per mailbox.

Sendmux connects Gmail and Outlook with [send scopes only](https://sendmux.ai/docs/sending/accounts/google-microsoft), without read access. Sendmux lists a catch-all as [planned](https://sendmux.ai/docs/domains/settings), doesn't document out-of-office detection, and isolates each customer as a $7-a-month team ([platform builders](https://sendmux.ai/solutions/platform-builders/)).

**Pick Sendmux if** outbound goes through your customers' own accounts with per-account caps.

## Nuntly

Nuntly combines transactional sending, inbound [inboxes](https://nuntly.com/docs/guides/receiving-inboxes) and broadcasts in one API, priced in euros.

Nuntly creates a catch-all inbox when receiving is enabled, marks likely bot opens and clicks with `isBotEvent` ([webhooks](https://nuntly.com/docs/guides/sending-webhooks)), and has an MCP server.

Without matching reply headers, Nuntly joins a message to a thread in the same inbox with a matching subject and activity in the last seven days ([threads](https://nuntly.com/docs/guides/receiving-threads)), so unrelated emails with the same subject in that inbox can land on one thread. Nuntly doesn't document separated reply text or out-of-office detection, and caps inboxes at 100 below Enterprise.

**Pick Nuntly if** you want transactional mail, inbound inboxes and broadcasts from one API, billed in euros.

## MailSlurp

MailSlurp gives tests and automated workflows real inboxes and SMS numbers ([inboxes](https://www.mailslurp.com/docs/inboxes/)).

MailSlurp extracts one-time codes from an email on request, through a [separate endpoint](https://www.mailslurp.com/docs/emails/), and has SDKs in many languages. MailSlurp [connectors](https://www.mailslurp.com/docs/connectors/) sync Gmail and Outlook mailboxes over IMAP and SMTP.

MailSlurp threads by reply headers, puts no code on the message itself, and doesn't document separated reply text or out-of-office detection. MailSlurp's Pro plan includes 500 external sends a month.

**Pick MailSlurp if** you test sign-ups, one-time codes and replies in CI.

## Postmark

Postmark sends transactional and broadcast email and posts inbound mail to your webhook as JSON ([inbound](https://postmarkapp.com/developer/user-guide/inbound/parse-an-email)).

Postmark has [hosted templates](https://postmarkapp.com/developer/api/templates-api), and inbound JSON includes a `StrippedTextReply` for plain-text replies. Postmark processes mail to any address on an [inbound domain](https://postmarkapp.com/developer/user-guide/inbound/inbound-domain-forwarding).

Postmark has no conversation object, reports some out-of-office replies as [AutoResponder bounces](https://postmarkapp.com/developer/api/bounce-api) without a return date, and [can't schedule](https://postmarkapp.com/support/article/1118-can-you-schedule-emails-with-postmark) a send. Inbound starts on Pro, $16.50 a month for 10,000 emails ([pricing](https://postmarkapp.com/pricing)).

**Pick Postmark if** you send transactional mail and receive the occasional reply.

## Mailgun

Mailgun sends high volumes of transactional and bulk email and posts inbound mail through [routes](https://documentation.mailgun.com/docs/mailgun/user-manual/receive-forward-store/receive-http).

Mailgun has dedicated IPs, a [SOC 2 Type II report](https://www.mailgun.com/security/), and routes that match any address on a domain. Mailgun's Timezone Optimization, on some plans, delivers a message at a set local time in the recipient's timezone ([docs](https://documentation.mailgun.com/docs/mailgun/api-reference/send/mailgun/messages/post-v3--domain-name--messages)).

Mailgun posts each inbound message on its own, with no thread object, and its `stripped-text` is a best-effort parse. Mailgun's parsed messages have no field marking automatic replies.

**Pick Mailgun if** you send at high volume and build conversation handling yourself.

## Amazon SES

Amazon SES sends and receives on your own domains inside AWS, billed per email ([pricing](https://aws.amazon.com/ses/pricing/)).

Amazon SES is $0.10 per 1,000 emails sent and $0.10 per 1,000 received à la carte, plus $0.09 per 1,000 incoming chunks of 256 KB. SES [tenants](https://docs.aws.amazon.com/ses/latest/dg/tenants.html) keep reputation per tenant, and receipt rules can match every address on a domain.

Amazon SES hands received mail to S3, SNS or Lambda as raw MIME, with no thread, no separated reply text and no auto-reply field ([notifications](https://docs.aws.amazon.com/ses/latest/dg/receiving-email-notifications-contents.html)).

**Pick Amazon SES if** you run on AWS and build conversation handling yourself.

## How much does each cost?

AI Inbx bills by email volume, sent and received, with no meter on addresses, inboxes or connected accounts. As of November 2026, Developer is $5 a month for 5,000 emails, up to 50 domains and 100 connected mailboxes. From $29 a month (Growth, 30,000 emails) domains and mailboxes are unlimited; Scale is $99 for 100,000. Extra emails are $1 per 1,000 once you turn extra usage on, and receiving never stops at the allowance; only sending does ([pricing](/pricing), [billing](https://docs.aiinbx.com/guides/billing#at-a-limit)).

AgentMail, OpenMail and Resend price inboxes, Nylas prices connected accounts and Agent Accounts, and Nuntly and MailSlurp tie inbox caps to the plan. A platform with many low-volume agents reaches those meters long before it sends much mail. On Developer and Startup, AgentMail adds $2 a month per extra inbox and $2 per 1,000 extra monthly sends; AI Inbx charges $1 per 1,000 emails, sent or received.

I don't pitch AI Inbx as the cheap option. I think our pricing is fair: it follows what email costs to send, receive and store, and at these prices AI Inbx runs as a healthy business. An extra inbox costs a provider close to nothing, so in my view a monthly fee per inbox is margin, not cost.

Take a support desk whose AI agents answer email for 50 customers. Each customer has its own domain and six agent addresses, 300 in all, and together they send 30,000 and receive 30,000 emails a month. List prices as of November 2026, one recipient per email:

```
AgentMail   Startup (150 inboxes, 150 domains)              $200.00
            Extra inboxes: 300 - 150 = 150 x $2             $300.00
            Total                                           $500.00

AI Inbx     Growth (30,000 emails, unlimited domains)        $29.00
            Extra emails: 60,000 - 30,000 = 30,000 x $0.001  $30.00
            Total                                            $59.00

Nylas       Pro, monthly (50 Agent Accounts, 50,000 sends)   $49.00
            Extra Agent Accounts: 250 x $0.40               $100.00
            Total, before domains past the 10 included      $149.00

OpenMail    Pro (10 inboxes, 10,000 emails)                   €9.00
            Extra inboxes: 290 x €1                         €290.00
            Extra emails: 20,000 to 50,000 x €0.001      €20 to €50
            Total                                      €319 to €349

Resend      Pro (50,000 emails, 10 domains)                  $20.00
            Extra emails: 10,000 x $0.90 per 1,000            $9.00
            Domains add-on (100 more)                        $20.00
            Extra inboxes: 297 x $1                         $297.00
            Total                                           $346.00

Sendmux     Pro team                                          $7.00
            30,000 managed sends x $0.75 per 1,000           $22.50
            30,000 inbound deliveries x $0.50 per 1,000      $15.00
            Total, one team                                  $44.50
            Total, a team per customer (50 x $7 + usage)    $387.50
```

OpenMail's pricing page doesn't say whether received mail counts toward its email allowance, hence the range. Nylas counts Agent Account sends, not received mail, and Pro includes 10 custom sending domains; I found no published price for 50. Sendmux's lower total has all 50 customers share one team; the higher gives each the team Sendmux uses for isolation. Nuntly caps inboxes at 100 below Enterprise and MailSlurp's Pro plan includes 500 external sends a month, so I left both out.

The shape of the workload changes the order:

| Workload (a month) | AgentMail | AI Inbx | Nylas | OpenMail | Resend | Sendmux |
| --- | --- | --- | --- | --- | --- | --- |
| Pilot: 20 addresses, 2,500 sent, 2,500 received | $40 | $5 | $49 | €19 | $37 | $10.13 |
| 300 addresses for 50 customers, 30,000 sent, 30,000 received | $500 | $59 | $149 + domains | €319–€349 | $346 | $44.50–$387.50 |
| 10 addresses, 150,000 sent, 150,000 received | $200 | $299 | $129 | €149–€299 | $222 | $194.50 |

From each provider's pricing page, November 2026. Nylas prices extra sends in volume bands from $0.80 per 1,000; the last row uses $0.80, so it may come in lower. Resend's last row uses its $35 Pro tier for 100,000 emails plus 200,000 at $0.90 per 1,000 and 7 extra inboxes. OpenMail's docs cap each inbox at 200 sends a day while its pricing page lists no daily limit on Pro; under the docs' cap, 150,000 sends need 25 inboxes, €15 more. Sendmux's managed sending starts at 1,000 recipients a day per Pro team, with higher limits by review.

With three agents or fewer and up to 3,000 emails a month, AgentMail, Nylas, OpenMail and Resend have free plans; AI Inbx starts at $5. With few addresses and high volume, Nylas, Sendmux, AgentMail and Resend cost less than AI Inbx at 300,000 emails a month, and OpenMail may too: AI Inbx counts the 150,000 received emails as well, while Nylas counts only sends and AgentMail's Startup plan has a daily send limit instead of a monthly cap. As addresses grow, AI Inbx stays flat because only emails count: at 300 addresses for 50 customers only Sendmux, on one team shared by all 50 customers, comes in lower.

If your agents send sales outreach, read [email APIs for cold outreach tools](/blog/email-api-for-cold-outreach-tools) before you choose; six of the eleven products named here don't allow it.

To try AI Inbx, the [quickstart](https://docs.aiinbx.com/quickstart) gets a domain receiving and replying, the [agent inbox guide](https://docs.aiinbx.com/guides/agent-inbox) connects a single agent, and [pricing](/pricing) lists every plan.

*Last checked: 6 November 2026. Work at one of these companies and spotted something wrong? Email [pau@aiinbx.com](mailto:pau@aiinbx.com) with a link and I'll correct it.*

Written by

[Pau Kraft](https://paukraft.com)

[@paukraft on X](https://x.com/paukraft)

Before AI Inbx, Pau built email agents that run in production for enterprises in the sourcing industry, processing thousands of emails a month, where a single reply filed on the wrong conversation is not acceptable. AI Inbx is built on what those systems taught him: the threading edge cases, the replies cut in the wrong place, the email that went out at 02:30 on a Sunday.

## Questions

### What is the best email API for AI agents?

In my view, AI Inbx, for products whose agents send and answer email for customers; the TL;DR at the top says why. For one personal agent that needs IMAP and SMTP, AgentMail. For users on Exchange, iCloud, Yahoo or IMAP accounts, Nylas. For send-only transactional mail, Postmark or Resend.

### How should I compare email APIs for AI agents?

By what your code receives and what the API does when mail goes wrong. Check whether threads hold without reply headers and inline answers are kept, whether out-of-office and verification emails are labelled with the return date or code as a field, whether limits, sending hours and opt-outs keep sending safe, whether customers are kept apart, and whether the bill grows with emails or with addresses.

### Do I need to create an inbox for every agent?

On AgentMail, OpenMail and Sendmux (now Qubrics), yes: each receiving address needs an inbox or mailbox first. On AI Inbx, no: every address on a verified domain whose MX record points to AI Inbx sends and receives with nothing created, \`reply+t123@\` addresses included. AI Inbx has an inbox only as an optional scope for an agent holding its own credential.

### Can an AI agent use a user's existing Gmail or Outlook account?

Yes, with AI Inbx, Nylas or MailSlurp. AI Inbx connects Gmail and Outlook through your own Google or Microsoft OAuth app, with the same threads and events as your domains. Nylas also connects Exchange, iCloud, Yahoo and IMAP accounts. MailSlurp syncs Gmail and Outlook over IMAP and SMTP. Sendmux (now Qubrics) connects them for sending only. AgentMail, OpenMail, Resend and Nuntly host their own inboxes instead.

### Which email APIs for AI agents have a free plan?

As of November 2026, AgentMail, Nylas, OpenMail, Resend, Nuntly, MailSlurp and Sendmux have free plans, most capped at one to three inboxes; AgentMail, OpenMail and Sendmux add a footer to mail sent on them. Postmark (100 emails a month) and Mailgun (100 a day) have free sending tiers. AI Inbx has no free plan: Developer is $5 a month for 5,000 emails.

### Can I use these email APIs for an AI SDR or cold outreach?

Check the policy first. AI Inbx allows marketing email where the applicable law permits it, OpenMail's terms allow individual B2B outreach under listed conditions, Sendmux documents cold outreach through your own accounts, and MailSlurp's terms bar unlawful unsolicited mail and bought or harvested lists, not outreach as such. AgentMail, Resend, Nuntly, Postmark, Mailgun and Amazon SES do not allow it. Nylas's terms bar unsolicited email while its docs describe a cold outreach agent.

### Does an AI agent need IMAP or SMTP?

No, if your code uses an HTTP API and webhooks. IMAP and SMTP help when an agent framework or mail library already speaks them. AgentMail, Sendmux and MailSlurp inboxes offer both, and Nylas Agent Accounts do on paid plans. AI Inbx and OpenMail are reached through their APIs, CLIs and MCP servers.

### Does AI Inbx replace AgentMail?

Yes, if your agents answer real customers' mail, on your domains, theirs or their Gmail and Outlook. No, if you need IMAP or SMTP, a free plan or a SOC 2 report today; AgentMail offers each of these.

Keep reading

## More from the blog

[All posts](/blog)

-   [5 November 2026ComparisonsAI Inbx vs AgentMail: inboxes vs addresses (2026)AgentMail bills per inbox; on AI Inbx every address works and the bill follows email. Threads, out-of-office dates, opt-outs, pacing and three worked bills.Pau Kraft](/blog/ai-inbx-vs-agentmail)
-   [5 November 2026ComparisonsThe best AgentMail alternatives (2026)Seven AgentMail alternatives for platforms, compared on per-inbox pricing, catch-all domains, users' Gmail and Outlook, opt-out replies and outreach rules.Pau Kraft](/blog/agentmail-alternatives)
-   [5 November 2026ComparisonsAI Inbx vs Nylas for email in your product (2026)AI Inbx vs Nylas for Gmail and Outlook products: threads without reply headers, inline answers, out-of-office return dates, opt-outs, pacing and pricing.Pau Kraft](/blog/ai-inbx-vs-nylas)
-   [5 November 2026ComparisonsThe best Nylas alternatives (2026)Aurinko, Unipile, EmailEngine and AI Inbx vs Nylas for Gmail and Outlook products: threading, reply text, out-of-office dates, opt-outs, cost per account.Pau Kraft](/blog/nylas-alternatives)
-   [5 November 2026ComparisonsBest email APIs for cold outreach tools (2026)What a cold-outreach product needs from its email API, and how 12 providers compare on terms, send limits, sending hours, replies and per-customer separation.Pau Kraft](/blog/email-api-for-cold-outreach-tools)

## Give your product an inbox. The hard parts are already handled.

[Get started](/signup)
