# Hybrid Migration — User @geonet.co.id (cPanel vs Mailcow) > **Kapan baca:** User masih baca email di cPanel, tapi sudah masuk grup `Mail-Users` / punya mailbox Mailcow. --- ## Masalah ``` support@ (Mailcow) --kirim--> rbsetiawan@geonet.co.id | Postfix Mailcow: LOCAL delivery (karena mailbox ada di Mailcow) | inbox Mailcow saja X inbox cPanel (MX eksternal) ``` | Arah email | rbsetiawan baca di | Masuk ke | |------------|-------------------|----------| | Internet → MX cPanel | cPanel | ✅ cPanel | | support@ → rbsetiawan@ (internal Mailcow) | cPanel | ❌ hanya Mailcow | **Satu alamat email = satu inbox canonical.** Tidak bisa mailbox aktif di Mailcow **dan** inbox utama di cPanel untuk routing internal. --- ## Dua jalur per user ### Jalur A — Migrasi penuh ke Mailcow (disarankan jangka panjang) Sesuai [`email-sync-migration-concept.md`](./email-sync-migration-concept.md). | Step | Aksi | |------|------| | 1 | Tetap di grup `Mail-Users` | | 2 | Mailbox Mailcow aktif (LDAP) | | 3 | Tambah **fetchmail POP3** dari cPanel → Mailcow (seperti `support@`) | | 4 | User ganti Outlook → IMAP `sync.geonet.co.id` + password AD | | 5 | Inbox canonical = **Mailcow saja** | Email internal dari `support@` sudah masuk Mailcow — user tinggal baca di sana. ### Jalur B — Tetap di cPanel (belum migrasi) | Step | Aksi | |------|------| | 1 | **Keluarkan** user dari grup AD `Mail-Users` | | 2 | Nonaktifkan mailbox di Mailcow Admin (**Inactive**) | | 3 | LDAP sync: `docker exec mailcowdockerized-php-fpm-mailcow-1 php /crons/ldap-sync.php` | | 4 | **Transport map** → relay ke SMTP cPanel (wajib) | | 5 | Aktifkan alias (jika ada) agar SOGo terima penerima | | 6 | User tetap baca email di cPanel | Tanpa transport map: kirim internal dari Mailcow ke user tanpa mailbox → error `User unknown`. #### Transport map (Mailcow Admin UI) **Configuration → Routing → Transport maps → Add** | Field | Contoh `rbsetiawan@` | |-------|----------------------| | Destination | `rbsetiawan@geonet.co.id` | | Nexthop | `[sc138.idcloudhosting.cloud]:587` | | Username | `support@geonet.co.id` (sama relay outbound) | | Password | password SMTP cPanel relay | | Active | ✅ | Atau jalankan script: `scripts/setup-transport-cpanel-user.sh rbsetiawan@geonet.co.id` **Catatan:** Port **25** ke cPanel ditolak RBL (IP publik Mailcow). Pakai **587 + auth**. Verifikasi Postfix: `postmap -q rbsetiawan@geonet.co.id mysql:/opt/postfix/conf/sql/mysql_transport_maps.cf` → harus return `smtp_via_transport_maps:[sc138...]:587` --- ## Kebijakan tim (rekomendasi) | Fase user | Grup `Mail-Users` | Mailbox Mailcow | Baca email via | |-----------|-------------------|-----------------|----------------| | **Belum migrasi** | ❌ Jangan tambah dulu | ❌ | cPanel | | **Migrasi** | ✅ | ✅ | `sync.geonet.co.id` IMAP | | **support@** | ✅ | ✅ + fetchmail POP3 | Mailcow | **Jangan** masukkan semua user ke `Mail-Users` sekaligus jika masih pakai cPanel harian. --- ## Untuk kasus rbsetiawan@ saat ini (Jalur B — diterapkan 2026-07-06) | Item | Status | |------|--------| | Keluar grup `Mail-Users` | ✅ | | Mailbox Mailcow Inactive | ✅ (`active=0`) | | LDAP sync | ✅ | | Transport map → cPanel :587 | ✅ | | Alias aktif (SOGo RCPT) | ✅ | | Tes kirim support@ → rbsetiawan@ | ✅ verified — inbox cPanel | Email lama yang sudah masuk inbox Mailcow **tidak otomatis pindah** ke cPanel. Untuk migrasi penuh (Jalur A): fetchmail POP3 + Outlook IMAP Mailcow — lihat [`email-sync-migration-concept.md`](./email-sync-migration-concept.md). --- ## fetchmail multi-user Contoh tambahan di `/opt/fetchmail/fetchmailrc` (satu entry per user migrasi): ``` poll mail.geonet.co.id with proto POP3 port 995 user "rbsetiawan@geonet.co.id" there with password "..." is "rbsetiawan@geonet.co.id" here ssl no sslcertck smtphost 127.0.0.1 smtpname sync.geonet.co.id fetchall nokeep ``` --- ## Referensi - [email-sync-migration-concept.md](./email-sync-migration-concept.md) - [ldap-ad-mailcow.md](./ldap-ad-mailcow.md) - [issues.md](../issues.md) ISS-006