Catch-all & Routing

How to migrate catch-all email without losing old addresses

List the old names before you cut MX. Promote them. Hold unknowns. Do not dual-publish leftover hosts.

MailerZ editorial · Secuno LLC16 min read

To migrate catch all email without losing old addresses, list the local-parts people already use, turn those strings into named aliases, then move MX. Do not cut the old host’s catch-all on the same morning you publish new MX if the list is incomplete. Old invoices, vendor portals, and conference badges keep sending to names you forgot. Those names are the migration, not the toggle.

Migrate catch all email: inventory old printed names, promote aliases, then cut MX
Inventory first. Promote second. Cut MX third. Timed FORWARD is a safety net, not the plan.

Quick answer for migrate catch all email

Catch-all on the old host accepted every local-part. Your new system will not, unless you recreate the names or enable a new catch-all. MailerZ Free holds unknowns. Paid plans can FORWARD them. Neither path imports the old host’s invisible address book. You have to write the strings.

SMTP still follows MX as IETF RFC 5321 — Simple Mail Transfer Protocol describes. After cutover, senders who used jen@ on an invoice in 2019 will hit your new MX. If jen is not an alias and FORWARD is off, the message is held or rejected. The sender thinks the company vanished. You think DNS failed. The failure is an incomplete inventory.

Safe order: export prints and logs, create named aliases, prove them from another mailbox, publish one MX set, delete leftover MX, watch unknowns for a week, promote stragglers, then leave FORWARD off. Dual MX during the move is a hard stop. Some senders will stay on Google or the old host and never hit the new table.

If you cannot list the names, run paid FORWARD as a short audit after cutover, not as a permanent copy of the old catch-all. Copy real local-parts into aliases. Turn FORWARD off. That is how you migrate catch all email without accepting everything forever and without dropping the addresses that still pay invoices. Product split: aliases and catch-all routing.

Add the domain and map the names you already printed. Prove them before you touch MX.

Start free — one domain

The real decision behind a catch-all migration

Teams migrate because the old host is noisy, expensive, or closing. They keep catch-all “so nothing breaks.” Then they publish MailerZ MX next to leftover Google MX, disable the old catch-all, and spend a month chasing random loss. Three decisions got collapsed into one Friday.

Decision one: which old names must keep working. Those become aliases. Decision two: what happens to names you still cannot list. Hold, reject, or a timed FORWARD. Decision three: when MX flips. MX flips last, once, to one provider.

“Losing old addresses” has two meanings. The first is a printed string that stops accepting mail. That is a missing alias. The second is a mailbox archive on the old host. MailerZ is not an archive. 14-day Free and 90-day paid hop store recover failed or held hops, not years of vendor mail. Copy archives out of the old host before you cancel it. This article covers the first meaning.

Where old addresses hide

  • Site footers, legal pages, and “contact us” forms that still post a local-part.
  • PDF invoices, quotes, and contracts emailed years ago.
  • App Store, Play Store, Stripe, banks, and tax portals.
  • SSO and vendor admin users that were never a “role.”
  • Conference badges, email signatures, and CRM default fields.
  • Old catch-all logs if the host still lets you export recipients.

If the old host can export accepted local-parts, take that export. It will include spam. Filter to strings that look like people, roles, or products you shipped. Promote those. Leave dictionary noise off the new table.

If there is no export, you build the list from prints plus a watch window. Do not guess fifty variants of info@. Guessing wastes alias slots and still misses j.smith@ on a 2018 PO.

Agencies should treat each client domain as its own inventory. A shared “we always enable catch-all on migrate” playbook is how old addresses die on one client and spam buries another. Write the list. Then pick hold or a seven-day FORWARD. Document which you chose.

Founders on Free have three aliases. That is enough only if the printed surface is small. A ten-year catch-all domain usually needs Solo or Starter so you can promote the real names. Paying for alias capacity is cheaper than leaving FORWARD on forever and staffing a dump.

Technical mail flow during cutover

Before cutover, senders resolve the old MX and the old host accepts unmatched local-parts. After cutover, senders resolve the new MX. Your alias table and unknown policy replace the old catch-all. There is no automatic copy of the old accept list. SMTP has no “forward my catch-all memory” command.

Catch-all migration flow from old host export to one MX set and a watch window
Export and promote before MX. Delete leftover hosts. Watch unknowns. Close FORWARD.

What must stay true on both sides of the cut

One MX set. Leftover MX from Google, Microsoft, or the registrar splits senders. Mixed records are a hard stop. Some old addresses will appear to work because they still hit the old host. Others will hit MailerZ and hold. The pattern looks random. It is DNS.

MailerZ rewrites envelope MAIL FROM with SRS. Header From, Subject, Date, Message-ID, body, and MIME stay original. Destination filters still score the sender. Inbox placement is not an SLA. SPF, DKIM, and DMARC stay your outbound job if you send as the domain after the move. Specs: IETF RFC 7208 — Sender Policy Framework (SPF), IETF RFC 6376 — DomainKeys Identified Mail (DKIM), IETF RFC 7489 — Domain-based Message Authentication, Reporting, and Conformance (DMARC).

Free holds unknowns. Paid FORWARD is optional. Unhosted or unauthorized recipients still get SMTP 550. MailerZ is not an open relay. Migrating catch-all does not let you accept mail for domains you do not verify.

TTL and the dangerous week

Lower MX TTL a day before the cut if you control it. After you delete leftover MX, some caches still point at the old host. That is expected for the TTL window. Do not add the old MX back “to be safe.” You extend the split. Keep the old host accepting mail until caches die, then cancel it. During that window, old catch-all on the old host can still receive a fraction of traffic. New names you only created on MailerZ will not.

Self-send tests lie. Gmail can short-circuit mail to itself. Prove every promoted name from an unrelated mailbox. That is the same rule as day-to-day forwarding, and it matters more on cutover day when you are tired.

Plus tags on the old Gmail destination are not old domain addresses. Google Gmail Help — Using an address alias (plus addressing) is a store feature. MailerZ does not strip plus tags on custom domains. If vendors used billing+acme@yourdomain.com, create that full local-part or they will miss after the old catch-all dies.

Step-by-step migration path

Use this order. Skipping inventory is the usual way old addresses die. Skipping leftover MX deletion is the usual way the death looks random.

  1. Export the old world. Download catch-all logs if they exist. Crawl the site, invoices, portals, and signatures. One spreadsheet. Column A is the local-part. Column B is the destination inbox the company will keep.
  2. Filter spam from the export. Drop dictionary names and obvious harvest. Keep people, roles, products, and anything that appeared on a legal or payment document.
  3. Create named aliases on MailerZ. Map each kept row. Destinations must be external mailboxes, not another alias that never exits the domain.
  4. Prove aliases before MX. You cannot prove public MX yet, but you can confirm the table is complete and destinations exist. After MX, you will prove inbound.
  5. Publish one MX set. Add verification TXT. Point MX at MailerZ. Delete leftover MX everywhere. Confirm with two public resolvers. Use DNS troubleshooting if resolvers disagree.
  6. Prove each promoted name. From another mailbox, unique titles, Header From and history. Do not sample three names and declare the domain done.
  7. Watch unknowns. Free hold shows attempted local-parts for 14 days. Paid store is 90 days. Promote real stragglers. If the list was badly incomplete, enable paid FORWARD for seven staffed days, then disable it.
  8. Decommission the old host last. After TTL and after you stop seeing old-host deliveries you still need. Copy any archive you legally need before you pay the last invoice.

Planner and docs: migration planner, docs. The planner does not replace the spreadsheet. It keeps the order honest.

Migration proof: each promoted name, one public MX set, unknowns held unless audit week
If a promoted name fails, fix that row before you debate catch-all again.

Worked cutovers

A consultancy used cPanel catch-all for eight years. Export showed 400 local-parts. Forty were real: partners, old employee first names still on bank portals, and two misspellings of support. They created those forty on Starter (50 aliases). MX flipped Friday. Hold stayed on. Two more bank names appeared in history on Monday. Those were promoted. FORWARD never went on. Old addresses that mattered survived. The other 360 guesses died quietly.

A retailer had no logs. Invoices used random staff first names. They mapped footer roles, enabled paid FORWARD for seven days, and watched Gmail. Each real invoice name became an alias. FORWARD went off on day eight. A late PO used a name they missed. History still had it inside the 90-day paid window. They promoted the name and asked finance to resend. That is recovery, not an archive of the PO itself.

A founder dual-published Google MX “until we are sure.” Half of vendors stayed on Workspace. The MailerZ table looked fine in tests from a non-Google mailbox and failed for senders that still preferred Google’s MX. They deleted leftover MX. Tests from two resolvers matched. The “lost old addresses” were leftover routing, not missing aliases.

Walk named versus unknown before the Friday cut. Then check leftover MX from public DNS.

Open the email routing lab

Failure modes and proof

Catch-all migration failures and the check that isolates them
SymptomLikely causeProof
Old printed name diesNot in the alias table. FORWARD off.Ask for the To: header. Promote that string.
Random names work, others failLeftover MX. Split senders.Two public resolvers. Delete leftover hosts.
Everything works in self-sendGmail short-circuit.Unrelated mailbox for every promoted name.
Spam flood after cutPaid FORWARD left on.Disable FORWARD. Keep promoted rows.
Old host still gets mailTTL or leftover MX you did not delete.Public MX. Wait TTL. Do not add old MX back.
Plus-tag vendor missesFull local-part never created.Create billing+vendor as its own alias.
Held name expiredFree 14-day window.Promote. Ask the sender to resend.
550 on send-as after migrateFree plan or unauthorized From.History SMTP text. Send-as is not catch-all.

Delivery recovery is the hop list for held and failed messages. Use it to read the local-part. Do not treat it as the old host’s archive. If you needed the original PDF that arrived in 2022, that copy lives in the old mailbox or your finance drive.

Loops appear when an old catch-all destination was another address on the same domain. Point destinations at Gmail or Outlook. End the chain.

Unauthorized send is unrelated to migration. Catch-all FORWARD does not grant SMTP. Free has no send-as. Paid send-as uses approved identities inside hourly and monthly caps. Configure that after inbound names work.

MailerZ workflow and product boundary

Secuno LLC operates MailerZ. Site: mailerz.net. App: mail.mailerz.net. Migration is alias inventory plus MX discipline. MailerZ does not import another host’s catch-all table.

What MailerZ does

  • Host named aliases on verified domains after you create them.
  • Hold unknowns on Free.
  • Optionally FORWARD unknowns on paid plans for a staffed window.
  • Preserve Header From. Envelope SRS only.
  • Keep hop history 14 days on Free, 90 on paid.
  • Refuse open relay with SMTP 550 for unhosted or unauthorized recipients.

What MailerZ does not do

  • Copy years of old-host mail into a new store.
  • Auto-discover every local-part the old catch-all accepted.
  • Strip plus tags on your custom domain.
  • Rewrite Header From or MIME.
  • Offer FORWARD or send-as on Free.
  • Provide IMAP, Calendar, or a legal archive.
  • Promise inbox placement, uptime SLAs, review counts, SOC 2, ISO 27001, or HIPAA. Controls: Security and Trust Center.

Plans: pricing. Free: $0, one domain, three aliases, one seat, 14-day store, send-as disabled, SMTP and API disabled. Solo: $40/year, 15 aliases, 90-day store, 1,000 outgoing, 5 send-as/hour. Starter: $8 or $80, five domains, 50 aliases, five seats, 2,000 outgoing, 10/hour. Business: $19 or $190, 25 / 200 / 25, 4,000 outgoing, 15/hour. Agency: $39 or $390, 100 / 500 / 50, 8,000 outgoing, 25/hour. Annual Starter, Business, and Agency include two months free versus monthly. Solo is yearly only. Limits are capacity. A long catch-all history usually needs more than three aliases.

Seats are dashboard operators, not migrated mailboxes. Forwarding model: email forwarding.

Cost, alternatives, and trade-offs

The expensive migrate is the one you rush. A week of inventory is cheaper than a month of lost vendor mail and a permanent spam dump.

Ways to leave an old catch-all
ApproachYou getYou give up
Inventory + named aliasesKnown old prints keep working.Names you never listed, unless you audit.
Hold after cutoverSee stragglers without inbox noise.14- or 90-day hop window. Sender may need to resend.
Seven-day paid FORWARDUnlisted real names surface fast.Spam that week. Must turn it off.
Permanent new catch-allYou skip the spreadsheet.Ownership. The dump moves with you.
Stay on the old hostNo cutover risk this month.Whatever problem made you leave.

A Workspace seat per old first-name is the costly way to keep prints. Google’s overview: Google Workspace — product overview. Buy the suite when you need Calendar and a hosted mailbox. Do not buy seats to simulate a catch-all you are trying to escape. Do not invent review counts when you compare.

Best practice for migrate catch all email: write the list, promote it, one MX set, hold or a short FORWARD, then close the door. Old addresses you can name survive. Addresses that were only guesses do not need to.

Inventory worksheet that actually gets finished

Column A is the local-part exactly as printed, including plus tags if a vendor stored one. Column B is where you saw it: footer, PDF, portal, badge, log export. Column C is the destination inbox the company will still own in a year. Column D is proof: Message-ID of the inbound test, or “not yet.” Column E is kill or keep. Rows without a source in B are guesses. Do not create them unless money is attached.

Run the worksheet in one sitting for a small domain. For an agency client, time-box two hours with the client on the call. They remember the bank portal. You remember the MX. If they refuse to sit, you will enable FORWARD and they will still blame you when a forgotten name dies after you turn it off. Put that risk in the statement of work.

Parallel work that is not optional: export the old mailbox if you need archives, photograph current public MX, and write the rollback you will not use. Rollback is “put the old MX back and accept a split for TTL,” not “add both MX at once and hope.” Adding both MX is the bug. Rollback after a failed proof is a conscious split measured in hours, then you delete leftover MX again.

After the first week, schedule a 30-day check. Paid history still has hops. Free may not. Promote anything that looks like a person or a payment. Do not reopen FORWARD because the inbox felt quiet. Quiet is the point. The migration succeeded when old prints still arrive and dictionary names do not.

Communicate the cut to humans, not only to DNS. Tell finance which billing aliases stay. Tell vendors if a personal first-name address is being retired. A named alias you intend to kill should get a 30-day notice and a forward to the surviving role, then deletion. Silent deletion of a printed name is how “the migration lost mail” stories start even when MX was clean.

If a regulator or a customer contract requires you to keep accepting a specific address, that address is a named alias with an owner, not a reason to keep catch-all. Write the obligation next to the row. Catch-all cannot prove you accepted a required name. A named row plus a test Message-ID can.

Do not migrate catch-all in the same change window as a brand rename. If the company is also moving from oldbrand.test to newbrand.test, finish the catch-all inventory on the old domain first, keep that domain’s MX stable, then introduce the new domain as its own named table. Two moving parts lose old addresses in ways no single log explains. One domain per cutover.

FAQ

What is the safest way to handle migrate catch all email?

Inventory every printed local-part before you change MX. Promote those names to aliases. Cut to one MX set and delete leftover hosts. Keep unknowns on hold, or run a short paid FORWARD audit, then turn FORWARD off. Do not disable old catch-all on cutover day if the list is incomplete.

Does this require a new mailbox?

No. Migration moves routing rules, not seats. MailerZ is not IMAP. Point old names at Gmail or Outlook inboxes the company keeps. Buy a suite seat only if you still need a hosted mailbox and Calendar.

Will it work with Gmail or Outlook?

Yes as destinations. Promoted aliases land in the inbox you already use. Header From stays the original sender. Envelope MAIL FROM uses SRS. Free holds unknowns and has no send-as. Probe every promoted name from another mailbox.

What DNS records are involved?

A verification TXT, one new MX set, leftover MX removal at Google, Microsoft, and the registrar, and SPF, DKIM, and DMARC if you send as the domain. Dual MX during cutover loses old addresses in a pattern that looks random.

What should I test before production?

From an unrelated mailbox send a unique title to every promoted name. Confirm Header From, destination, and history. Send one invented local-part and confirm hold unless you enabled a timed paid FORWARD. Check public MX from two resolvers.

Key takeaways

  • Old catch-all memory does not move with MX.
  • Inventory printed names before you cut the old host.
  • Promote those names to aliases with destinations you keep.
  • One MX set. Leftover MX is a hard stop.
  • Free holds unknowns. Paid FORWARD is a timed audit.
  • Do not disable old catch-all until the new table exists.
  • Prove every promoted name from another mailbox.
  • Hop store is 14 or 90 days, not a finance archive.
  • Header From stays original. Envelope SRS only.
  • MailerZ is not IMAP, not a suite, and not SOC 2.

Conclusion and next action

If you came here to migrate catch all email, the work is a list, not a toggle. Names you write down survive. Names you assume will follow you do not. Dual MX and a same-day catch-all disable are how old addresses die in public.

MailerZ fits a clean cut: named aliases, Free hold, optional paid FORWARD for a week you staff, hop history you can read. It does not import the old host and it does not keep mail forever. Start on Free only if three names cover the prints. Pay when the inventory is longer or you need the 90-day window.

Next action: open the spreadsheet, paste every printed local-part, map destinations, then register one domain and create those aliases before you touch MX.

Ready to move the names you can list

Start free with one domain after the inventory exists.

Three aliases on Free. Upgrade when the old catch-all list is longer than three.

Review quarterly, or sooner if hold windows or MX guidance changes. Author: MailerZ editorial, Secuno LLC.