Wie lösche ich E-Mail-Nachrichten in der Sendmail-Warteschlange dauerhaft und verhindere, dass sie erneut eingehen?

Wie lösche ich E-Mail-Nachrichten in der Sendmail-Warteschlange dauerhaft und verhindere, dass sie erneut eingehen?

Ich habe hier ein ziemlich nerviges Problem. Ich habe eine Anwendung getestet und einige Test-E-Mails an gefälschte E-Mail-Adressen erstellt (ganz zu schweigen davon, dass mein Server ohnehin nicht wirklich zum Senden von E-Mails eingerichtet ist). Natürlich sendmailkann ich diese Nachrichten nicht senden und sie bleiben in der sendmailWarteschlange hängen. Ich möchte die Nachrichten, die sich in der Warteschlange angesammelt haben, manuell löschen, anstatt die 5 Tage zu warten, die sendmailnormalerweise erforderlich sind, um den erneuten Versuch einzustellen.

Ich verwende Ubuntu 10.04 und /var/spool/mqueue/dies ist das Verzeichnis, in dem laut jeder Anleitung, die ich gelesen habe, die in die Warteschlange gestellten E-Mails aufbewahrt werden. Wenn ich die Dateien in diesem Verzeichnis lösche, sendmailwird der Versuch, die E-Mails zu verarbeiten, unterbrochen, bis ein scheinbares Cron-Skript ausgeführt wird und dieses Verzeichnis mit den Nachrichten neu füllt, die ich nicht senden möchte. Hier sind einige Zeilen aus meinem 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)

Weiß jemand, wie ich diese Nachrichten dauerhaft loswerde? Nebenbei bemerkt würde ich auch gerne wissen, ob es eine Möglichkeit gibt, das sendmailSenden von E-Mails „vorzutäuschen“. Gibt es die?

Antwort1

Die Nachrichten, die gesendet wurden oder gesendet werden sollen, werden in gespeichert /var/spool/mqueue. Nachrichten, die Sendmail noch nicht in die Warteschlange gestellt hat, finden Sie in /var/spool/mqueue-client.

Versuchen Sie also Folgendes (ich nehme an, Sie möchten loswerdenalleNachrichten in der Warteschlange):

  • Sendmail stoppen
  • rm /var/spool/mqueue/*
  • Wenn Sie wartende Nachrichten entfernen möchten, rm /var/spool/mqueue-client/*.
  • Starten Sie sendmail

Dadurch werden Ihre Warteschlangenordner gelöscht, bis das System eine weitere Nachricht empfängt. Sie können dies überprüfen, indem Sie mailq(beide Warteschlangenordner) oder sendmail -bp(nur den Warteschlangenordner) ausführen.

NOTIZ: Bei den meisten Linux-Distributionen können Sie Dienste mit service sendmail <start|stop|restart>oder starten/stoppen /etc/init.d/sendmail <start|stop|restart>. Beide Optionen haben viele weitere Statusflags, die Sie sehen können, wenn Sie den Befehl und den Dienst ohne die Statusflags eingeben.

Antwort2

Sie werden oft den Vorschlag finden, Dateien aus dem mqueue-Verzeichnis von Sendmail zu entfernen, beispielsweise rm /var/spool/mqueue/*oder schlimmer ( rm -rfusw.). Meiner Meinung nach ist das schlichtweg gefährlich. Es wird in vielen Fällen funktionieren, aber ich empfehle, sich anzuschnallen. Das einfache Entfernen aller Dateien aus mqueue kann legitime Nachrichten löschen.

Es ist ratsam, Sendmail anzuhalten, bevor man Nachrichten aus der Warteschlange entfernt, insbesondere wenn viele Nachrichten entfernt werden müssen. Wenn jedoch nur wenige Nachrichten entfernt werden müssen oder die Warteschlange regelmäßig bereinigt wird, z. B. mithilfe eines Cron-Jobs, besteht eigentlich keine Notwendigkeit, Sendmail anzuhalten. Im schlimmsten Fall wird eine der Nachrichten erneut in die Warteschlange gestellt, die bei einem erneuten Versuch mit ziemlicher Sicherheit entfernt wird.

Im Gegenteil, das Stoppen von Sendmail (z. B. in Ubuntu mit service sendmail stop) reicht möglicherweise nicht aus. Selbst wenn es gestoppt ist, können einige (untergeordnete) Prozesse noch laufen. Man müsste warten, bis sie fertig sind (empfohlen) oder sie beenden.

Um Nachrichten sicher aus mqueue zu entfernen, benötigen Sie die Warteschlangen-IDs der Nachrichten. Die IDs werden im Log nach "sm-mta[...]:" angezeigt. Die IDs aus Ihrem Log-Auszug lauten o530SlbK009365, o4VHn3cw003597, ... Für jede der IDs werden in mqueue 2 Dateien gespeichert, eine beginnt mit "qf", die andere mit "df".

mailqwird im Allgemeinen verwendet, um den Inhalt der Warteschlange aufzulisten. Es zeigt die IDs in der ersten Spalte. Darüber hinaus sollten Sie mailqdie Ausgabe von konsultieren, da dort auch angezeigt wird, ob eine Nachricht aktiv ist/derzeit verarbeitet wird. Beispiel:

-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient----------
oBDDuKAB023946*    1058 Mon Dec 13 14:56 <[email protected]
                 (Deferred: 450-4.2.1 The user you are trying to contact is re)
                                         <[email protected]>
oBAEMuV8000429     1058 Fri Dec 10 15:22 <[email protected]
                 (Deferred: 450-4.2.1 The user you are trying to contact is re)
                                         <[email protected]>

In diesem Beispiel wird die Nachricht mit der ID oBDDuKAB023946gerade verarbeitet, was durch das angehängte Sternchen angezeigt wird. Andere Nachrichten können problemlos gelöscht werden. Um beispielsweise die Nachricht mit der ID zu löschen, oBAEMuV8000429verwenden Sie

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

Einen vielseitigeren Ansatz zum Entfernen von Nachrichten in der Warteschlange bietet Brandon Hutchinson inLöschen von E-Mails aus der E-Mail-Warteschlange. Brandon enthält auch Skripte zum Entfernen von Nachrichten basierend auf dem Domänenteil, der E-Mail-Adresse usw. Die Skripte von Brandon sind sehr hilfreich für die regelmäßige Bereinigung oder Massenentfernung.

Allerdings kümmern sich auch Brandons Skripte nicht um den Status der Nachrichten. Es ist jedoch einfach hinzuzufügen. Fügen Sie am Anfang seiner Skripte Folgendes ein:

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

Fügen Sie dann am Anfang der Subroutine "wanted" ein Häkchen zum Überspringen aktiver Nachrichten hinzu, z. B. mit

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

HTH. Und denken Sie daran, Backups zu machen :-)

Antwort3

Ich hatte dasselbe Problem und fand heraus, dass es zwei Ordner mit in die Warteschlange gestellten Nachrichten gab. Der Ordner /var/spool/clientmqueue/ enthielt Nachrichten, die in /var/spool/mqueue/ landeten, wenn sie nicht zugestellt werden konnten. Um das Problem zu lösen, mussten die Dateien aus beiden Ordnern gelöscht werden.

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

Antwort4

Dies gelang mir mit diesem Bash-Skript

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

verwandte Informationen