An Email Provider Migration Checklist With a Rollback Plan

An Email Provider Migration Checklist With a Rollback Plan

Move email providers while preserving preferences, suppressions, notification identities, delivery events and a rollback path that avoids duplicate sends.

MailBlastr Team

TL;DR

  • Inventory senders, templates, preferences, suppressions, webhooks and queued work before changing providers.
  • Test the new provider with controlled recipients, then move a defined portion of traffic while preserving notification identities.
  • Keep rollback possible without sending the same business event through both providers.
  • Finish only after delivery events, suppression behavior, replies and application outcomes have been reconciled.

Define what is moving

An email provider migration is more than replacing an API URL. Your application depends on response shapes, idempotency behavior, domain authentication, event schemas, rate limits and message rendering. A successful test email covers only a small part of that contract.

Create an inventory by message category. For each category, record the trigger, From address, Reply-To address, template, recipient eligibility rule, expected latency and owner. Include quiet operational messages such as billing failures or account invitations, not just the high-volume newsletter.

Then list the systems that consume provider events. A bounce webhook might update suppression, while a delivery event may feed a support dashboard. If those integrations stop working during migration, your application can keep sending while losing the information needed to do it responsibly.

Preserve restrictions before importing the audience

Move global suppressions and topic preferences with their scope and reasons. Importing contacts first and sending before restrictions arrive creates an avoidable risk. A new provider should not become an opportunity to contact people who already opted out.

Map old categories to the new provider's behavior explicitly. In MailBlastr, an account-wide suppression and a topic opt-out have different effects. Do not flatten them into one ambiguous Boolean field. Review the suppression-list guide before designing the import.

Use a small controlled data set to test the mapping. Include an eligible recipient, a globally suppressed address and someone opted out of only one topic. Compare the expected and actual send decisions before moving real traffic.

Verify domains without disrupting existing delivery

Add the new provider's required records alongside the existing configuration where valid, and preserve records the old provider still needs during the transition. Review the complete SPF and DKIM setup rather than blindly adding another record at the same hostname.

Do not remove old authentication records until you have confirmed that no remaining application, worker or scheduled campaign uses them. Also distinguish outbound authentication from receiving-mail routing; changing MX records without a receiving-mail plan can break replies or employee inboxes.

Send controlled messages from every intended From domain. Inspect the received authentication results and test replies. If you use Apple private relay addresses, include that case because changing sender identities can require corresponding source registration updates.

Keep the business event independent of the provider

Use an application-level notification ID to represent the intended message. Store the chosen provider, payload version and submission result against that identity. Provider-specific message IDs are useful evidence, but they should not be the only way to recognize that a receipt or invitation was already sent.

A timeout is an uncertain result, not proof that the old provider did nothing. Do not automatically submit the same event to the new provider with a fresh identity. Reconcile the outcome or retry through the original provider's supported idempotency mechanism first.

For the cutover, assign each new notification to one provider using a stable rule. Avoid routing based on a random choice on every retry. The idempotency guide explains why preserving identity and payload matters when networks fail.

Move traffic in observable stages

Start with internal controlled recipients and representative templates. Check HTML, plain text, attachments, Unicode, links and unusual recipient values. Then move a small defined category or cohort whose results your team can inspect.

Choose stop conditions before increasing traffic. Examples include unexpected bounce patterns, missing webhook processing, sustained submission errors or queue age exceeding the useful lifetime of messages. Use thresholds appropriate to your own baseline; an invented universal percentage is not a migration plan.

Reconcile counts across application notifications, provider submissions and received events. Expect legitimate differences from suppressions and asynchronous delivery, but make them explainable. A graph that looks healthy while half the webhooks are rejected is insufficient evidence to proceed.

Write rollback as a routing change

Rollback should stop assigning new work to the new provider and route eligible new notifications back to the old one. It should not replay every recent event. Keep already-submitted work associated with its original provider until its outcome is known.

Maintain both webhook receivers during the overlap, and deduplicate events using the appropriate provider and event identity. An old event arriving late must not overwrite a newer application state incorrectly.

Record the cutover time, routing rule and decision owner. Keep credentials available only for the necessary transition window, then revoke unused access through the provider's normal management workflow.

Close the migration with evidence

Verify the message categories again after full cutover, including low-frequency flows. Confirm replies, suppression updates, delivery reporting and support lookup all work. Drain or retire the old queue deliberately and document any unresolved events.

MailBlastr's email testing checklist can serve as the acceptance checklist for the new integration. The migration is finished when the application behaves correctly around the provider, including failures and preferences, not merely when the new key sends a message.