Files

2.4 KiB

IMAP Email Migration — SiteGround → MXroute

Source Server Quirks (SiteGround)

  • IMAP host: c1113726.sgvps.net:993
  • Folder separator is . (not /)
  • Folders are subfolders of INBOX (e.g. INBOX.Trash, INBOX.Sent Messages, INBOX.Deleted Messages)
  • The LIST response format is nonstandard: (\HasChildren) "." INBOX — folder names often appear as .
  • Folder names with spaces use quotes in SELECT: select('"INBOX.Sent Messages"')
  • Explicit folder names to check: INBOX, INBOX.Trash, INBOX.spam, INBOX.Junk, INBOX.Drafts, INBOX.Sent, INBOX.Sent Messages, INBOX.Deleted Messages, INBOX.Archive
  • Do NOT rely on LIST response parsing to discover all folders — the SiteGround/CoreMail server returns many . (root) entries that mask subfolders. Use a hardcoded list of known folder names and test each with SELECT.

Migration Pattern

old = imaplib.IMAP4_SSL(OLD_HOST, 993)
old.login(email, old_pw)
new = imaplib.IMAP4_SSL(NEW_HOST, 993)
new.login(email, new_pw)

# Hard-code folder mappings
FOLDERS = [
    ("INBOX", "INBOX"),
    ("INBOX.Deleted Messages", "Trash"),
    ("INBOX.Sent Messages", "Sent"),
    ("INBOX.Sent", "Sent"),
    ("INBOX.Trash", "Trash"),
    ("INBOX.Drafts", "Drafts"),
    ("INBOX.spam", "INBOX.spam"),
    ("INBOX.Junk", "Junk"),
    ("INBOX.Archive", "Archive"),
]

for src, dst in FOLDERS:
    old.select('"' + src + '"')
    # Search ALL, fetch each UID with (RFC822), append to destination
    # new.append(folder, flags, date_time, email_bytes)

After Migration Checklist

  • DNS: MX records must point to new host. Verify with dig +short MX domain.com
  • SPF: Must include new mail provider. Typical MXroute SPF: v=spf1 include:mxroute.com -all
  • Test both IMAP login and send capabilities before removing old provider
  • If old provider had SMTP as part of its plan, the SMTP sends may stop immediately on migration even though IMAP continues working during overlap

IMAP-to-IMAP Copy Pitfalls

  • COPY command only works between folders on the same server. Use FETCH + APPEND to cross servers.
  • Append preserves email content but may not preserve flags (read/unread). Read emails will appear as unread on the new server.
  • Use uid for FETCH to avoid race conditions with concurrent incoming mail.
  • Set a reasonable timeout (30s+ per FETCH for large messages). Batch in small groups for progress visibility.