Soru E-posta iletilerini kalıcı olarak posta kutusu sırasındaki silme ve geri gelmelerini engelleyebilir miyim?


Burada oldukça sinir bozucu bir sorunum var. Bir uygulamayı test ettim ve sahte e-posta adreslerine bazı test e-postaları oluşturdum (sunucumun zaten e-posta göndermeye hazırlanmadığını söylemem). Tabii ki, sendmail bu mesajları gönderemez ve sendmail Sıraya. 5 gün beklemek yerine sırayla oluşturulmuş iletileri el ile silmek istiyorum sendmail genellikle tekrar denemeyi keser.

Ubuntu 10.04 kullanıyorum ve /var/spool/mqueue/ Okuduğum her nasıl yapıldığının, sıraya alınan e-postaların saklandığını belirttiği dizin. Bu dizindeki dosyaları sildiğimde, sendmail e-postaları bir cron betiği gibi görünene kadar işlemeyi durdurur ve bu dizini gönderilmesini istemediğim iletilerle yeniden doldurur. İşte benim bazı satırlarım syslog:

2 Haziran 17:35:19 sajo-laptop sm-mta [9367]: o530SlbK009365: to =, ctladdr = (33/33), gecikme = 00: 06: 27, xdelay = 00: 06: 22, mailer = esmtp, pri = 120418, röle = e.mx.mail.yahoo.com. [67.195.168.230], dsn = 4.0.0, stat = Ertelendi: Bağlantı, e.mx.mail.yahoo.com ile zaman aşımına uğradı.
2 Haziran 17:35:48 sajo-laptop sm-mta [9149]: o4VHn3cw003597: to =, ctladdr = (33/33), gecikme = 2 + 06: 46: 45, xdelay = 00: 34: 12, mailer = esmtp, pri = 3540649, röle = mx2.hotmail.com. [65.54.188.94], dsn = 4.0.0, stat = Ertelendi: Bağlantı, mx2.hotmail.com ile zaman aşımına uğradı.
Haz 2 17:39:02 sajo-laptop CRON [9510]: (kök) CMD ([-x / usr / lib / php5 / maxlifetime] && [-d / var / lib / php5] && bul / var / lib / php5 / -type f -cmin + $ (/ usr / lib / php5 / maxlifetime) -print0 | xargs -n 200 -r -0 rm)
2 Haziran 17:39:43 sajo-laptop sm-mta [9372]: o52LHK4s007585: to =, ctladdr = (33/33), gecikme = 03: 22: 18, xdelay = 00: 06: 28, mailer = esmtp, pri = 1470404, röle = c.mx.mail.yahoo.com. [206.190.54.127], dsn = 4.0.0, stat = Ertelendi: Bağlantı, c.mx.mail.yahoo.com ile zaman aşımına uğradı.
2 Haziran 17:39:50 sajo-dizüstü sm-mta [9149]: o51I8ieV004377: to =, ctladdr = (33/33), gecikme = 1 + 06: 31: 06, xdelay = 00: 03: 57, postacı = esmtp, pri = 6601668, relay = alt4.gmail-smtp-in.l.google.com. [74.125.79.114], dsn = 4.0.0, stat = Ertelendi: Bağlantı, alt4.gmail-smtp-in.l.google.com ile zaman aşımına uğradı.
Haz 2 17:40:01 sajo-laptop CRON [9523]: (smmsp) CMD (test -x /etc/init.d/sendmail && / usr / paylaşım / sendmail / sendmail cron-msp)


17
2018-06-03 00:51


Menşei


Eh, hala bu problem için herhangi bir çözüm bulamadım. Kesinlikle böyle olmasına neden olan bir çeşit cron betiği gibi görünüyor, ama sıraya alınmış mesajları nerede sakladığını anlayamıyorum ... - Steven Oxley


Cevaplar:


Gönderilen veya gönderilmeye çalışılan mesajlar /var/spool/mqueue. Sendmail'in henüz kuyruğa girmediği mesajlar şu adreste bulunabilir: /var/spool/mqueue-client.

Öyleyse bunu deneyin (kurtulmak istediğinizi varsayalım herşey sıradaki iletiler):

  • Sendmail'i durdur
  • rm /var/spool/mqueue/*
  • Mesajların beklemede kalmasını istiyorsanız rm /var/spool/mqueue-client/*.
  • Sendmail'i başlat

Bu, sisteminiz başka bir ileti alana kadar sıra klasörlerimizi temizleyecektir. Çalışarak kontrol edebilirsiniz. mailq (her iki kuyruk klasörü) veya sendmail -bp (sadece kuyruk klasörü).

NOT:  Çoğu Linux dağıtımında, hizmetleri başlatarak / durdurabilirsiniz service sendmail <start|stop|restart>veya /etc/init.d/sendmail <start|stop|restart>. Her iki seçenek de, durum bayraklarını kullanmadan komutta ve serviste yazarak gözlemlenebilen birçok durum işaretine sahiptir.


25
2018-06-09 13:31



Bunu daha önce yapmış olduğunu söyledi, ama mesajlar yeniden ortaya çıktı ... - Massimo
Ama önce sendmail'i durdurmadan, işte bu nokta. - weeheavy
Şey, özlediğim adımın üzerine çarpmış olabilirsiniz. - Steven Oxley
Fedora 19'da, / var / spool / clientmqueue (/ var / spool / mqueue gibi) görüyorum - TomG
Bazı sebeplerden dolayı sudo ile bile bu benim için işe yaramazdı. no matches found). Yani ben chmodklasörleri düzenleyin 777 ve sonra içeriği silmek mümkün oldu. - Sridhar-Sarnobat


Örneğin, örneğin Sendmail'in mizin dizinindeki dosyaları kaldırma önerisini bulabilirsiniz. rm /var/spool/mqueue/* veya daha kötüsü (rm -rf vb.). IMHO, bu tehlikeli bir şey. Birçok durumda işe yarayacak ancak emniyet kemerlerinizi sabitlemenizi tavsiye ederim. Tüm dosyaları mqueue'dan kaldırmak yasal mesajları silebilir.

Sıraya alınmış mesajları kaldırmadan önce Sendmail'i durdurmak için, özellikle çok sayıda iletinin kaldırılması gerekirse, iyi bir öneride bulunabilirsiniz. Bununla birlikte, sadece birkaç mesajın kaldırılması veya sıra düzenli bir şekilde temizlendiyse, örn. Bir cron işi ile aslında Sendmail'i durdurmaya gerek yoktur. En kötü durumda, mesajlardan biri tekrar denendiğinde neredeyse kesinlikle kaldırılacak olan mesajlar yeniden sıraya konur.

Aksine, Sendmail'i (örneğin Ubuntu’da service sendmail stop) yeterli olmayabilir. Durdurulduğunda bile (çocuk) süreçleri hala çalışıyor olabilir. Biri bitinceye kadar beklemeli (tavsiye edilir) veya öldürür.

Mesajları mque gelen güvenli bir şekilde kaldırmak için mesajların sıra kimliğine ihtiyacınız var. Kimlikler günlüğe "sm-mta [...]:" sonra gösterilir. Günlükler alıntılarınızdaki kimlikler o530SlbK009365, o4VHn3cw003597, ... Kimliklerin her biri için 2 dosya, "qf", diğeri "df" ile başlayarak, mqueue depolanır.

mailq genellikle sıranın içeriğini listelemek için kullanılır. İlk sütundaki kimlikleri gösterir. Ayrıca, danışmalısınız mailqBir mesajın aktif / şu anda işlenip işlenmediğini de gösterdiği için çıktı. Örneğin.

-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient----------
oBDDuKAB023946*    1058 Mon Dec 13 14:56 <vfn-l-bounces+so=example.com@fam.tuwi
                 (Deferred: 450-4.2.1 The user you are trying to contact is re)
                                         <so@example.com>
oBAEMuV8000429     1058 Fri Dec 10 15:22 <vfn-l-bounces+sby=example.com@fam.tuw
                 (Deferred: 450-4.2.1 The user you are trying to contact is re)
                                         <so@example.com>

Bu örnekte ID ile mesaj oBDDuKAB023946 ekli yıldız tarafından gösterilen, şu anda işleniyor. Diğer mesajların kaldırılması güvenlidir. Örneğin, mesajı ID ile kaldırmak için oBAEMuV8000429 kullanım

rm /var/spool/mqueue/{d,q}foBAEMuV8000429

Kuyruklu mesajları kaldırmak için daha çok yönlü bir yaklaşım, Brandon Hutchinson tarafından sağlanmaktadır. Posta kuyruğundan posta silme. Brandon ayrıca, alan kısmına, e-posta adresine vb. Dayalı mesajları kaldırmak için komut dosyaları içerir. Brandon'ın betikleri düzenli temizleme veya toplu kaldırma için çok yararlıdır.

Yine de, Brandon'ın senaryoları bile mesajların durumuyla ilgilenmiyor. Ancak, eklemek kolaydır. Yazılarının başlangıcına dahil et

# Get current mailq status
my $mailq = `mailq`;

Sonra, alt rutin başında "aranan" aktif mesajları atlamak için bir kontrol ekleyin, ör. ile

# skip if file is currently processed by MTA
if ($mailq =~ /\n$queue_id\*/) {
   $debug && print "$queue_id is locked.\n";
   last;
}

HTH. Ve yedekleri yapmayı unutmayın :-)


9
2017-12-13 16:36





Aynı sorunu yaşadım ve sıraya alınmış iletilere sahip 2 klasörün olduğunu tespit ettim. Klasör / var / spool / clientmqueue / teslim edilmediyse / var / spool / mqueue / içinde biten mesajlar vardı. Sorunu çözmek için dosyaları her iki klasörden silmek gerekiyordu.

rm -f / var / spool / clientmqueue / * rm -f / var / spool / mqueue / *


4
2017-07-09 11:11





Bunun bir cron betiğinin çalışması olduğunu düşünmüyorum, bir uygulama sorunu veya sendmail ile ilgili bir şey olması daha muhtemel; Her neyse, bunu yaparken herhangi bir cron işi çıkarmak için, sadece durdurabilirsiniz crondBir süreliğine ve bunun devam edip etmediğine bakın.


0
2018-06-09 13:35





Bu bash komut dosyasını kullanarak bunu başardım

for i in `sudo ls /var/spool/mqueue`
do
    sudo rm -rv `echo /var/spool/mqueue/$i`
done

0
2018-06-16 17:39



Yani sadece çağırmak için bir subshell açın echo ve söz konusu çıktıyı almak echo bir parametre olarak kullanmak için rm. Tutarsızlıklarını bile görmezden gelmek sudo ve rmBu subshelling sade ve savurgan. - Felix Frank
Eğer daha 'kabul edilebilir' bir çözümünüz varsa, sadece bir yorumun ne kadar gereksiz olduğunu göstermek yerine, çözümünüzü açıklamak için zaman kaybı olmayacaktır. Şimdiden teşekkürler - Shu Hikari
Bu rahatsız edici ve kibirli karşı karşıya eğer üzgünüm. Daha ekonomik bir yaklaşım olurdu sudo find /var/spool/mqueue -maxdepth 1 -delete. İşaret etmek önemli buldum ne özellikle komut dosyanızla sorunludur. Tact eksikliği için özür dilerim. - Felix Frank
Evet, ama şimdi sen noktanı açıkladın ve ben tamamen anladım. Özür kabul edildi, endişelenme. Teşekkürler: D - Shu Hikari