ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

ย้ายอีเมลข้ามผู้ให้บริการด้วย imapsync
Home ย้ายอีเมลข้ามผู้ให้บริการด้วย imapsync

ย้ายอีเมลข้ามผู้ให้บริการด้วย imapsync

เมื่อย้ายระบบอีเมลขององค์กร สิ่งที่ผู้ใช้กังวลที่สุดคืออีเมลเก่าหลายปีจะหายไปหรือไม่ imapsync เป็นเครื่องมือที่คัดลอกอีเมลจากเซิร์ฟเวอร์หนึ่งไปอีกเซิร์ฟเวอร์หนึ่งผ่าน IMAP โดยรักษาโครงสร้างโฟลเดอร์ สถานะอ่านแล้ว การติดดาว และวันที่เดิมไว้ครบ

จุดเด่นที่ทำให้ใช้ได้จริงคือมันทำงานซ้ำได้ ครั้งที่สองจะคัดลอกเฉพาะอีเมลใหม่ ทำให้ย้ายล่วงหน้าได้แล้วค่อยซิงก์รอบสุดท้ายในวันเปลี่ยนระบบ

สิ่งที่ต้องเตรียม

  • เครื่อง Linux สำหรับรันคำสั่ง ไม่จำเป็นต้องเป็นเซิร์ฟเวอร์อีเมล
  • ชื่อผู้ใช้และรหัสผ่านของทั้งสองฝั่ง ทุกบัญชีที่จะย้าย
  • ที่อยู่เซิร์ฟเวอร์ IMAP ของทั้งสองฝั่ง
  • บัญชีปลายทางที่สร้างไว้เรียบร้อยแล้ว

ขั้นตอนที่ 1: ติดตั้ง

# Ubuntu / Debian
sudo apt update
sudo apt install -y imapsync

# AlmaLinux / Rocky Linux
sudo dnf install -y epel-release
sudo dnf install -y imapsync

imapsync --version

ขั้นตอนที่ 2: ทดสอบการเชื่อมต่อทั้งสองฝั่งก่อน

# ทดสอบว่าเข้าถึงเซิร์ฟเวอร์ได้
openssl s_client -connect imap.old-provider.com:993 -crlf </dev/null 2>/dev/null | head -3
openssl s_client -connect imap.example.com:993 -crlf </dev/null 2>/dev/null | head -3

ทดสอบรหัสผ่านด้วย imapsync โดยไม่คัดลอกอะไร

imapsync \
  --host1 imap.old-provider.com --user1 [email protected] --password1 'รหัสเก่า' --ssl1 \
  --host2 imap.example.com     --user2 [email protected] --password2 'รหัสใหม่' --ssl2 \
  --justlogin

หากผ่านจะแสดง Success login on both sides หากไม่ผ่าน อ่านข้อความผิดพลาดซึ่งมักบอกชัดว่าฝั่งไหนมีปัญหา

ขั้นตอนที่ 3: ดูโครงสร้างโฟลเดอร์ก่อน

imapsync \
  --host1 imap.old-provider.com --user1 [email protected] --password1 'รหัสเก่า' --ssl1 \
  --host2 imap.example.com     --user2 [email protected] --password2 'รหัสใหม่' --ssl2 \
  --justfolders --dry

ดูว่าชื่อโฟลเดอร์ทั้งสองฝั่งตรงกันหรือไม่ ผู้ให้บริการแต่ละรายตั้งชื่อโฟลเดอร์มาตรฐานต่างกัน เช่น Sent Items กับ Sent ซึ่งต้องจับคู่ให้ถูก

ขั้นตอนที่ 4: ซ้อมก่อนย้ายจริง

imapsync \
  --host1 imap.old-provider.com --user1 [email protected] --password1 'รหัสเก่า' --ssl1 \
  --host2 imap.example.com     --user2 [email protected] --password2 'รหัสใหม่' --ssl2 \
  --dry --nofoldersizes

โหมด --dry แสดงว่าจะคัดลอกอะไรบ้างโดยไม่เขียนจริง อ่านผลสรุปท้ายสุดว่าจะย้ายกี่ฉบับและขนาดเท่าไร

ขั้นตอนที่ 5: ย้ายจริง

imapsync \
  --host1 imap.old-provider.com --user1 [email protected] --password1 'รหัสเก่า' --ssl1 \
  --host2 imap.example.com     --user2 [email protected] --password2 'รหัสใหม่' --ssl2 \
  --automap \
  --skipsize \
  --useheader 'Message-Id' --useheader 'Date' \
  --addheader \
  --logfile /var/log/imapsync/somchai.log

ความหมายของตัวเลือกสำคัญ

  • --automap จับคู่โฟลเดอร์มาตรฐานให้อัตโนมัติ เช่น Sent กับ Sent Items
  • --useheader ใช้ส่วนหัวระบุว่าอีเมลฉบับไหนซ้ำ ทำให้รันซ้ำได้โดยไม่คัดลอกซ้ำ
  • --skipsize ไม่เทียบขนาด ซึ่งจำเป็นเมื่อสองฝั่งเก็บอีเมลด้วยรูปแบบต่างกันเล็กน้อย
  • --addheader เพิ่มส่วนหัวบอกว่าอีเมลนี้ถูกย้ายมา ช่วยตรวจสอบภายหลัง

ย้ายเฉพาะบางโฟลเดอร์เมื่อจำเป็น

  --folder 'INBOX' --folder 'Sent'
  --exclude 'Trash|Junk|Spam'

การข้ามถังขยะและสแปมประหยัดเวลาได้มากและมักไม่มีใครต้องการข้อมูลนั้น

ขั้นตอนที่ 6: ย้ายหลายบัญชีพร้อมกัน

sudo mkdir -p /root/migration /var/log/imapsync
sudo nano /root/migration/accounts.csv
[email protected];รหัสเก่า1;[email protected];รหัสใหม่1
[email protected];รหัสเก่า2;[email protected];รหัสใหม่2
[email protected];รหัสเก่า3;[email protected];รหัสใหม่3
sudo chmod 600 /root/migration/accounts.csv
sudo nano /root/migration/run.sh
#!/bin/bash
set -uo pipefail

CSV=/root/migration/accounts.csv
LOG=/var/log/imapsync
H1=imap.old-provider.com
H2=imap.example.com

mkdir -p "$LOG"

while IFS=';' read -r u1 p1 u2 p2; do
  [ -z "${u1:-}" ] && continue
  echo "=== กำลังย้าย $u1 -> $u2  ($(date +%H:%M:%S))"

  imapsync \
    --host1 "$H1" --user1 "$u1" --password1 "$p1" --ssl1 \
    --host2 "$H2" --user2 "$u2" --password2 "$p2" --ssl2 \
    --automap --skipsize --addheader \
    --useheader 'Message-Id' --useheader 'Date' \
    --exclude 'Trash|Junk|Spam' \
    --logfile "$LOG/${u1//@/_}.log" \
    --nofoldersizes

  echo "    เสร็จ $u1 (exit=$?)"
done < "$CSV"

echo "ย้ายครบทุกบัญชีแล้ว"
sudo chmod 700 /root/migration/run.sh
sudo /root/migration/run.sh 2>&1 | tee /var/log/imapsync/summary.log

รันในหน้าต่าง tmux หรือ screen เพราะงานอาจใช้เวลาหลายชั่วโมงและจะหยุดหาก SSH หลุด

tmux new -s migration
sudo /root/migration/run.sh

ขั้นตอนที่ 7: ซิงก์รอบสุดท้ายและเปลี่ยน MX

ลำดับที่ทำให้ไม่มีอีเมลหาย

  1. ย้ายข้อมูลรอบแรกล่วงหน้าหลายวัน ซึ่งใช้เวลานานที่สุด
  2. เปลี่ยนระเบียน MX ไปยังระบบใหม่
  3. รอ 24-48 ชั่วโมงให้ DNS เผยแพร่ทั่วถึง
  4. รันซิงก์รอบสุดท้าย เพื่อดึงอีเมลที่ยังเข้าระบบเก่าระหว่างช่วงเปลี่ยนผ่าน
  5. เฝ้าดูระบบเก่าอีกหนึ่งสัปดาห์ว่ายังมีอีเมลเข้าหรือไม่
# รอบสุดท้าย รันคำสั่งเดิมซ้ำ จะคัดลอกเฉพาะที่ยังไม่มี
sudo /root/migration/run.sh

ขั้นตอนที่ 8: ตรวจสอบความครบถ้วน

# ดูสรุปจาก Log
grep -E 'Total bytes transferred|Messages transferred|Messages skipped' \
  /var/log/imapsync/somchai_example.com.log | tail -5

# ตรวจว่ามีข้อผิดพลาดหรือไม่
grep -i 'err\|fail' /var/log/imapsync/*.log | head -20

# นับจำนวนอีเมลทั้งสองฝั่ง
imapsync --host1 ... --host2 ... --justfoldersizes

ให้ผู้ใช้ตรวจสอบเองด้วย โดยขอให้เปิดโฟลเดอร์สำคัญและค้นหาอีเมลเก่าที่จำได้ ก่อนที่จะปิดระบบเดิม

ปัญหาที่พบบ่อย

ล็อกอินฝั่งต้นทางไม่ได้

ผู้ให้บริการหลายรายบังคับให้ใช้รหัสผ่านเฉพาะแอปแทนรหัสผ่านปกติเมื่อเปิดการยืนยันตัวตนสองขั้นตอน สร้างรหัสผ่านเฉพาะแอปก่อนแล้วใช้รหัสนั้น

ถูกจำกัดอัตราจนหยุดกลางคัน

ผู้ให้บริการบางรายจำกัดจำนวนการเชื่อมต่อและอัตราการดึงข้อมูล เพิ่มการหน่วงเวลา

  --maxsleep 3 --maxbytespersecond 500000

และรันทีละบัญชี ไม่ใช่หลายบัญชีพร้อมกัน

ชื่อโฟลเดอร์ภาษาไทยเพี้ยน

เกิดจากการเข้ารหัสชื่อโฟลเดอร์ต่างกัน ลองใช้ตัวเลือกจับคู่ด้วยมือ

  --folder 'INBOX.งานเก่า' --f1f2 'INBOX.งานเก่า=INBOX/งานเก่า'

อีเมลถูกคัดลอกซ้ำเมื่อรันรอบสอง

ส่วนหัวที่ใช้ระบุความซ้ำไม่เหมือนกันทั้งสองฝั่ง ลองเพิ่ม --useheader 'Subject' ร่วมด้วย หรือใช้ --delete2duplicates เพื่อลบตัวซ้ำที่ปลายทาง

งานใช้เวลานานมาก

กล่องจดหมายขนาดหลายสิบกิกะไบต์อาจใช้เวลาข้ามคืน รันในช่วงกลางคืนและใช้ tmux เสมอ พิจารณาข้ามโฟลเดอร์ถังขยะและสแปมเพื่อลดเวลา

ต้องการให้ทีมงานช่วยย้ายระบบอีเมลขององค์กรโดยไม่มีอีเมลสูญหาย ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security