Connect any email account to your app with one REST API

Self-hosted email integration for IMAP, SMTP, Gmail and Microsoft 365. Your users' mail never leaves your infrastructure, and one flat annual fee covers unlimited mailboxes.

Nothing to sign up for. Run it on your own server and activate a free 14-day trial from your own dashboard.

Send mail from a connected account
curl -X POST "https://ee.example.com/v1/account/nina/submit" \
  -H "Authorization: Bearer $EE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "to": [{ "address": "customer@example.com" }],
    "subject": "Your invoice",
    "html": "<p>Invoice attached.</p>"
  }'

{
  "response": "Queued for delivery",
  "messageId": "<a2184d08@example.com>",
  "queueId": "d41f0423195f271f"
}

Delivered over the user's own SMTP server, saved to their Sent folder, threaded correctly.

Built and maintained by the author of Nodemailer, the email library your stack probably already depends on.

16.7M Nodemailer downloads per week
683M Yearly npm downloads across the Nodemailer email libraries
200+ Companies running EmailEngine in production
38 Countries with paying customers

Why teams pick EmailEngine

Your servers, your data

EmailEngine runs on your own infrastructure. Message content is fetched on demand from the original mailbox and is never copied to anyone else's servers. Only metadata like IDs, flags and folder structure is cached, in your own Redis.

We have no access to your instance, your data or your customers' credentials. There is no remote management and no backdoor.

One price, unlimited mailboxes

Hosted email APIs bill per connected mailbox, so your costs grow with your customer count. EmailEngine is a flat annual subscription covering unlimited mailboxes, unlimited instances and unlimited API calls.

Build a product on top of it and serve thousands of end customers on a single subscription.

Mail that comes from your users

Messages are sent through each user's own mail server, so they arrive from the person your recipient expects rather than from a shared relay, and land in their Sent folder, correctly threaded.

Bounces, complaints and unsubscribes are detected and fed back to you as webhooks.

EmailEngine dashboard showing connected accounts and recent activity

An admin UI you can hand to support

Every connected account and its sync state in one place, with the live message and webhook queues alongside. Browse a mailbox, work out why an account stopped syncing, or pull an account's protocol log, all without opening a terminal.

  • Account health at a glance
  • Message browser
  • Dark mode

Running in about ten minutes

EmailEngine plus a Redis database, on your own machine. No account to create, no data to hand over.

  1. Install it

    The shipped Compose file brings up EmailEngine together with a correctly configured Redis. Single binaries, an npm package and an installer script are also available.

    curl -LO https://go.emailengine.app/docker-compose.yml
    docker compose up -d
  2. Activate the trial

    Open your instance's own dashboard, click Start a 14-day trial, generate an access token. No account to create, no email to hand over.

    open http://127.0.0.1:3000
  3. Connect a mailbox

    Register an account over the API, or send your user to a hosted authentication form and let EmailEngine handle the OAuth2 dance.

    POST /v1/authentication/form

Download EmailEngine

Every install can activate its own 14-day trial from the dashboard. Full functionality, no sign-up, no credit card.

Connect accounts without writing OAuth2 code

Send your user to a hosted authentication form, they sign in with Google or Microsoft, and they land back in your app with the account already connected. Or register accounts directly over the API if you'd rather own the flow.

  • Gmail
  • Microsoft 365
  • Any IMAP server
EmailEngine hosted authentication form

Managed OAuth2

EmailEngine stores and refreshes tokens for you, or calls your own authentication server if you already hold them.

Service accounts

Google Workspace domain-wide delegation and Workload Identity Federation; Microsoft 365 app-only access with no user login.

Shared and delegated mailboxes

Microsoft 365 shared mailboxes, delegated accounts and Government Cloud tenants.

Autodiscovery

Resolve IMAP and SMTP settings from an email address so users only type their credentials.

Send-only accounts

Register Gmail or Outlook accounts for sending alone, with no mailbox syncing and no IMAP connection.

IMAP and SMTP proxy

Let legacy clients that only speak password auth reach OAuth2-only accounts. EmailEngine handles the tokens in the background.

Webhook configuration in EmailEngine

Know the moment anything changes

EmailEngine holds an open connection to every account and pushes a webhook when mail arrives, is read, moved, flagged or deleted. Every delivery is signed, deduplicated and retried.

  • New mail
  • Flag and folder changes
  • Signed payloads

Webhook routes

Filter and reshape events with small JavaScript functions, then fan one event out to Slack, Discord, Zapier, n8n or your own endpoint.

Signed, deduplicated, retried

HMAC-SHA256 signature, a stable event ID and an attempt counter on every delivery, plus up to ten attempts with exponential backoff if your endpoint is down.

Search

Query by sender, recipient, subject, body, date, header and thread, plus Gmail labels and Outlook categories.

AI processing

Optionally run incoming mail through an LLM for summaries, sentiment, extracted events and action items, and a phishing risk score, using your own prompt and your own API key.

Attachments and calendar invites

Download attachments, inline images as data URIs, and parse ICS invites out of incoming messages.

Bulk export

Export a mailbox to compressed NDJSON for archival, migration or legal discovery, resumable and encrypted at rest. (Beta)

Send through your users' own mail servers

Post JSON, get a queued message. EmailEngine builds the MIME, sends it over the account's own SMTP or provider API, uploads it to Sent Mail and sets the threading headers so replies stay in the conversation.

  • Saved to Sent Mail
  • Correct threading
  • Bounce detection
A sent message as it appears in a mail client

Templates and mail merge

Stored templates with variables, and one API call that fans out into personalised messages with their own Message-IDs.

Scheduling and idempotency

Queue a message for a future time, and use an idempotency key so a retried request never sends twice.

Open and click tracking

Optional tracking pixel and link rewriting, with known security scanners filtered out of the results.

Bounces and suppression

Bounce and complaint parsing with ML-assisted classification, automatic blocklists and RFC 8058 one-click unsubscribe.

SMTP gateways

Route selected messages through an external relay while keeping the account's own identity.

Deliverability testing

Send a test message and get back SPF, DKIM, DMARC, BIMI and ARC results, plus which Gmail tab it landed in.

Grafana dashboard showing EmailEngine metrics

Built to be operated, not just installed

A Prometheus endpoint and a ready-made Grafana dashboard, live queue inspection, and optional per-account logging of the raw IMAP conversation, so you can see exactly what the mail server said.

  • Prometheus
  • Grafana
  • Opt-in IMAP logs

Queue visibility

Inspect, retry and cancel messages and webhook deliveries while they are still in the queue.

Per-account logs

Switch on protocol logging for one account while you chase a problem, then download the transcript.

Scoped access tokens

Issue tokens limited to one account, one scope, an IP range or a rate limit. Tokens are stored only as hashes.

Error reporting

Point EmailEngine at your own self-hosted Sentry from the admin UI.

Proxy support

Route outbound connections through HTTP or SOCKS proxies, globally or per account, and pin outbound IPs.

White labelling

Rebrand the hosted authentication pages and run them in seven languages.

When self-hosting is the requirement

For banks, healthcare, legal and public-sector teams, handing customer mailboxes to a third-party SaaS is not an option. Whether the constraint is GDPR, HIPAA, data residency or an internal policy that customer mail never leaves your network, EmailEngine is architected for it.

No data leaves your network

Message bodies are fetched on demand from the original mailbox. Only sync metadata is cached, in Redis you control.

No sub-processor to declare

Because EmailEngine runs on your hardware, your users' mail never reaches us. For that data we are neither controller nor processor under the GDPR, so there is no third party for your DPO to assess and no data processing agreement to negotiate.

Encrypted at rest

AES-256-GCM encryption for every stored credential, OAuth2 token and secret.

SSO and strong auth

OpenID Connect against any provider, Okta, passkeys and TOTP, with group-based authorisation and SSO-only mode.

Authentication audit trail

Every admin sign-in, failed attempt and passkey change is written to the application log, ready to ship into your own SIEM.

No vendor access

There is no remote management channel and no backdoor. We cannot reach your instance even if you ask us to.

EU company, source available

Postal Systems OÜ is an Estonian company. The full source is available for review by your security team.

Enterprise and perpetual licensing

If you need a perpetual licence instead of an annual subscription, payment by invoice or wire transfer, net terms, or custom contract terms, those are all available. The software is identical either way.

A perpetual licence buys operational certainty rather than extra features. If you ship EmailEngine inside an on-premises product, you are managing instances on customer hardware around the world. A licence with no expiry date means a renewal that slips can never take those instances down, and there is no new key to roll out to every site.

Pricing

One subscription per company. Not per mailbox, not per instance, not per message.

$995 / year, or €995

Renews annually. Prices exclude VAT where applicable.

  • Unlimited connected mailboxes
  • Unlimited instances for production, staging and development
  • Unlimited API calls and webhooks
  • As many licence keys as you need
  • All updates while your subscription is active
  • Serve your customers from instances you manage, they never need a licence of their own

Enterprise

The same software on different payment terms. For procurement rules the annual plan doesn't fit, and for deployments where an expiring licence would be an operational risk.

  • A perpetual licence, paid once, instead of a subscription
  • Payment by invoice or wire transfer
  • Net terms rather than payment up front
  • Custom contract and licence terms

Same features, same support, nothing here is reserved for it. What you are buying is the absence of a renewal.

Trusted by 200+ companies

CRM, SaaS and AI businesses run EmailEngine in production worldwide

Who builds on EmailEngine

CRM and sales platforms

Sync your users' correspondence with their contacts, and let them send from their own address without leaving your app.

Support and shared inboxes

Turn support@ into tickets, track conversations across a team, and reply with stored templates.

Regulated industries

Banking, healthcare, legal and public sector teams that cannot place customer mailboxes with a hosted provider.

Email hosting and webmail

Build a modern webmail or mobile client on top of your existing hosting without implementing IMAP and MIME yourself.

AI products and agents

Give an assistant structured, permissioned access to a user's mailbox so it can read, summarise and send on their behalf.

Enterprise integration

Bridge legacy applications that only speak IMAP and SMTP to OAuth2-only Microsoft 365 and Google Workspace tenants.

EmailEngine or a hosted email API?

Both approaches are legitimate. They differ in who holds the data and how the bill scales.

EmailEngine Hosted email APIs
Where mail is processed Your infrastructure The vendor's cloud
Pricing model Flat annual fee, unlimited mailboxes Typically per connected mailbox
Who runs it You (a server and Redis) The vendor
Uptime and scaling Yours to own; several thousand mailboxes per instance Vendor SLA, scales past that for you
Compliance certifications Inherited from your own environment Vendor holds SOC 2, ISO 27001 and similar
Best fit Teams with somewhere to run it, data-residency requirements, or many mailboxes Teams with no ops capacity and a small number of mailboxes

A detailed, feature-by-feature comparison with Nylas is in the documentation, including where EmailEngine is the weaker choice.

Or write it yourself?

Plenty of teams do, and for a single mailbox over plain IMAP that is the right call. It usually stops being the right call at the second provider, because the hard part was never the protocol. It is everything around it.

Every provider is different

Gmail exposes labels as folders, so one message lives in several at once. Microsoft throttles on its own terms. Plenty of IMAP servers advertise capabilities they do not honour. The RFC is the easy part.

OAuth2 that keeps working

Google and Microsoft each expire and refresh tokens their own way, with service accounts, delegated access and tenant policies on top. Getting the first token is a tutorial. Keeping thousands of them valid is the actual job.

MIME is worse than it looks

Character encodings, headers from twenty-year-old clients, inline images, calendar invites. Real mailboxes are full of messages that violate the spec and still have to be read correctly.

Connections that stay up

Thousands of persistent IMAP connections holding IDLE, reconnecting cleanly, and staying inside each provider's limits. This is the part that pages you at three in the morning.

Sending is not just SMTP

Threading headers so replies stay in the conversation, uploading the message to the user's Sent folder, then parsing whatever bounces back and acting on it.

It is never finished

Providers change. Google and Microsoft both retired password authentication in the last few years, and every change like that lands on whoever maintains your integration.

EmailEngine has been shipping since 2020, across 379 releases, against a codebase that cites 25 different RFCs. None of that is the interesting part of your product.

FAQ

What does EmailEngine actually do?

It keeps an open connection to every email account you register and exposes them all through one REST API. You call HTTP endpoints with JSON; EmailEngine translates that into IMAP, SMTP, Gmail API or Microsoft Graph calls, and sends you webhooks when anything changes.

Is EmailEngine a mail server?

No. It connects to email accounts that already exist. It does not host mailboxes, create addresses or replace your email provider.

Where does the email data live?

On your infrastructure, and in the original mailbox. EmailEngine caches only metadata in your own Redis: message IDs, flags and folder structure. Message content is fetched on demand and never copied to a third-party server. We have no access to your instance, data or credentials.

Does EmailEngine help with GDPR, HIPAA or data residency?

It removes the part that is usually hardest. EmailEngine runs on your own infrastructure, so your users' mail never reaches us: for that data we are neither controller nor processor, there is no sub-processor to declare and no data processing agreement to negotiate. Message content is fetched on demand and never copied to a third-party server, and only sync metadata is cached, in Redis you control. Because you choose where it all runs, data-residency requirements are yours to satisfy directly. Compliance itself remains a property of your deployment rather than something software can grant.

Does EmailEngine keep a history of messages and webhook deliveries?

No, and that is deliberate. EmailEngine is a gateway, not a datastore. Everything lives in Redis, so it holds live queues and sync metadata and discards jobs once they have completed or permanently failed. There is no sent-mail archive and no webhook delivery log. Webhooks are retried up to ten times with exponential backoff, and you can raise the job history limit if you want failed jobs to stick around for inspection. For anything longer-lived, record events on your side as they arrive.

How much does EmailEngine cost?

$995 or €995 per year. One subscription covers unlimited instances, unlimited connected mailboxes and unlimited API calls, including your development and staging environments. There is no per-mailbox or per-message metering.

Can I build EmailEngine into a product I sell?

Yes, with an active subscription, as long as you keep direct management of the EmailEngine instances. Your customers use your product as end users and never need a licence of their own, so a CRM serving a thousand companies still runs on one subscription. What they cannot do is run their own instances or build their own services on top of EmailEngine.

What do I need to run it?

A server and Redis. EmailEngine ships as a single binary, a Docker image, an npm package and an installer script. Redis is used as a database rather than a cache, so it must run with the noeviction policy. Low latency between the two matters more than raw CPU.

How many mailboxes can one instance handle?

Several thousand. EmailEngine scales vertically; past that you shard across instances, each with its own Redis. Several instances sharing a single Redis database is not supported, and running multiple copies against one database will cause every instance to sync every account.

Which protocols are supported?

IMAP and SMTP for any provider, plus native Gmail API and Microsoft Graph integrations. POP3, ActiveSync and Exchange Web Services are not supported.

Is there a trial?

Yes. 14 days, full functionality, started from the dashboard of your own instance. No sign-up, no credit card. When it expires EmailEngine stops processing accounts, but your data stays where it is and activating a licence picks up where you left off.

Is EmailEngine open source?

It is source available. You can read, audit and build the code, but running it beyond the trial requires a subscription. The licence spells out what is and isn't permitted.

Something else?

The documentation covers most of it, and the support channels are listed there too.

Release notes, occasionally

EmailEngine ships a release every few days. Get a short summary when something meaningful lands.