Soru Belirli bir etki alanına gönderilen Postfix sıra iletileri nasıl kaldırılır


Birden fazla alana sahip bir sunucum var. Belirli bir alan adı için tüm Postfix kuyruk iletilerini nasıl temizleyebilirim?


5
2017-10-19 18:22


Menşei




Cevaplar:


Bu komut, aşağıdaki adresle biten bir alıcı adresine gönderilen tüm postaları siler. @example.com 

sudo mailq | tail -n +2 | awk 'BEGIN { RS = "" } /@example\.com$/ { print $1 }' | tr -d '*!' | sudo postsuper -d - 

8
2017-10-19 19:16



Linux'ta kullan tail -n +2 yerine tail +2. - Brian Minton
tr -d Awk betiğine de geri yüklenebilir. değiştirmek { print $1 } ile { r = $1; gsub(/[!*]/, "", r); print r } - tripleee


Bu çözümü 12.04'te ubuntu denedim ve şu şekilde çalışmıyor:

sudo mailq | tail +2 | awk 'BEGIN { RS = "" } / @example\.com$/ { print $1 }' | tr -d '*!' | sudo postsuper -d -

Bu şekilde değiştirmem gerek:

postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } /@example\.com/ { print $1 }' | tr -d '*!' | postsuper -d -

6
2017-07-26 18:47



evet, "@" dan önceki alanı ortadan kaldırmak zorundasınız. - Alex


Bakmak pfdel.pl, kuyruğu yönetmek için zorunlu bir araç. Bir regexp alır ve alanınıza karşılık gelen sırada bekleyen postaları kaldırın.


1
2017-10-19 18:51





Grep çözümü

mailq | grep example.com -B1 | grep -oE "^[A-Z0-9]{10,11}" | sudo postsuper -d -

kimliğin 10 ile 11 basamak arasında olduğunu varsayar (inode'u temel alır)


1
2017-11-29 14:17





Belirli bir etki alanındaki e-posta adreslerinden veya e-posta adreslerinden iletileri silmek istediğinizde, bu komut benim için çalışır:

mailq | \
  tail -n +2 | \
  awk 'BEGIN { RS = "" } / @example\.com$/ { print $1 }' | \
  tr -d '*!' | \
  postsuper -d -

Ayrıca e-postaları belirli e-postalardan veya belirli e-postalardan silmek için de çalışır adresler örnek vererek mail@example\.com$/ yerine @example\.com$/.

Den alınan howtoforge.com bir yorum. İlgili çözümler ve bir satırda komut için oraya bakın. (Okunabilirlik için bash çizgisi sürekliliğini kullandım).

Adresin gönderici, alıcı vb. Olarak görünmesine bağlı olarak silinmeyi sağlayan çok benzer bir komut bulunur. man postsuper, hakkında yazıyor -d:

Örneğin, tüm postayı tam olarak bir alıcı user@example.com ile silmek için:

mailq | \
  tail -n +2 | \
  grep -v '^ *(' | \
  awk 'BEGIN { RS = "" } { if ($8 == "user@example.com" && $9 == "") print $1 }' | \
  tr -d '*!' | \
  postsuper -d -

(Değişkenler: $ 7 = gönderen, $ 8 = alıcı1, $ 9 = alıcı2. Kullanılacak teklifi değiştirdim. tail -n +2çünkü onların tail +2 en azından bazı modern sistemlerde daha fazla çalışmaz.)


0
2017-08-30 08:00



Daha önce yer @example\.com yanlış görünüyor. - tripleee
Çizginin sonundaki ters eğik çizgi gerçekte gerekli değildir; Kabuk, son belirteç ise komutun bir sonraki satırda devam ettiğini anlar. | (veya || veya && veya başkaları bir demet). - tripleee


Ben biraz değiştirdim:

mailq | grep -B1 | grep -oE "^ [A-Z0-9] {12}" | xargs -I% postsuper -d%


-2
2018-04-12 15:20



O zaman lütfen bunun nedenini ve ne yapması gerektiğini açıklayınız. - Sven♦
Yüzlerce örnek çalıştıran postsuper hiç bir gelişme değildir. xargs Düzgün kullandığınız zaman güzel, ama bu durumlardan biri değil. - tripleee