Move off EmailEngine without signing anyone in again.
We copy your EmailEngine accounts, OAuth apps and stored templates into your workwae workspace, grants and all. Mailboxes keep working with the consent they already gave, and our team runs the import for you: there is nothing to install.
# The plan we review with you (example)
Accounts 40 found
37 import with their existing grants
3 need a reconnect through hosted connect
OAuth apps 2 become workspace OAuth apps
Templates 6 import
# Nothing is written until you approve the plan
More than a mailbox connection
The accounts you bring over land in a hosted, multi-tenant platform with mail, calendars, contacts and meetings behind one API.
Multi-tenant by design
Your accounts live in a tenant with its own API keys, members and roles, audit log, usage metering and data exports.
A synced index in Postgres
Mailboxes, messages and threads are indexed as they sync, with full-text search over subjects, addresses, snippets and stored bodies. API writes show up immediately.
Calendars, contacts, meetings
Every calendar the account can see, with recurring series, RSVP and free/busy, plus contacts, CalDAV and CardDAV, and Zoom and Webex meetings on events.
Hosted connect
Hosted and headless connect flows for Google, Microsoft and IMAP, with your own OAuth apps and a consent page that names your organization.
Change feed and webhooks
A change feed paged by transaction id, so nothing committed out of order is skipped, and signed webhooks from the same feed with a delivery log and replays.
Credentials sealed in Vault
Refresh tokens, passwords and app secrets are sealed with Vault before they are stored. Imported grants are sealed as they arrive.
We run the import with you
workwae is a hosted service, so our team runs the import on our side and you don't install or run anything. It reads EmailEngine's Redis directly instead of its API, because connecting through an API would sign every account in again.
-
Share read access
You share read access to your EmailEngine's Redis and the
EENGINE_SECRETit runs with through a one-time encrypted link we send. We use them only for the import and delete them when it finishes. -
Dry run
We start with a dry run that writes nothing. It lists, per account, what imports, how it signs in, what needs a reconnect and which fields are not carried over.
-
Review together
We go through the plan with you. To move a few mailboxes first, we limit the import to the accounts you name.
-
Apply
Each account is written in its own transaction and announced with
account.connected. A JSON report records every account and template. -
Accounts start syncing
Nothing is refreshed against Google or Microsoft during the import. workwae checks each account on its first sync, which ends with
account.initialized. -
Reconnect the rest
Accounts reported as needing a reconnect sign in again through hosted connect. Then you point your app at the workwae API.
Accounts, apps and templates
A refresh token works only with the client that issued it, so your OAuth apps move with the same client id and secret.
| In EmailEngine | In workwae |
|---|---|
| OAuth2 account, API mode | A Gmail or Microsoft Graph account (Microsoft cloud taken from the app), with its refresh token, a still valid access token and the granted scopes |
| OAuth2 account, IMAP mode | An IMAP account using XOAUTH2 on the provider's servers |
| Password account | An IMAP account; EmailEngine's copy becomes appendSent |
| OAuth2 app | A tenant OAuth app with the same client id and secret, or an existing matching one; an app holding our platform client id maps to the platform app |
| Gmail service account app | A Google domain-wide delegation connection with the same key and scopes |
| Outlook application app | A Microsoft app-only connection for the same directory |
| Shared mailbox opened through another account's grant |
A shared mailbox of that account, when its grant has
Mail.ReadWrite.Shared
|
| Account name | displayName; calendar and contacts turn on only if the grant covers them |
| Stored templates | Public templates become shared templates, account templates follow their account; Markdown templates stay Markdown |
Listed as not carried over
Every other EmailEngine field is named per account in the plan and the report, so nothing is dropped silently:
- Folder
pathand folder overrides - Webhooks and
notifyFrom - Proxy and TLS options
- Locale and time zone
Reported as needing a reconnect
These accounts are reported, the run goes on, and they sign in again afterward:
- Accounts whose OAuth app is gone or uses the old settings-based configuration
- Credentials from EmailEngine's authentication server
- IMAP logins with integrator-supplied access tokens
- Shared mailboxes opened with their own grant, and grants that only send
- Service account apps without a key file, and Mail.ru accounts
Careful by default
What keeps the import safe, and what stops it before anything is written.
-
Dry run first
Nothing is written to your workspace until you have seen the plan and approved it.
-
Stops on a wrong secret
If the secret can't decrypt your stored credentials, the import stops before writing anything.
-
Only the accounts you choose
Move everything at once, or a few named mailboxes first and the rest later.
-
Safe to rerun
An account already in the workspace, by provider and address or by its EmailEngine id, is skipped. Imported templates are skipped the same way.
-
Plan limits respected
An account refused by your plan's account limit is reported, and the run goes on with the others.
-
Template names kept
A template whose name is already taken gets its EmailEngine id appended instead of replacing yours.
-
Read-only on your side
The import reads EmailEngine's Redis and changes nothing in it, so your EmailEngine keeps running until you switch over.
Questions teams ask
Will our users have to sign in again?
Not for accounts that carry over. Their refresh tokens, passwords and granted scopes move with them, and your OAuth apps keep the same client id and secret, so the existing grants keep working.
Only the accounts the plan reports as needing a reconnect sign in again, through hosted connect. You see the full list in the dry run before anything is written.
Is there downtime?
The import only reads EmailEngine's Redis, so EmailEngine keeps serving your app while it runs. Each account starts syncing in workwae once it is written, and you switch your app over when you are ready.
You can move a few mailboxes first and the rest later. Message ids are new in workwae, and each account's first sync builds its index before change events start.
What happens to our webhooks?
EmailEngine webhook settings are not carried over; the plan lists them per account.
You add webhook endpoints in workwae, filtered by event type or account, and verify
deliveries with the SDK's parseWebhook.
Each imported account emits account.connected, and its first sync ends
with one account.initialized. The change feed carries the same events
if you would rather poll. See the
webhooks guide.
Do our own OAuth apps keep working?
Yes. Each EmailEngine app becomes a tenant OAuth app with the same client id and secret, which existing refresh tokens need. To connect new accounts through the same app, add workwae's callback URL to it.
Accounts on your own Google app are polled until you set up Gmail push for that app; the connect guide covers both.
Do calendars and contacts come along?
Calendar and contacts sync turn on for an imported account only when its grant already covers them. Otherwise they stay off until the account grants more access.
Which EmailEngine versions are supported?
EmailEngine 2.x. The import reads its Redis storage directly and needs the
EENGINE_SECRET the instance runs with.
How do we share the secret and Redis access safely?
Through a one-time encrypted link we send you, never by email or chat. We use them only to run the import and delete them when it finishes. Closing that Redis access on your side afterwards is a good idea too.
Who runs the import?
Our team. workwae is a hosted service, so the import runs on our side: a dry run, a review with you, then the import. You don't install or run anything.
Ready to move off EmailEngine?
Tell us about your EmailEngine setup and we will plan the import with you.