# Konsep — POP3 Drain cPanel → Mailcow (inbox tunggal) > **Terakhir Diperbarui:** 2026-07-03 > **Status:** Rencana arsitektur — **keputusan user** > **Konteks:** MX `geonet.co.id` tetap cPanel; inbox canonical di Mailcow `sync.geonet.co.id` --- ## Ringkasan keputusan | Aspek | Rencana | |-------|---------| | MX `geonet.co.id` | Tetap cPanel (belum cutover) | | Inbox cPanel | **Kosong** — hanya staging sementara | | POP3 drain | VM/service tarik POP3 dari cPanel, **hapus** setelah sukses | | Inbox canonical | Mailcow `sync.geonet.co.id` (IMAP) | | Outlook user | IMAP + SMTP **hanya** `sync.geonet.co.id` | | Zammad | IMAP + SMTP ke Mailcow (mailbox sama dengan user) | | Mailcow host | `10.100.1.28` | **Prinsip:** cPanel hanya pintu masuk internet; **semua orang baca/tulis email lewat Mailcow**. --- ## Diagram alur ```mermaid flowchart TB subgraph internet [Internet] S[Pengirim / penerima balasan] end subgraph cpanel [cPanel — staging kosong] MX[MX geonet.co.id] STG[(Inbox cPanel\nkosong setelah POP3)] end subgraph vm [VM 10.100.1.28] FM[fetchmail / getmail\nPOP3 drain + delete] MC[Mailcow sync.geonet.co.id] MBX[(Inbox IMAP\ncanonical)] end subgraph clients [Klien] OL[Outlook user\nIMAP + SMTP] Z[Zammad\nIMAP + SMTP] end S -->|email baru| MX --> STG STG -->|POP3 :995\nhapus setelah OK| FM -->|SMTP inject :587| MC --> MBX MBX -->|IMAP :993| OL MBX -->|IMAP poll| Z OL -->|SMTP :587| MC Z -->|SMTP :587| MC MC -->|kirim ke internet| S ``` --- ## Peran masing-masing komponen ### 1. cPanel (`mail.geonet.co.id`) | Fungsi | Detail | |--------|--------| | MX record | Masih menunjuk ke hosting — email dari internet masuk sini dulu | | Inbox | **Staging** — harus kosong setelah POP3 drain berjalan | | User Outlook | **Tidak** connect ke cPanel lagi | | POP3 | `mail.geonet.co.id:995` SSL — hanya untuk service VM | ### 2. VM — POP3 drain (fetchmail) Service di server (bisa di VM yang sama dengan Mailcow), **bukan** di PC user. | Setting | Nilai | |---------|-------| | Protokol sumber | POP3 SSL `:995` | | Host | `mail.geonet.co.id` | | User | `nama@geonet.co.id` (per mailbox) | | Setelah sukses | **Hapus** dari cPanel (`fetchall` + tidak `keep`) | | Tujuan | SMTP ke Mailcow `127.0.0.1:587` atau `sync.geonet.co.id:587` | | Jadwal | Cron/systemd tiap **1–2 menit** | **Contoh `fetchmailrc` (produksi di `/opt/fetchmail/fetchmailrc`):** ``` poll mail.geonet.co.id with proto POP3 port 995 user "support@geonet.co.id" there with password "..." is "support@geonet.co.id" here ssl no sslcertck smtphost 127.0.0.1 smtpname sync.geonet.co.id fetchall nokeep ``` > Password dengan `#` atau `$` harus di-escape (generate via Python `repr()`). > `ssl` harus **setelah** baris `user`, bukan sebelum. > `no sslcertck` — cert cPanel `*.idcloudhosting.cloud` ≠ `mail.geonet.co.id`. > SMTP inject ke Mailcow via `127.0.0.1:25` (tanpa auth). > Install: `scripts/install-fetchmail-support.sh` + systemd timer 2 menit. ### 3. Mailcow (`sync.geonet.co.id`) | Fungsi | Detail | |--------|--------| | Hostname | `sync.geonet.co.id` | | Inbox canonical | Semua pesan hidup di sini | | Domain mailbox | Tambah `geonet.co.id` di Mailcow agar alamat tetap `user@geonet.co.id` | | Dovecot IMAP | `:993` — Outlook & Zammad | | Postfix SMTP | `:587` — kirim balasan | ### 4. Outlook user Satu akun saja — **tidak** ada akun cPanel. | Setting | Nilai | |---------|-------| | **Incoming** | IMAP | | Server | `sync.geonet.co.id` | | Port | `993` | | Encryption | SSL/TLS | | **Outgoing** | SMTP | | Server | `sync.geonet.co.id` | | Port | `587` (STARTTLS) atau `465` (SSL) | | Auth | Ya — username = email penuh | | Username | `nama@geonet.co.id` | ### 5. Zammad Sama seperti Outlook — satu mailbox di Mailcow: | Arah | Konfigurasi | |------|-------------| | Inbound | IMAP `sync.geonet.co.id:993` → `support@geonet.co.id` | | Outbound | SMTP `sync.geonet.co.id:587` → `support@geonet.co.id` | --- ## Mengapa POP3 drain (bukan imapsync mirror) | | imapsync (salin) | POP3 drain (pilihan user) | |--|------------------|---------------------------| | Inbox cPanel | Masih berisi salinan | **Kosong** | | Sumber kebenaran | Dua tempat | **Satu** — Mailcow saja | | Outlook connect ke | Harus Mailcow saja juga | Mailcow saja ✅ | | Risiko duplikat | Ada jika lupa aturan | Rendah | Cocok dengan tujuan: **user hanya tahu `sync.geonet.co.id`**, cPanel tidak dipakai sehari-hari. --- ## SPF / DKIM outbound (penting) Balasan dari Mailcow dengan `From: user@geonet.co.id` butuh DNS mengizinkan server `.102`: | Record | Fase transisi | Fase akhir | |--------|---------------|------------| | SPF `geonet.co.id` | Tambah IP publik `.102` **atau** relay SMTP cPanel sebagai smarthost | Mailcow only | | DKIM | Generate di Mailcow, publish TXT | Sama | | DMARC | Opsional awal | Disarankan | **Opsi jika belum siap SPF:** - Mailcow **smarthost** → `sc138.idcloudhosting.cloud:465` untuk outbound `@geonet.co.id` - Atau Zammad SMTP tetap hosting sementara, Outlook SMTP Mailcow (campuran — kurang ideal) **Target user:** Outlook incoming **dan** outgoing `sync.geonet.co.id` → siapkan SPF/DKIM `geonet.co.id` untuk IP Mailcow. --- ## Multi-mailbox Setiap `user@geonet.co.id` di cPanel perlu: 1. Entry fetchmail POP3 sendiri (atau satu script loop) 2. Mailbox matching di Mailcow 3. Outlook user connect ke Mailcow Contoh tim: | cPanel POP3 | Mailcow mailbox | Klien | |-------------|-----------------|-------| | `support@geonet.co.id` | `support@geonet.co.id` | Zammad + Outlook IT | | `info@geonet.co.id` | `info@geonet.co.id` | Outlook admin | | `nama@geonet.co.id` | `nama@geonet.co.id` | Outlook user | --- ## Risiko & mitigasi | Risiko | Dampak | Mitigasi | |--------|--------|----------| | fetchmail mati | Email menumpuk di cPanel, user tidak lihat | Monitor cron + alert (Uptime Kuma / script) | | Latency 1–2 menit | Email tidak instant di Outlook | Kurangi interval cron; terima sebagai trade-off | | POP3 gagal mid-batch | Pesan bisa hilang jika delete sebelum SMTP OK | Pakai fetchmail `nokeep` hanya setelah SMTP sukses (default behavior) | | Port 25 blokir | Outbound Mailcow gagal | Smarthost cPanel atau port 587 | | VM `.102` down | Semua mail flow stop | HA / backup VM; monitor | --- ## Perbedaan dengan pola Thunderbird manual | | Thunderbird di PC | fetchmail di VM | |--|-------------------|-----------------| | POP3 drain | User PC harus nyala | Server 24/7 | | Deliver ke Mailcow | Manual / filter | Otomatis SMTP inject | | Outlook user | Hanya IMAP Mailcow | Sama ✅ | Thunderbird **tidak** dipakai untuk bridge — hanya Outlook (atau client lain) ke Mailcow. --- ## Roadmap | Tahap | Aksi | |-------|------| | **1** | Install Mailcow di VM `.102`, hostname `sync.geonet.co.id` | | **2** | Tambah domain `geonet.co.id` + buat mailbox | | **3** | Deploy fetchmail POP3 drain per mailbox | | **4** | Kosongkan inbox cPanel (tes drain) | | **5** | Konfigurasi Outlook user → IMAP/SMTP Mailcow | | **6** | Zammad IMAP + SMTP Mailcow | | **7** | SPF/DKIM untuk outbound `@geonet.co.id` | | **8** | Stabil 2–4 minggu | | **9** | Cutover MX → `sync.geonet.co.id`, matikan fetchmail | --- ## Checklist - [ ] VM `10.100.1.28` provisioned (16 vCPU, 32 GB, 2×512 GB) - [ ] DNS A `sync.geonet.co.id` → IP publik - [ ] Mailcow + domain `geonet.co.id` - [x] fetchmail + timer 2 menit (`support@geonet.co.id`) — `scripts/install-fetchmail-support.sh` - [ ] Verifikasi inbox cPanel kosong setelah drain - [ ] Outlook: IMAP+SMTP `sync.geonet.co.id` - [ ] Zammad channel email → Mailcow - [ ] SPF/DKIM `geonet.co.id` - [ ] Monitoring fetchmail --- ## Referensi - `Mailcow/docs/environment.md` - `Zammad/docs/notes/email-geonet-co-id.md` - `fetchmail` man: https://www.fetchmail.info/