Sebagai seorang admin email server khususnya Zimbra, tidak jarang saya melihat adanya antrian email yang tidak pernah terkirim. Bahkan setelah batas maksimal antrian (5 hari defaultnya). Pada akhirnya email tersebut expire dari antrian dan bouncing ke pengirim.
Salah satu penyebabnya adalah domain yang dikirimkan tidak ada di internet atau tidak memiliki MX. Misalnya domain gmail.con (typo). Beberapa pesan yang muncul di antrian seperti Connection timed out, No route to host, Connection refused, Recipient address rejected: Domain not found, dan lain-lain.
Pesan-pesan yang muncul tersebut ditangkap menggunakan perintah grep, disortir dan unik, lalu dihapus menggunakan perintah pfdel.
Berikut sample scriptnya
touch /srv/hapus-invalid-email.sh chmod +x /srv/hapus-invalid-email.sh vi /srv/hapus-invalid-email.sh
#!/bin/sh #Hapus Layar clear postqueue -p | grep -A 1 "Connection timed out" | grep @ | perl -lap -e 's/\s+|^\n//sg' | cut -d "@" -f2 > /tmp/has-no-mx-records.txt postqueue -p | grep -A 1 "No route to host" | grep @ | perl -lap -e 's/\s+|^\n//sg' | cut -d "@" -f2 >> /tmp/has-no-mx-records.txt postqueue -p | grep -A 1 "Connection refused" | grep @ | perl -lap -e 's/\s+|^\n//sg' | cut -d "@" -f2 >> /tmp/has-no-mx-records.txt postqueue -p | grep -A 1 "Recipient address rejected: Domain not found" | grep @ | perl -lap -e 's/\s+|^\n//sg' | cut -d "@" -f2 | grep -v ">" >> /tmp/has-no-mx-records.txt USERS=`cat /tmp/has-no-mx-records.txt | sort | uniq` echo "Looping for all users" for ACCOUNT in $USERS; do cekmx=`timeout 3 host -t MX $ACCOUNT`; if [[ $cekmx == "$ACCOUNT has no MX record" ]] || [[ $cekmx == "Host $ACCOUNT not found: 3(NXDOMAIN)" ]]; then echo "Hapus antrian Domain : $ACCOUNT" /srv/pfdel *@$ACCOUNT else echo "Domain $ACCOUNT status MX tidak diketahui" fi done echo "Proses penghapusan selesai dilakukan"
Pastikan script pfdel disimpan di folder /srv. Jika perintah postqueue belum ada dan menggunakan Zimbra, symlink postqueue
ln -sf /opt/zimbra/common/sbin/postqueue /usr/sbin/
Test jalankan script untuk menghapus antrian email yang ada. Buat crontab untuk menjalakannya setiap interval waktu tertentu
Silakan dicoba 🙂