Cara Debug Email yang Tidak Terkirim dengan Melihat SMTP Log di Server

Email transaksional yang tidak sampai ke inbox sering kali disebabkan oleh SPF atau DKIM yang salah konfigurasi, koneksi yang timeout, atau mailbox penuh di sisi penerima. Dengan membaca SMTP log di server, Anda bisa mengidentifikasi penyebab spesifik tanpa harus tebak-tebakan atau langsung buka ticket support. Artikel ini mengajarkan cara menemukan log, membaca kode respons SMTP, dan mengisolasi masalah secara sistematis.


Di Mana SMTP Log Tersimpan di Server Linux?

Jawaban singkat: di /var/log/mail.log atau /var/log/maillog, tergantung mail server yang Anda pakai.

Postfix menyimpan log di /var/log/mail.log secara default. Exim biasanya di /var/log/exim4/mainlog atau /var/log/exim/mainlog. Kalau Anda pakai sistem mailing lain seperti Sendmail, log-nya ada di /var/log/maillog juga.

Cara paling cepat untuk memastikan di mana log email Anda:

tail -f /var/log/mail.log

Perintah di atas akan menampilkan baris terakhir dari log secara real-time. Kalau tidak ada output setelah beberapa detik, kemungkinan Postfix belum jalan atau log-disimpan di lokasi lain. Cek konfigurasi Postfix di /etc/postfix/main.cf untuk cari nilai maillog_file.

Dari situ, Anda bisa lihat aktivitas email yang keluar dari server Anda secara langsung. Setiap kali aplikasi Anda memanggil fungsi mail PHP atau pakai library seperti PHPMailer, Symfony Mailer, atau SDK SMTP, baris baru akan muncul di log ini.

Cara Membaca Kode Respons SMTP dari Log

Setiap koneksi SMTP menghasilkan pasangan request-response yang terlihat di log. Format standarnya:

status=sent (250 2.0.0 OK) atau status=deferred (421 4.4.2 connection dropped)

Angka tiga digit di dalam kurung adalah kode respons SMTP dari server penerima. Kode ini adalah kunci debugging utama Anda.

Berikut kode yang paling sering muncul di log saat email gagal terkirim:

Kode 250 artinya email Anda diterima server penerima. Ini status sukses. Tapi sukses di level SMTP tidak menjamin email sampai ke inbox. Hanya berarti server penerima mau menerima email tersebut untuk diproses lebih lanjut.

Kode 421 artinya server penerima sementara tidak tersedia. Ini biasanya terjadi karena server tujuan sedang overloaded atau dalam maintenance window. Email Anda akan di-queue dan di-retry otomatis oleh Postfix. Kalau email masih deferred setelah beberapa jam, cek apakah server tujuan memang accessible dari jaringan Anda.

Kode 450 artinya temporary rejection. Server penerima menerima koneksi Anda tapi menolak email secara sementara. Alasan umum: IP Anda ada di daftar blacklist sementara, atau recipient mailbox sedang locked. Retry beberapa menit sampai satu jam biasanya menyelesaikan masalah ini.

Kode 452 artinya server penerima kehabisan storage sementara. Ini masalah di sisi server tujuan, bukan di sisi Anda. Biasanya akan auto-resolve setelah server tersebut memproses antrean emailnya.

Kode 550 adalah hard bounce. Alasan paling umum: alamat email recipient tidak ada, domain tidak valid, atau mailbox sudah tidak aktif. Postfix secara default tidak akan retry email dengan kode 550. Email ini harus Anda catat untuk dihapus dari mailing list.

Kode 552 artinya storage exceeded di sisi penerima. Mailbox recipient penuh. Dari sisi Anda, tidak ada yang bisa dilakukan kecuali recipient mengosongkan mailbox-nya. Beberapa ESP seperti Gmail sangat ketat soal ini.

Kode 554 artinya transaction failed. Ini biasanya di-trigger oleh policy violation di sisi penerima. Bisa karena konten email terdeteksi sebagai spam oleh filter server tujuan, atau karena ada aturan keamanan yang menolak email Anda.

Dari pengalaman menangani email di KIRIM.EMAIL yang mengirim lebih dari 11 juta email per hari, tiga penyebab paling sering email tidak sampai adalah: hard bounce karena alamat tidak valid, timeout karena koneksi dari server Indonesia ke Gmail atau Microsoft yang sometimes lambat, dan policy rejection karena SPF atau DKIM yang tidak align.

Bagaimana Cara Bedakan Soft Bounce dan Hard Bounce dari Log?

Soft bounce itu email yang gagal terkirim tapi sementara. Hard bounce itu permanen.

Dari log, bedanya sangat jelas. Hard bounce menghasilkan kode 550 atau 552. Postfix akan mencatatnya sebagai status=sent dengan kode hard bounce, dan email tidak akan di-retry.

Soft bounce menghasilkan kode 421, 450, atau 452. Postfix akan mencatatnya sebagai status=deferred dan akan otomatis retry berdasarkan schedule yang ditentukan di konfigurasi relay_retry_time atau maximal_queue_lifetime.

Anda bisa cek semua email yang saat ini di-queue dengan perintah:

mailq

Atau yang lebih detail:

postqueue -p

Email yang ada di queue dengan status deferred akan muncul di sini. Kolom kanan menunjukkan alasan deferred dalam format yang lebih manusiawi.

Untuk cek bounce rate server Anda dalam 30 hari terakhir, perintah ini berguna:

grep "status=sent" /var/log/mail.log | grep -E "(bounce|deferred)" | wc -l

Bandingkan jumlah sent versus bounce. Bounce rate di atas 5% sudah mulai membahayakan reputasi IP Anda.

Teknik Isolation: Test SMTP Secara Manual dengan Swaks

Sebelum Anda menghabiskan waktu men-decode log, ada gunanya memastikan masalahnya memang di jaringan atau di konfigurasi server, bukan di aplikasi Anda.

Swaks adalah tool command-line untuk testing SMTP secara interaktif. Dengan swaks, Anda bisa kirim email test langsung dari server ke tujuan tertentu dan lihat respons SMTP secara real-time.

Instalasi di Ubuntu atau Debian:

apt-get install swaks

Usage dasar untuk test koneksi:

swaks --to [email protected] --server mail.recipientdomain.com

Swaks akan menampilkan setiap langkah koneksi SMTP: greeting, authentication kalau perlu, MAIL FROM, RCPT TO, dan DATA. Anda bisa lihat di mana koneksi gagal atau berhasil.

Kalau koneksi langsung ditolak tanpa melewati SMTP conversation yang lengkap, masalahnya hampir pasti di firewall atau di network level, bukan di mail server configuration.

Contoh output sukses di level SMTP:

<- 220 mail.recipientdomain.com ESMTP Postfix
-> EHLO hostname.yourserver.com
<- 250-mail.recipientdomain.com
<- 250-PIPELINING
<- 250-SIZE 10240000
<- 250-STARTTLS
<- 250 8BITMIME
-> MAIL FROM:<[email protected]>
<- 250 2.1.0 Ok
-> RCPT TO:<[email protected]>
<- 250 2.1.5 Ok
-> QUIT
<- 221 2.0.0 Bye

Kalau output berhenti di salah satu langkah ini, Anda tahu persis di mana masalahnya terjadi.

Kenapa Email dari Server Indonesia Sering Timeout ke Gmail?

Ini masalah yang sangat spesifik untuk developer di Indonesia. Ketika server Anda di Indonesia mengirim email langsung ke Gmail, ada beberapa faktor yang menyebabkan latency tinggi atau timeout.

Rute jaringan dari Indonesia ke Gmail servers yang sebenarnya sering melalui Hong Kong atau Singapore exchange point. Setiap hop menambah latency. Kalau ada packet loss di salah satu hop tersebut, koneksi SMTP yang punya timeout 30 detik akan putus sebelum proses selesai.

Masalah lain: banyak IP ranges Indonesia yang masuk blacklist Spamhaus karena abuse history dari shared hosting sebelumnya. IP baru yang belum di-warm-up punya reputasi netral, yang artinya beberapa mail server menerima dengan precaution, menolak sementara dengan kode 450.

Solusi praktis untuk masalah ini adalah jangan mengirim email transaksional langsung dari server Anda. Pakai managed SMTP service yang punya IP reputation sudah terbangun dan server egress yang well-connected ke Gmail, Microsoft, dan Yahoo. Ini bukan soal kapasitas server Anda, tapi soal reputation dan routing.

Kalau masalahnya ada di reputasi IP shared yang tidak bisa Anda kontrol, KIRIM.EMAIL Dev bisa menjadi solusi, karena kami secara regular dan serius memanage reputasi IP Kami.

FAQ

Kenapa email tidak masuk folder spam tapi juga tidak pernah sampai?

Kemungkinan besar email Anda sedang dalam queue di server penerima dengan status deferred. Cek mail log server tujuan untuk cari tahu status. Kalau server tujuan adalah Gmail, Anda bisa lihat status pengiriman dengan membuka email dan klik Show original untuk melihat header lengkap yang menunjukkan di mana email berhenti.

Di mana saya bisa melihat log email di server Linux?

Di /var/log/mail.log untuk Postfix atau /var/log/exim4/mainlog untuk Exim. Gunakan tail -f /var/log/mail.log untuk monitoring real-time. Pastikan Postfix atau mail server Anda sudah berjalan dan configured untuk write ke lokasi tersebut.

Apa arti kode SMTP 421, 450, 452, 550, 552?

421 adalah temporary unavailable, retry later. 450 adalah temporary rejection karena IP atau policy. 452 adalah storage exceeded di sisi penerima. 550 adalah hard bounce, alamat tidak valid. 552 adalah mailbox storage exceeded. Dari ini, hanya 550 dan 552 yang menandakan masalah permanen yang tidak akan resolve dengan retry.

Bagaimana cara test SMTP secara manual tanpa kirim email sungguhan?

Gunakan tool swaks dengan perintah swaks --to [email protected] --server mail.target.com. Swaks akan berjalan melalui seluruh SMTP conversation tanpa benar-benar mengirim email final. Ini berguna untuk cek apakah koneksi bisa established dan authentication berhasil.

Kenapa koneksi SMTP sering timeout dari server di Indonesia?

Rute jaringan dari Indonesia ke international mail servers seperti Gmail atau Microsoft melewati exchange point yang mungkin memiliki latency tinggi atau packet loss. Selain itu, banyak IP ranges Indonesia yang masuk blacklist karena abuse history. Solusi paling praktis adalah menggunakan managed SMTP service dengan IP reputation yang sudah established dan egress servers yang well-connected.


Hasbi Putra adalah Head of Marketing di KIRIM.EMAIL, email delivery infrastructure untuk developer dan tim IT di Indonesia. KIRIM.EMAIL mengirim lebih dari 11 juta email per hari dengan server yang sepenuhnya berlokasi di Indonesia.

Leave a Comment

Your email address will not be published. Required fields are marked *