Membedah tempat tinggal email: perbedaan mbox dan Maildir, anatomi direktori cur, new, dan tmp, konfigurasi mail_location di Dovecot, lalu menghubungkan Postfix ke LMTP lewat virtual_transport agar setiap pesan diserahkan dengan benar ke mailbox.

Setelah webmail hidup di episode 8, saatnya turun ke level penyimpanan: di mana email sebenarnya tinggal? Jawabannya di mailbox — dan cara mailbox disusun menentukan keandalan, kecepatan, dan kemudahan backup.
Episode ini membedah Maildir, format penyimpanan modern yang dipakai arsitektur kita, membandingkannya dengan mbox, lalu menyambungkan Postfix ke Dovecot lewat LMTP agar setiap pesan masuk diletakkan di mailbox yang benar. Di akhir episode, kalian bisa melacak satu email dari antrian Postfix sampai ke file di disk.
Ada dua format penyimpanan mailbox yang dominan:
Maildir adalah pilihan arsitektur modern. Backup, migrasi, dan akses IMAP bersamaan semuanya lebih aman. Dovecot dan Postfix sama-sama mendukungnya secara native.
Sebuah Maildir adalah direktori berisi tiga subdirektori dengan peran tegas:
Maildir/
├── new/ <- pesan baru, belum dibaca klien
├── cur/ <- pesan sudah "dilihat" klien, menyimpan flag
└── tmp/ <- area penulisan sementara, anti korupsiAlur hidup sebuah pesan: ditulis ke tmp/ dengan nama unik → dipindahkan ke new/ → setelah klien membacanya (dalam konteks IMAP, setelah melihat daftar), dipindah ke cur/ dengan penanda status seperti :2, di akhir nama file. Penanda itu adalah alasan kenapa nama file Maildir selalu diakhiri titik dua dan angka — jangan pernah "merapikan" nama file ini secara manual.
Di episode 4 kita menetapkan lokasi mailbox. Sekarang kita sempurnakan untuk virtual users:
doveadm config set mail_location 'maildir:/var/mail/vhosts/%d/%n'
sudo dovecot reloadPerintah doveadm config set adalah cara resmi mengubah konfigurasi tanpa mengedit file — setara postconf -e di Postfix. Nilai di atas menempatkan Maildir tiap user di bawah /var/mail/vhosts/<domain>/<user>/. Verifikasi nilai aktif:
doveconf mail_locationPastikan direktori induk punya kepemilikan yang benar — semuanya dipegang user vmail:
sudo chown -R vmail:vmail /var/mail/vhosts
sudo chmod 700 /var/mail/vhostsPermission 700 berarti hanya user vmail yang masuk — klien tidak pernah mengakses file langsung, hanya lewat IMAP.
LMTP (Local Mail Transfer Protocol) adalah saudara SMTP yang dirancang khusus untuk penyerahan lokal. Perbedaannya dengan SMTP biasa:
Dovecot menyediakan layanan LMTP lewat Unix socket, dan Postfix memanggilnya untuk setiap pesan masuk. Aktifkan listener di konfigurasi Dovecot (conf.d/20-lmtp.conf):
protocol lmtp {
mail_plugins = sieve
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}Perhatikan: socket diletakkan di dalam direktori chroot Postfix (/var/spool/postfix/private/), sehingga Postfix bisa mengaksesnya tanpa melepas chroot. Ini pola yang wajib diingat.
Di episode 7 kita memakai virtual_transport = virtual, yang berarti Postfix menyerahkan via program internal virtual. Sekarang kita ganti ke LMTP:
sudo postconf -e 'virtual_transport = lmtp:unix:private/dovecot-lmtp'
sudo postconf -e 'mailbox_transport = lmtp:unix:private/dovecot-lmtp'
sudo postfix check
sudo postfix reloadPenjelasan dua parameter:
virtual_transport — transport untuk email ke domain virtual; kini lewat LMTP.mailbox_transport — transport untuk user sistem (fallback), juga diarahkan ke LMTP agar semua jalur konsisten.Info
Nama private/dovecot-lmtp bersifat relatif terhadap direktori antrian Postfix. Jika socket Dovecot ditempatkan di tempat lain, sesuaikan jalur di kedua sisi — kalibrasi yang salah membuat status deferred di antrian.
Setelah reload, kirim email uji ke akun virtual dan amati hasilnya:
echo "hello lmtp" | mail -s "LMTP test" admin@example.com
journalctl -u postfix --since "1 minute ago"Cari baris berisi status=sent dan lmtp di log. Lalu periksa hasilnya di disk:
ls -la /var/mail/vhosts/example.com/admin/Maildir/new/Jika satu file email muncul, jalur Postfix → LMTP → Maildir bekerja sempurna.
Sekarang mari ikuti satu email secara utuh, karena kemampuan ini akan menyelamatkan kalian berkali-kali:
cat /var/mail/vhosts/example.com/admin/Maildir/new/* | grep -E '^Received:'Output Received: berantai menceritakan perjalanan pesan: klien → server kalian → (via LMTP) → server tujuan. Membaca rantai header ini adalah keterampilan debugging paling berharga di dunia mail server — episode 19 akan memakainya lebih dalam.
Episode 9 selesai. Inti yang harus dibawa pulang:
new/, cur/, dan tmp/ — aman dan mudah di-backup.mail_location = maildir:/var/mail/vhosts/%d/%n adalah kunci lokasi mailbox virtual.virtual_transport = lmtp:unix:private/dovecot-lmtp menghubungkan Postfix ke Dovecot.Penyimpanan sudah rapi. Di episode 10 kita mengelola alamat: Alias, Forwarding & Mailing List Dasar — dari alias per-user, forward email ke tujuan lain, sampai menangani penerima yang tidak dikenal. Sampai jumpa di episode 10!