Bali, Indonesia
Insights

Cara Cek Limit Max Emails per Hour cPanel Benar-Benar Diterapkan oleh Exim

October 23, 2026
0:00
Kamu sudah mengisi angka di "Max hourly emails per domain" di WHM, lalu suatu hari ada akun yang mengirim jauh lebih banyak dari itu. Pertanyaan yang biasanya muncul berikutnya: limitnya tidak jalan, atau ada setting lain yang menimpanya? Jawabannya hampir selalu yang kedua. Angka di Tweak Settings cuma salah satu dari beberapa lapis, dan Exim hanya menegakkan angka yang akhirnya sampai ke file konfigurasinya. Artikel ini membahas jalur angka tersebut dari layar WHM sampai ke keputusan Exim saat sebuah email mau dikirim, lalu cara membuktikannya lewat log dan queue.
Ada tiga lapis setting, dari yang paling umum ke yang paling spesifik. Lapis pertama ada di WHM, Tweak Settings, tab Mail. Di sana ada setting batas per jam untuk semua domain di server. Anggap ini default server, yang hanya dipakai kalau lapis di bawahnya tidak mengatur apa-apa. Lapis kedua adalah package dan akun. Saat membuat atau mengedit package, ada field "Maximum Hourly Email by Domain Relayed". Nilai ini menempel ke akun yang memakai package tersebut, dan bisa diubah lagi per akun lewat Modify an Account. Kalau akun punya angka sendiri, angka itulah yang berlaku untuk semua domain di akun tersebut, bukan angka dari Tweak Settings. Lapis ketiga adalah override per domain. Satu akun bisa punya beberapa addon domain, dan salah satunya bisa diberi batas berbeda. Override ini disimpan di file data akun dengan format key yang menyertakan nama domain. Aturannya sederhana: yang paling spesifik menang. Override domain mengalahkan nilai akun, dan nilai akun mengalahkan default server. Sumber bingung yang paling sering adalah nilai "Unlimited" di package. Itu bukan berarti "ikut default server", tapi memang tidak dibatasi. Jadi kamu bisa memasang limit ketat di Tweak Settings, tapi akun dengan package Unlimited tetap lolos.
Exim tidak membaca layar WHM. Yang dibaca adalah file hasil generate. Alurnya kira-kira begini:
  1. Saat kamu menyimpan setting di WHM, nilai server-wide masuk ke /var/cpanel/cpanel.config, sedangkan nilai akun dan override domain masuk ke /var/cpanel/users/<namauser>.
  2. cPanel menjalankan script yang menyusun ulang daftar limit per domain ke /etc/email_send_limits. Script ini biasanya /usr/local/cpanel/scripts/build_maxemailsconfig.
  3. Konfigurasi Exim versi cPanel punya pengecekan tambahan saat email akan dikirim ke luar. Pengecekan ini mencari domain pengirim di /etc/email_send_limits, menambah counter untuk jam berjalan, lalu membandingkannya dengan batas.
Kalau ada yang aneh, cara tercepat adalah membaca ketiga file itu dan membandingkannya. Semua perintah di bawah ini hanya membaca, tidak mengubah apa pun:
BASH
# Default server-wide dari Tweak Settings
grep -i 'maxemailsperhour' /var/cpanel/cpanel.config

# Nilai akun dan override per domain (ganti namauser)
grep -i 'MAX_EMAIL_PER_HOUR' /var/cpanel/users/namauser

# Angka final yang dibaca Exim untuk domain tertentu
grep -i 'contohdomain.com' /etc/email_send_limits
Perhatikan baris dari perintah terakhir. Kalau angka di /etc/email_send_limits berbeda dengan yang kamu harapkan, Exim akan memakai angka di file itu, bukan yang ada di ingatanmu. Kalau domain tidak muncul sama sekali, cek apakah domain itu benar milik akun tersebut dan apakah file baru saja di-generate ulang. Format kolom di file ini bisa sedikit berbeda antar versi cPanel, jadi cocokkan dengan dokumentasi versi yang kamu pakai. Ada satu hal lagi yang sering terlewat. Limit ini berlaku untuk email yang di-relay Exim ke server lain. Email dari mail() PHP maupun dari SMTP yang login dengan akun email domain itu sama-sama lewat Exim, jadi biasanya ikut dihitung. Pengiriman ke mailbox lokal di server yang sama umumnya tidak dihitung. Kalau ada akun yang mengirim lewat SMTP pihak ketiga, misalnya API email eksternal yang dipanggil dari aplikasi, trafik itu tidak pernah menyentuh Exim. Limit di WHM tidak bisa melihatnya.
Banyak orang mengira email langsung ditolak begitu limit tercapai. Perilaku bawaan cPanel lebih bertahap. Selama counter masih di bawah batas, email dikirim seperti biasa. Begitu batas terlewati, email berikutnya tidak langsung dibuang. Email itu di-defer, artinya disimpan di queue dan dicoba lagi nanti, saat jendela satu jam sudah bergeser dan counter turun. Kalau domain terus mengirim sampai melewati ambang kedua, email di atas ambang itu ditandai gagal dan tidak dicoba ulang. Ambang kedua ini diatur sebagai persentase dari limit di Tweak Settings. Sebagai contoh ilustrasi: kalau limit 100 per jam dan ambang queue diatur 150%, email ke-101 sampai sekitar ke-150 masuk queue dan dicoba lagi, sedangkan sisanya gagal. Cek nilai persentase yang sebenarnya di server kamu, karena defaultnya bisa berbeda antar versi. Dari sisi pengirim, efeknya terasa seperti "email terlambat". Tidak ada error yang jelas di aplikasi, karena aplikasi biasanya sudah menerima jawaban sukses waktu menyerahkan email ke Exim. Penundaan terjadi setelahnya. Inilah sebabnya pemilik website sering bilang limitnya tidak jalan. Dari sudut pandang mereka, email "terkirim", padahal sebenarnya masih menunggu di queue server.
Bukti paling langsung ada di /var/log/exim_mainlog. Saat pengecekan limit memutuskan menunda atau menggagalkan email, Exim menulis pesan yang menyebut nama domain, jumlah yang sudah terkirim, batasnya, dan persentasenya.
BASH
grep 'has exceeded the max emails per hour' /var/log/exim_mainlog | tail -n 20

# contoh format output (ilustrasi, bukan log asli):
# ... Domain contohdomain.com has exceeded the max emails per hour (101/100 (101%)) allowed.  Message will be reattempted later
# ... Domain contohdomain.com has exceeded the max emails per hour (151/100 (151%)) allowed.  Message discarded.
Cara membacanya: angka pertama adalah jumlah yang tercatat dalam jendela satu jam, dan angka kedua adalah limit yang dipakai Exim saat itu. Angka kedua inilah jawaban paling jujur untuk pertanyaan "limit mana yang benar-benar berlaku". Kalau angkanya 500 padahal di Tweak Settings kamu isi 100, berarti ada nilai akun atau override domain yang menimpanya. Lacak balik pakai grep di bagian sebelumnya. Kalau grep ini tidak mengembalikan apa-apa padahal akun jelas mengirim banyak, ada beberapa kemungkinan. Domain itu mungkin memang Unlimited, email dikirim lewat jalur yang tidak melewati Exim, atau log sudah dirotasi sehingga kejadiannya ada di file lama. Kalau begitu, cek juga file arsipnya, misalnya yang berakhiran .gz dengan zgrep. Pola nama file rotasi bisa berbeda tergantung setup logrotate di server. Perlu diingat juga, pesan teks di atas bisa sedikit berubah antar versi cPanel. Kalau grep frasa lengkap tidak menemukan apa-apa, coba potongan yang lebih pendek seperti max emails per hour.
Log memberi tahu bahwa limit memutuskan sesuatu. Queue menunjukkan dampaknya sekarang, yaitu berapa banyak email domain itu yang masih menunggu.
BASH
# Total email di queue
exim -bpc

# Jumlah email di queue dari pengirim domain tertentu
exiqgrep -c -f '@contohdomain\.com$'

# Lihat header satu email (ganti dengan message ID dari exim -bp)
exim -Mvh MESSAGE_ID
Kalau exiqgrep menunjukkan banyak email dari domain itu dan log berisi pesan "reattempted later", limit kamu bekerja sesuai desain. Email ditahan, bukan dikirim. Saat mengecek header lewat exim -Mvh, perhatikan juga apakah pengirimnya akun email biasa, user sistem cPanel (biasanya dari skrip PHP), atau sesuatu yang mencurigakan. Ini membantu membedakan newsletter sah yang kebablasan dari akun yang disalahgunakan. Satu peringatan. Jangan buru-buru memaksa queue dikirim ulang dengan opsi force, dan jangan menghapus email dari queue secara massal sebelum yakin isinya. Memaksa pengiriman tidak melewati limit. Email hanya akan dicek ulang dan ditunda lagi, sementara server membuang waktu memprosesnya. Menghapus email dari queue juga tidak bisa dibatalkan. Kalau isinya spam, bersihkan secara terarah berdasarkan pengirim setelah sumbernya ditutup. Di meja support, urutan cek yang biasanya paling cepat adalah: lihat pesan limit di exim_mainlog, ambil angka limit dari pesan itu, lalu cocokkan dengan /etc/email_send_limits dan file user. Dengan urutan ini, kamu tidak perlu menebak-nebak setting mana yang aktif. Intinya, jangan menilai limit dari layar WHM. Nilai yang benar-benar dipakai adalah yang ada di /etc/email_send_limits, dan buktinya ada di angka kedua pada pesan log Exim. Kalau angka itu tidak sesuai harapan, telusuri dari yang paling spesifik dulu: override domain, lalu nilai akun atau package, baru default server. Setelah itu, lihat queue untuk memastikan email yang ditahan memang menunggu, bukan hilang.