Saya punya masalah yang cukup menjengkelkan di sini. Saya telah menguji suatu aplikasi dan telah membuat beberapa e-mail percobaan ke alamat e-mail palsu (belum lagi server saya tidak benar-benar diatur untuk mengirim e-mail). Tentu saja, sendmail
tidak dapat mengirim pesan-pesan ini dan mereka telah terjebak dalam sendmail
antrian. Saya ingin menghapus secara manual pesan yang telah menumpuk di antrian alih-alih menunggu 5 hari yang sendmail
biasanya diperlukan untuk berhenti mencoba lagi.
Saya menggunakan Ubuntu 10,04 dan /var/spool/mqueue/
merupakan direktori di mana setiap cara saya baca membaca email yang disimpan dalam antrian. Ketika saya menghapus file dalam direktori ini, sendmail
berhenti mencoba memproses e-mail sampai apa yang tampak sebagai skrip cron berjalan dan mengisi kembali direktori ini dengan pesan yang tidak ingin saya kirim. Inilah beberapa baris dari saya syslog
:
Jun 2 17:35:19 sajo-laptop sm-mta[9367]: o530SlbK009365: to=, ctladdr= (33/33), delay=00:06:27, xdelay=00:06:22, mailer=esmtp, pri=120418, relay=e.mx.mail.yahoo.com. [67.195.168.230], dsn=4.0.0, stat=Deferred: Connection timed out with e.mx.mail.yahoo.com.
Jun 2 17:35:48 sajo-laptop sm-mta[9149]: o4VHn3cw003597: to=, ctladdr= (33/33), delay=2+06:46:45, xdelay=00:34:12, mailer=esmtp, pri=3540649, relay=mx2.hotmail.com. [65.54.188.94], dsn=4.0.0, stat=Deferred: Connection timed out with mx2.hotmail.com.
Jun 2 17:39:02 sajo-laptop CRON[9510]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm)
Jun 2 17:39:43 sajo-laptop sm-mta[9372]: o52LHK4s007585: to=, ctladdr= (33/33), delay=03:22:18, xdelay=00:06:28, mailer=esmtp, pri=1470404, relay=c.mx.mail.yahoo.com. [206.190.54.127], dsn=4.0.0, stat=Deferred: Connection timed out with c.mx.mail.yahoo.com.
Jun 2 17:39:50 sajo-laptop sm-mta[9149]: o51I8ieV004377: to=, ctladdr= (33/33), delay=1+06:31:06, xdelay=00:03:57, mailer=esmtp, pri=6601668, relay=alt4.gmail-smtp-in.l.google.com. [74.125.79.114], dsn=4.0.0, stat=Deferred: Connection timed out with alt4.gmail-smtp-in.l.google.com.
Jun 2 17:40:01 sajo-laptop CRON[9523]: (smmsp) CMD (test -x /etc/init.d/sendmail && /usr/share/sendmail/sendmail cron-msp)
Adakah yang tahu bagaimana saya bisa menyingkirkan pesan-pesan ini secara permanen? Sebagai catatan tambahan, saya juga ingin tahu apakah ada cara untuk mengatur sendmail
pengiriman email "palsu". Disana?
Jawaban:
Pesan-pesan yang telah dikirim atau sedang mencoba dikirim disimpan di
/var/spool/mqueue
. Pesan-pesan yang belum dicoba dikirim oleh Sendmail dapat ditemukan di/var/spool/mqueue-client
.Jadi coba ini (saya berasumsi Anda ingin menyingkirkan semua pesan dalam antrian):
rm /var/spool/mqueue/*
rm /var/spool/mqueue-client/*
,.Ini akan menghapus folder antrian Anda hingga sistem menerima pesan lain. Anda dapat mengecek dengan menjalankan
mailq
(kedua folder antrian), atausendmail -bp
(hanya folder antrian).CATATAN: Dengan sebagian besar distribusi Linux Anda dapat memulai / menghentikan layanan dengan
service sendmail <start|stop|restart>
atau/etc/init.d/sendmail <start|stop|restart>
. Kedua opsi memiliki banyak flag status lain yang dapat diamati dengan mengetikkan perintah dan layanan tanpa flag status.sumber
no matches found
). Jadi saya mengeditchmod
folder777
dan kemudian dapat menghapus isinya.Anda akan sering menemukan saran untuk menghapus file dari direktori mqueue Sendmail misalnya
rm /var/spool/mqueue/*
atau lebih buruk (rm -rf
dll). IMHO, ini sangat berbahaya. Ini akan berfungsi dalam banyak kasus tetapi saya sarankan untuk mengikat sabuk pengaman Anda. Hanya menghapus semua file dari mqueue mungkin menghapus pesan yang sah.Untuk menghentikan Sendmail sebelum menghapus pesan yang antri adalah saran yang bagus terutama jika banyak pesan yang perlu dihapus. Namun, jika hanya beberapa pesan yang akan dihapus atau jika antrian dibersihkan secara rutin misalnya dengan menggunakan tugas cron, sebenarnya tidak perlu menghentikan Sendmail. Dalam kasus terburuk, salah satu pesan akan dikirim ulang yang hampir pasti akan dihapus ketika Anda mencoba lagi.
Sebaliknya, menghentikan Sendmail (misalnya di Ubuntu dengan
service sendmail stop
) mungkin tidak cukup. Bahkan ketika dihentikan beberapa proses (anak) mungkin masih berjalan. Seseorang harus menunggu sampai mereka selesai (disarankan) atau membunuh mereka.Untuk menghapus pesan dari mqueue dengan aman, Anda memerlukan ID antrian pesan. ID ditampilkan dalam log setelah "sm-mta [...]:". ID dari kutipan log Anda adalah
o530SlbK009365
,,o4VHn3cw003597
... Untuk masing-masing file ID 2 disimpan dalam mqueue, satu dimulai dengan "qf", yang lain dimulai dengan "df".mailq
umumnya digunakan untuk membuat daftar konten antrian. Ini menunjukkan ID di kolom pertama. Selanjutnya, Anda harus berkonsultasimailq
dengan output karena juga menunjukkan apakah pesan sedang aktif / sedang diproses. MisalnyaDalam contoh ini pesan dengan ID
oBDDuKAB023946
sedang diproses, ditunjukkan oleh tanda bintang yang ditambahkan. Pesan lain aman untuk dihapus. Misalnya, untuk menghapus pesan denganoBAEMuV8000429
penggunaan IDPendekatan yang lebih fleksibel untuk menghapus pesan yang antri disediakan oleh Brandon Hutchinson dalam Menghapus email dari antrian email . Brandon juga menyertakan skrip untuk menghapus pesan berdasarkan bagian domain, alamat email dll. Skrip Brandon sangat membantu untuk pembersihan rutin atau penghapusan massal.
Namun demikian, bahkan skrip Brandon tidak memperhatikan status pesan. Namun, mudah untuk ditambahkan. Sertakan di awal skripnya
Kemudian, pada awal sub rutin "ingin" tambahkan tanda centang untuk melewati pesan aktif, misalnya dengan
HTH. Dan, ingatlah untuk membuat cadangan :-)
sumber
Saya memiliki masalah yang sama dan menemukan bahwa ada 2 folder dengan pesan yang antri. Folder / var / spool / clientmqueue / memiliki pesan yang berakhir di / var / spool / mqueue / jika gagal dikirim. Menghapus file dari kedua folder itu diperlukan untuk menyelesaikan masalah.
rm -f / var / spool / clientmqueue / * rm -f / var / spool / mqueue / *
sumber
Saya tidak berpikir ini adalah karya skrip cron, ini lebih cenderung menjadi masalah aplikasi, atau sesuatu yang terkait dengan sendmail itu sendiri; Lagi pula, untuk mengesampingkan pekerjaan cron melakukan ini, Anda bisa berhenti
crond
sebentar dan melihat apakah ini terus terjadi.sumber
Saya berhasil melakukan ini dengan menggunakan skrip bash ini
sumber
echo
dan mengambil output dari kataecho
untuk digunakan sebagai parameterrm
. Bahkan mengabaikan garpu gratissudo
danrm
, subshelling ini sia-sia.sudo find /var/spool/mqueue -maxdepth 1 -delete
. Saya memang merasa penting untuk menunjukkan apa yang bermasalah dengan skrip Anda secara khusus. Permintaan maaf karena kurangnya kebijaksanaan.