Mailcow di VPS: Agar Email Diterima Gmail
Uji port keluar 25 sebelum memasang mailcow: blokir membuat email tertahan di antrean hingga gagal. Atur DNS untuk mencegah penolakan Gmail 550 5.7.25 akibat PTR.
Yang Anda bangun
Server email lengkap pada server yang Anda miliki: SMTP untuk mengirim dan menerima email, IMAP agar ponsel dan laptop tetap tersinkronisasi, klien webmail, serta filter spam yang memberikan skor pada setiap pesan untuk kedua arah. mailcow-dockerized menggabungkan Postfix, Dovecot, Rspamd, webmail SOGo, MariaDB, Redis, dan klien ACME ke dalam satu stack Docker Compose, sehingga perangkat lunak bukan bagian yang paling sulit. Server ini akan berjalan dalam waktu setengah jam.
Bagian yang sulit adalah semua hal di sekitarnya. Email adalah satu-satunya layanan yang secara aktif tidak mempercayai server baru, dan perbedaan antara "berfungsi" dan "Gmail diam-diam membuang setiap pesan" terutama ditentukan oleh empat record DNS serta satu pengaturan reputasi IP yang mungkin tidak sepenuhnya dapat Anda kendalikan. Baca prasyarat di bawah ini sebelum menyewa apa pun. Jika setelah membacanya Anda memutuskan bahwa proses membangun reputasi tidak sepadan, itu adalah keputusan yang sah. Ringkasan kami tentang apa yang benar-benar layak di-self-host pada 2026 memasukkan email ke kategori "hanya jika Anda benar-benar menginginkannya" karena alasan-alasan ini.
Prasyarat adalah inti proyek
Jika salah satu saja terlewat, Anda akan mengirim email yang tidak pernah sampai. Berikut urutannya, dari penyebab kegagalan yang paling sering:
Port outbound 25 harus terbuka. Server Anda mengirimkan email ke Gmail dan Microsoft melalui TCP port 25. Banyak penyedia VPS dan cloud memblokir outbound port 25 secara default untuk mencegah spam. Pemblokiran ini biasanya tidak terlihat. Tidak ada error saat boot, semua tampak normal, dan email tertahan dalam antrean hingga Postfix menyerah lalu mengembalikannya sebagai bounce. mailcow menetapkan masa berlaku maksimum antrean selama lima hari. Uji port ini sebelum menginstal apa pun. Jika terblokir, satu-satunya solusi adalah mengirim tiket dukungan dan meminta penyedia membuka port tersebut. Sebagian penyedia melakukannya untuk akun yang sudah lama aktif, tetapi sebagian lainnya tidak pernah mengizinkannya.
IP bersih dengan reputasi yang layak. IP VPS daur ulang sering kali sudah tercantum dalam blocklist akibat spam dari penyewa sebelumnya. Periksa IP Anda menggunakan layanan seperti Spamhaus lookup atau mxtoolbox sebelum melanjutkan. IP yang tercantum dalam blocklist akan menyebabkan penolakan yang tidak dapat diatasi melalui konfigurasi kode.
Kendali atas DNS serta record PTR yang benar. Anda perlu menambahkan record ke zone domain dan menyiapkan reverse DNS (PTR) untuk IP server yang mengarah kembali ke hostname mail Anda. PTR hampir tidak pernah diatur melalui panel DNS. Record ini dikelola oleh pihak yang memiliki IP tersebut, sehingga Anda harus mengaturnya melalui control panel penyedia VPS atau melalui tiket dukungan.
6 GiB RAM dan 2 vCPU adalah batas minimum yang nyaman. Minimum resmi mailcow untuk instalasi privat adalah 6 GiB RAM ditambah 1 GiB swap. Kapasitas 8 GiB disarankan setelah beberapa pengguna mulai mengandalkan layanan tersebut. Di bawah sekitar 2.5 GiB, generate_config.sh menawarkan untuk menonaktifkan pemindai virus ClamAV agar kernel tidak mulai menghentikan container. Minimum disk yang didokumentasikan mailcow adalah 20 GiB sebelum email apa pun disimpan. Karena itu, sediakan kapasitas lebih besar sejak awal dan sisakan ruang agar mailbox dapat bertambah.
Nama DNS, bukan IP tanpa hostname. Pilih hostname seperti mail.example.com. Nama tunggal ini menjadi MAILCOW_HOSTNAME, subject sertifikat TLS, target PTR, dan banner SMTP Anda. Gunakan nama yang sama secara konsisten di semua konfigurasi.
Langkah 1, Pastikan port outbound 25 terbuka
Lakukan ini terlebih dahulu. Semua langkah lain sia-sia jika pemeriksaan ini gagal. Dari VPS baru, coba buka sesi SMTP dengan mail server yang aktif:
sudo apt update && sudo apt install -y netcat-openbsd
nc -vz -w 5 gmail-smtp-in.l.google.com 25Hasil yang berfungsi muncul segera:
Connection to gmail-smtp-in.l.google.com (142.250.x.x) 25 port [tcp/smtp] succeeded!Port yang diblokir akan menunggu selama lima detik, lalu gagal:
nc: connect to gmail-smtp-in.l.google.com port 25 (tcp) timed out: Operation now in progressPada VPS baru yang tidak memiliki aturan firewall outbound buatan Anda, timeout tersebut disebabkan oleh pemblokiran dari provider. Ini adalah filter jaringan di sisi provider, bukan firewall Anda, sehingga perubahan lokal tidak dapat memperbaikinya. Buat tiket dengan pesan berikut: "Please enable outbound TCP port 25 for my VPS at <IP>; I am running a legitimate mail server." Jangan menginstal mailcow sebelum perintah ini menghasilkan "succeeded". Perhatikan bahwa port inbound 25, yaitu koneksi dari server lain ke server Anda, merupakan jalur yang terpisah dan biasanya terbuka. Sisi outbound-lah yang biasanya dibatasi oleh provider.
Langkah 2, Tetapkan record DNS sekarang
Perubahan DNS memerlukan waktu untuk dipropagasikan, jadi publikasikan semua record yang dapat Anda siapkan sebelum melakukan instalasi. Misalkan domain Anda adalah example.com, host mail Anda adalah mail.example.com, dan IP-nya adalah 10.0.0.10. Buat record berikut di zone DNS Anda:
mail.example.com. A 10.0.0.10
mail.example.com. AAAA 2001:db8::10 ; only if you have IPv6
example.com. MX 10 mail.example.com.
example.com. TXT "v=spf1 mx -all"
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:postmaster@example.com"Record SPF menyatakan bahwa "hanya MX saya yang boleh mengirim untuk domain ini; tolak pengirim lainnya". Mulai DMARC dengan p=none agar Anda dapat memantau laporan tanpa menolak email Anda sendiri. Setelah alignment terbukti, perketat kebijakan tersebut menjadi p=quarantine, lalu p=reject. Dua record sengaja belum dibuat: DKIM, yang akan dibuatkan oleh mailcow pada Langkah 6, dan PTR, yang harus Anda tetapkan sekarang di panel provider.
Tetapkan PTR (reverse DNS) untuk 10.0.0.10 ke mail.example.com, yaitu nilai persis MAILCOW_HOSTNAME. Ini adalah satu-satunya record yang paling sering dilupakan, dan provider besar akan menolak email berdasarkan record ini. Jika panel Anda tidak memiliki kolom rDNS, buat tiket dukungan.
Langkah 3, Instal Docker
mailcow memerlukan Docker Engine 24.0 atau yang lebih baru dan Docker Compose 2.0 atau yang lebih baru. Plugin Compose (docker compose) adalah cara paling sederhana, meskipun mailcow juga mendukung biner mandiri docker-compose. Gunakan convenience script resmi Docker, bukan paket docker.io dari Ubuntu, karena paket tersebut sama sekali tidak menyertakan plugin Compose:
curl -fsSL https://get.docker.com | sudo sh
sudo docker compose versionAnda akan melihat baris Docker Compose version yang melaporkan v2.x atau v5.x. Compose v5, yang dirilis pada 2025, secara fungsional identik dengan v2, dan keduanya memenuhi persyaratan mailcow. Jika docker compose version menampilkan docker: 'compose' is not a docker command, Docker Engine sudah terinstal, tetapi plugin Compose belum terinstal. Instal plugin tersebut dari repositori Docker, jalankan kembali script di atas, atau ikuti panduan dasar Docker Compose kami, yang menyiapkan keduanya dari repositori apt milik Docker.
Langkah 4, Clone mailcow dan buat konfigurasi
cd /opt
sudo git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
umask
sudo ./generate_config.shMemastikan bahwa umask menghasilkan 0022 mengikuti langkah instalasi mailcow sendiri, yang menetapkan umask 0022 sebelum melakukan cloning. Tidak ada bagian dalam mailcow yang menguji nilai tersebut, dan shell root baru pada Ubuntu 24.04 sudah memberikan 0022. Selanjutnya, skrip menanyakan satu hal yang penting: hostname fully qualified. Masukkan mail.example.com. Nilainya harus sama persis dengan A record dan PTR Anda. Skrip menulis mailcow.conf, yaitu satu-satunya file environment yang dibaca oleh seluruh stack. Buka file tersebut jika Anda perlu mengubah port web (HTTP_PORT, HTTPS_PORT) atau menonaktifkan ClamAV pada server dengan kapasitas kecil:
MAILCOW_HOSTNAME=mail.example.com
HTTP_PORT=80
HTTPS_PORT=443
SKIP_CLAMD=n # set to y to drop the virus scanner on a <2.5 GiB boxSKIP_FTS=y adalah pengaturan lain yang penting pada server dengan RAM kecil: pencarian teks lengkap merupakan penggunaan memori terbesar kedua yang disebutkan dalam dokumentasi mailcow, dan menonaktifkannya hanya berarti Anda tidak dapat mencari isi pesan di webmail.
Biarkan HTTP_PORT=80 dan HTTPS_PORT=443, kecuali port tersebut sudah digunakan oleh layanan lain pada host. Klien ACME bawaan mailcow menggunakan challenge HTTP-01 secara default. Challenge ini memerlukan port 80 agar dapat diakses dari Internet untuk memperoleh sertifikat. (mailcow 2026-03 dan versi setelahnya dapat menggunakan challenge DNS-01 melalui ACME_DNS_CHALLENGE=y. Metode ini tidak memerlukan port 80, tetapi memerlukan akses API ke penyedia DNS Anda.) Karena itu, tata letak sederhana ini tidak menjalankan konfigurasi nginx-plus-Certbot terpisah pada server yang sama. mailcow menerbitkan dan memperbarui TLS-nya sendiri secara internal, sedangkan layanan kedua yang menggunakan port 80/443 akan menyebabkan konflik. mailcow juga mendokumentasikan alternatifnya: ikat listener web-nya ke alamat lokal dengan HTTP_BIND=127.0.0.1 HTTP_PORT=8080 HTTPS_BIND=127.0.0.1 HTTPS_PORT=8443, tempatkan reverse proxy pada port 80 dan 443, lalu, jika Anda ingin Certbot lokal mengelola sertifikat, arahkan mailcow ke sertifikat tersebut dan tambahkan renewal hook. Pendekatan ini menambah lebih banyak komponen yang harus dikelola pada server mail. Trade-off yang sama berlaku untuk layanan lain yang memerlukan frontend web publik: build seperti Halcyon yang mengubah pustaka Jellyfin menjadi toko video bergaya 90-an, yang mengharapkan reverse proxy-nya sendiri pada port 443, sebaiknya ditempatkan pada host lain, kecuali Anda menempatkan mailcow di belakang proxy tersebut. Pengecualiannya adalah layanan yang sama sekali tidak meminta port web publik: relay RustDesk yang di-host sendiri hanya listen pada rentang port 21115 hingga 21119 miliknya, sehingga dapat menggunakan server yang sama selama masih tersedia kapasitas bandwidth yang memadai.
Langkah 5, Jalankan stack dan login
sudo docker compose pull
sudo docker compose up -d
sudo docker compose psProses pull mengambil sekitar dua lusin image; tunggu beberapa menit. Setelah docker compose ps menampilkan semua container dalam status running (atau healthy), buka https://mail.example.com/admin di browser. Login admin default menggunakan username admin dan password moohoo. Segera ubah password tersebut di UI admin melalui System → Configuration, lalu Access → Administrators. Jika browser menampilkan peringatan NET::ERR_CERT_AUTHORITY_INVALID, berarti sertifikat ACME belum diterbitkan. Lihat bagian tentang kegagalan ACME di bawah ini sebelum menganggap instalasi bermasalah; sertifikat placeholder yang ditandatangani sendiri merupakan kondisi normal selama satu atau dua menit pertama.
Langkah 6, Tambahkan domain, mailbox, dan publikasikan DKIM
Di UI admin, buka E-Mail → Configuration. Pada tab Domains, klik Add domain lalu masukkan example.com. Selanjutnya, pada bagian Mailboxes, klik Add mailbox untuk membuat you@example.com dengan password. Mailbox tersebut sudah dapat digunakan dan diakses melalui IMAP.
Sekarang buat kunci DKIM. Buka System → Configuration, lalu Options → ARC/DKIM keys. mailcow mungkin sudah membuat kunci saat Anda menambahkan domain. Jika belum, buat kunci di sana, pilih domain, pertahankan selector dkim, pilih 2048-bit, lalu klik Add. Salin nilai TXT panjang yang ditampilkan dan publikasikan sebagai berikut:
dkim._domainkey.example.com. TXT "v=DKIM1;k=rsa;t=s;s=email;p=MIIBIjANBgkqh...long-key...QAB"Halaman Domains di mailcow memiliki tombol DNS yang mencantumkan setiap record yang diharapkan dan menampilkan tanda centang hijau atau silang merah berdasarkan record yang benar-benar dipublikasikan. Gunakan halaman tersebut sebagai checklist, dan pastikan setiap baris berwarna hijau sebelum menguji keterkiriman email. Baris DKIM yang tetap merah setelah dipublikasikan biasanya berarti kunci terpecah menjadi beberapa bagian TXT secara tidak benar. Kunci 2048-bit lebih panjang daripada batas 255 karakter untuk satu string TXT, jadi tempelkan sebagai satu nilai logis dan biarkan penyedia DNS Anda membaginya menjadi beberapa bagian.
Langkah 7, Uji keterkiriman dan kejar skor 10/10
Buka mail-tester.com, salin alamat acak yang ditampilkan, lalu kirim pesan ke alamat tersebut dari mailbox baru Anda. Masuk ke webmail SOGo di https://mail.example.com/SOGo dan kirim pesan dari sana. Kemudian klik "Then check your score".
Targetkan skor 10/10. Pengurangan skor yang umum beserta penyebabnya:
- SPF tidak selaras, record
MX/SPF Anda tidak ada atau IP pengirim tidak tercakup. Periksa kembali TXT SPF. - Tanda tangan DKIM tidak dapat diverifikasi, TXT
dkim._domainkeytidak ada, masih dalam proses propagasi, atau rusak. Ini adalah kesalahan yang paling sering terjadi. - Tidak ada PTR / PTR tidak cocok, reverse DNS tidak me-resolve ke
mail.example.com. Perbaiki di provider. - Terdaftar di blocklist, IP Anda memiliki reputasi sebelumnya yang buruk. Ajukan penghapusan dari daftar atau minta IP yang reputasinya lebih bersih.
Jangan kirim email sungguhan ke Gmail atau Outlook sebelum hasil ini menunjukkan skor 10/10. Skor rendah ditambah IP baru dapat menyebabkan domain Anda ditandai sejak hari pertama.
Langkah 8, Hubungkan klien email sebenarnya
Arahkan Thunderbird, Apple Mail, atau ponsel Anda ke server menggunakan pengaturan berikut. Host server untuk semuanya adalah mail.example.com:
- IMAP: port 993, SSL/TLS (atau 143 dengan STARTTLS)
- Pengiriman SMTP: port 465, SSL/TLS (atau 587 dengan STARTTLS)
- Nama pengguna: alamat lengkap,
you@example.com - Kata sandi: kata sandi mailbox yang Anda tetapkan
Jangan pernah mengirim email klien melalui port 25. Port tersebut hanya digunakan untuk komunikasi antarpeladen. mailcow tidak menyediakan pengiriman terautentikasi pada port tersebut, sehingga koneksi dari klien yang diarahkan ke port 25 akan ditolak. Jika klien melaporkan Relay access denied, klien tersebut mencoba mengirim melalui port 25 atau tanpa autentikasi. Alihkan ke port 465 atau 587 dan gunakan kredensial mailbox Anda.
Langkah 9, Cadangkan data yang benar-benar penting
mailcow menyediakan skrip pencadangan yang membuat snapshot untuk setiap volume stateful. Jalankan skrip ini ke disk eksternal atau penyimpanan remote yang di-mount:
sudo MAILCOW_BACKUP_LOCATION=/opt/mailcow-backups \
./helper-scripts/backup_and_restore.sh backup allall mencadangkan enam hal. Kehilangan salah satunya berarti kehilangan data: vmail (mailbox yang sebenarnya), crypt (key yang mendekripsi vmail dan tidak berguna tanpa vmail), mysql (MariaDB yang menyimpan domain, user, alias, dan pengaturan), redis (status antrean dan cache), rspamd (data spam/ham yang telah dipelajari), serta postfix (antrean email). Skrip ini berjalan di dalam helper container dan menulis arsip terkompresi. Dengan demikian, backup tetap konsisten meskipun stack sedang berjalan. Otomatiskan proses ini dengan cron job setiap malam, lalu tambahkan --delete-days 14 untuk menghapus set lama. Cron job yang berhenti bekerja akan gagal secara diam-diam. Karena itu, kirim status keluar skrip ke tempat yang benar-benar akan Anda perhatikan. server ntfy yang di-host sendiri dapat menerima satu baris curl dari cron entry yang sama dan mengirimkan notifikasi kegagalan ke ponsel Anda pada malam saat kegagalan terjadi. Restore menggunakan skrip yang sama dengan restore. Opsi ini menampilkan snapshot dan memungkinkan Anda memilih data yang akan dipulihkan. Backup yang belum pernah diuji dengan restore hanyalah harapan, bukan backup. Lakukan satu dry run ke VPS sementara terlebih dahulu.
Langkah 10, Perbarui secara berkala
mailcow diperbarui melalui skripnya sendiri. Skrip ini mengambil kode baru, memigrasikan mailcow.conf, melakukan prefetch image, lalu me-restart container secara berurutan:
cd /opt/mailcow-dockerized
sudo ./update.sh --check # reports whether an update exists, changes nothing
sudo ./update.sh # applies itBuat backup terlebih dahulu (Langkah 9), karena migrasi skema sulit dibatalkan. Pembaruan sering dirilis dan mencakup perbaikan keamanan untuk daemon yang menghadap Internet. Karena itu, jangan biarkan mail server tidak diperbarui selama berbulan-bulan. Jika pembaruan menyebabkan container berstatus tidak sehat, sudo docker compose logs --tail=50 <service>-mailcow menunjukkan nama daemon yang gagal berjalan kembali.
Catatan tentang hardening
mailcow menjalankan service netfilter sendiri (netfilter-mailcow) yang memblokir IP yang terus-menerus menyerang port mail dan webmail. Dengan demikian, sisi mail sudah dilindungi secara bawaan. Namun, perlindungan ini tidak mencakup SSH pada host itu sendiri. SSH tetap terekspos dan masih menjadi sasaran brute-force. Lengkapi build ini dengan Fail2ban yang memantau log autentikasi SSH dan login yang hanya menggunakan key. Lindungi UI admin mailcow dengan password yang kuat dan, idealnya, jangan ekspos UI tersebut ke Internet publik atau tempatkan di balik VPN.
Mode kegagalan, dengan string yang tepat
Antrean email tidak pernah terkirim. Jalankan sudo docker compose exec postfix-mailcow postqueue -p, atau baca antrean email pada UI admin; entri tetap berstatus deferred hingga lima hari sebelum Postfix mengembalikan email tersebut, dengan:
status=deferred (connect to gmail-smtp-in.l.google.com[142.250.x.x]:25: Connection timed out)Hampir selalu penyebabnya adalah port outbound 25 diblokir oleh provider Anda (Langkah 1). Aturan outbound pada firewall host Anda sendiri juga menghasilkan timeout yang sama, jadi singkirkan kemungkinan itu terlebih dahulu; jika host bersih, perubahan konfigurasi tidak akan memperbaikinya. Buat tiket dukungan. Masalah ini bukan DNS dan bukan TLS; indikasinya adalah kata timed out terhadap remote MX pada port 25.
Gmail menandai semua email sebagai spam atau mengembalikannya. Buka pesan di Gmail, pilih "Show original", lalu baca hasil autentikasinya. dkim=fail atau dkim=none berarti TXT dkim._domainkey Anda hilang, rusak, atau belum selesai dipropagasikan. Publikasikan ulang persis seperti yang ditampilkan halaman ARC/DKIM, lalu tunggu TTL. spf=fail berarti record SPF/MX tidak mencakup IP Anda. Alignment sangat penting; satu pemeriksaan yang gagal sudah cukup untuk menyebabkan email masuk ke spam.
Ditolak oleh provider besar saat koneksi. Email yang dikembalikan atau log Postfix memuat penolakan PTR dari Gmail:
550-5.7.25 [10.0.0.10] The IP address sending this message does not have a PTR
550-5.7.25 record setup, or the corresponding forward DNS entry does not match
550 5.7.25 the sending IP. As a policy, Gmail does not accept messages from IPs
550 5.7.25 with missing PTR records.Kode 550 5.7.25 berarti reverse DNS hilang atau tidak cocok. Atur PTR untuk IP Anda menjadi mail.example.com pada provider (Langkah 2). Forward (A) dan reverse (PTR) harus cocok, dan keduanya harus menyebut host yang sama dengan nama yang digunakan mailcow saat menyapa server lain.
Browser menampilkan peringatan sertifikat yang tidak pernah hilang. Container acme-mailcow gagal memperoleh sertifikat yang valid. Periksa log-nya:
sudo docker compose logs acme-mailcow | tail -n 40Baris seperti Cannot validate any hostnames, skipping Let's Encrypt for 1 hour. atau kegagalan challenge berarti port 80 tidak dapat dijangkau dari Internet, atau record A tidak mengarah ke server ini. Jika Anda memublikasikan record AAAA, periksa juga record tersebut: mailcow memvalidasi record AAAA terlebih dahulu dan melewati pemeriksaan A jika record AAAA tersedia. Karena itu, AAAA yang salah atau jalur IPv6 yang tidak dapat menjangkau port 80 akan menyebabkan validasi gagal meskipun record A sudah benar. Pastikan mail.example.com mengarah ke host ini, buka port 80 dan 443 melalui firewall host mana pun, dan pastikan tidak ada proses lain yang menggunakan port tersebut. Setelah memperbaiki penyebabnya, restart client dengan sudo docker compose restart acme-mailcow, bukan menunggu periode back-off selama satu jam.
FAQ
Apakah self-hosting email benar-benar layak?
Jika Anda menginginkan kepemilikan data, alias tanpa batas, dan kendali penuh, jawabannya ya. mailcow menyediakan stack profesional dengan biaya setara VPS. Namun, menjaga deliverability adalah pekerjaan yang terus berlangsung: reputasi IP, keselarasan DNS, dan pemantauan blocklist tidak pernah benar-benar selesai. Untuk alamat bisnis yang sangat penting, ketika satu hari berada di folder spam seseorang dapat merugikan Anda, provider terkelola adalah pilihan yang lebih praktis. Gunakan self-hosting jika Anda lebih mengutamakan kendali daripada kemudahan dan benar-benar bersedia memeliharanya. Jika tujuan utama Anda adalah menyimpan data di luar server milik pihak lain, bukan email secara khusus, mulailah dengan layanan yang tidak bergantung pada reputasi pengiriman: pustaka foto sama sekali tidak memiliki masalah deliverability, dan perbandingan PhotoPrism dan Immich kami membahas kebutuhan minimum RAM serta perintah backup untuk membangun layanan tersebut pada VPS sejenis.
Bagaimana cara mengetahui apakah port keluar 25 diblokir?
Jalankan nc -vz -w 5 gmail-smtp-in.l.google.com 25 dari server. Pesan "succeeded!" berarti port tersebut terbuka. Jika muncul timed out setelah jeda, port tersebut diblokir. Pada server yang tidak memiliki aturan firewall keluar buatan Anda sendiri, pemblokiran itu berasal dari provider. Ini adalah alasan paling umum server self-hosted dapat menerima email tetapi tidak pernah dapat mengirimnya. Satu-satunya solusi untuk pemblokiran oleh provider adalah meminta provider membuka port tersebut. Tidak ada perubahan pengaturan lokal yang dapat mengatasinya.
Mengapa email saya masih masuk ke folder spam Gmail?
Hampir selalu karena rantai autentikasi yang rusak. Gunakan "Show original" di Gmail dan cari spf=pass, dkim=pass, serta dmarc=pass. dkim=fail menunjukkan bahwa record TXT dkim._domainkey tidak ada atau rusak. Ketidakcocokan PTR atau IP baru yang belum memiliki riwayat pengiriman juga berdampak buruk. Dapatkan skor 10/10 di mail-tester.com terlebih dahulu, lalu lakukan pemanasan IP secara perlahan. Mulailah dengan beberapa pesan per hari dan tingkatkan jumlahnya secara bertahap, bukan langsung mengirim volume besar pada hari pertama.
Apa saja yang sebenarnya perlu saya backup?
Jalankan backup_and_restore.sh backup all dan simpan seluruh hasilnya di luar server. Backup tersebut mencakup vmail (kotak email), crypt (kunci untuk mendekripsinya), database MariaDB (domain, pengguna, alias, dan pengaturan), Redis, data hasil pembelajaran Rspamd, serta antrean Postfix. Volume crypt sering terlewat. Tanpa volume tersebut, backup vmail hanya berupa ciphertext yang tidak dapat dibaca. Uji pemulihan pada server uji setidaknya satu kali.
Dapatkah saya menjalankan mailcow pada VPS 2 GB?
Tidak dengan nyaman. generate_config.sh menawarkan penonaktifan ClamAV jika kapasitas RAM kurang dari sekitar 2.5 GiB. Bahkan setelah ClamAV dinonaktifkan, Rspamd, Dovecot, MariaDB, dan komponen stack lainnya tetap berebut memori. Akibatnya, swap akan digunakan dan proses dapat dihentikan oleh OOM saat server menerima beban nyata. Anggap 6 GiB ditambah 1 GiB swap sebagai batas minimum untuk instalasi single-user yang stabil. Beralihlah ke 8 GiB segera setelah lebih dari beberapa orang bergantung pada layanan tersebut.