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.
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.
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.
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.
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.

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.
EmailEngine plus a Redis database, on your own machine. No account to create, no data to hand over.
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
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
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
Every install can activate its own 14-day trial from the dashboard. Full functionality, no sign-up, no credit card.
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.

EmailEngine stores and refreshes tokens for you, or calls your own authentication server if you already hold them.
Google Workspace domain-wide delegation and Workload Identity Federation; Microsoft 365 app-only access with no user login.
Microsoft 365 shared mailboxes, delegated accounts and Government Cloud tenants.
Resolve IMAP and SMTP settings from an email address so users only type their credentials.
Register Gmail or Outlook accounts for sending alone, with no mailbox syncing and no IMAP connection.
Let legacy clients that only speak password auth reach OAuth2-only accounts. EmailEngine handles the tokens in the background.

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.
Filter and reshape events with small JavaScript functions, then fan one event out to Slack, Discord, Zapier, n8n or your own endpoint.
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.
Query by sender, recipient, subject, body, date, header and thread, plus Gmail labels and Outlook categories.
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.
Download attachments, inline images as data URIs, and parse ICS invites out of incoming messages.
Export a mailbox to compressed NDJSON for archival, migration or legal discovery, resumable and encrypted at rest. (Beta)
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.

Stored templates with variables, and one API call that fans out into personalised messages with their own Message-IDs.
Queue a message for a future time, and use an idempotency key so a retried request never sends twice.
Optional tracking pixel and link rewriting, with known security scanners filtered out of the results.
Bounce and complaint parsing with ML-assisted classification, automatic blocklists and RFC 8058 one-click unsubscribe.
Route selected messages through an external relay while keeping the account's own identity.
Send a test message and get back SPF, DKIM, DMARC, BIMI and ARC results, plus which Gmail tab it landed in.

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.
Inspect, retry and cancel messages and webhook deliveries while they are still in the queue.
Switch on protocol logging for one account while you chase a problem, then download the transcript.
Issue tokens limited to one account, one scope, an IP range or a rate limit. Tokens are stored only as hashes.
Point EmailEngine at your own self-hosted Sentry from the admin UI.
Route outbound connections through HTTP or SOCKS proxies, globally or per account, and pin outbound IPs.
Rebrand the hosted authentication pages and run them in seven languages.
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.
Message bodies are fetched on demand from the original mailbox. Only sync metadata is cached, in Redis you control.
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.
AES-256-GCM encryption for every stored credential, OAuth2 token and secret.
OpenID Connect against any provider, Okta, passkeys and TOTP, with group-based authorisation and SSO-only mode.
Every admin sign-in, failed attempt and passkey change is written to the application log, ready to ship into your own SIEM.
There is no remote management channel and no backdoor. We cannot reach your instance even if you ask us to.
Postal Systems OÜ is an Estonian company. The full source is available for review by your security team.
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.
One subscription per company. Not per mailbox, not per instance, not per message.
$995 / year, or €995
Renews annually. Prices exclude VAT where applicable.
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.
Same features, same support, nothing here is reserved for it. What you are buying is the absence of a renewal.
CRM, SaaS and AI businesses run EmailEngine in production worldwide
Sync your users' correspondence with their contacts, and let them send from their own address without leaving your app.
Turn support@ into tickets, track conversations across a team, and reply with stored templates.
Banking, healthcare, legal and public sector teams that cannot place customer mailboxes with a hosted provider.
Build a modern webmail or mobile client on top of your existing hosting without implementing IMAP and MIME yourself.
Give an assistant structured, permissioned access to a user's mailbox so it can read, summarise and send on their behalf.
Bridge legacy applications that only speak IMAP and SMTP to OAuth2-only Microsoft 365 and Google Workspace tenants.
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.
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.
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.
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.
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.
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.
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.
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.
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.
No. It connects to email accounts that already exist. It does not host mailboxes, create addresses or replace your email provider.
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.
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.
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.
$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.
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.
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.
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.
IMAP and SMTP for any provider, plus native Gmail API and Microsoft Graph integrations. POP3, ActiveSync and Exchange Web Services are not supported.
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.
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.
The documentation covers most of it, and the support channels are listed there too.