Entfernen der Sendeverzögerung von Mutt

Entfernen der Sendeverzögerung von Mutt

Entfernen der Sendeverzögerung von Mutt

Ich habe ursprünglich den integrierten SMTP-MTA von Mutt verwendet. Allerdings gibt es nach dem Senden eine beträchtliche Pause. Dies kann durch die Verwendung eines externen MTA mit set sendmail_wait=-1in deaktiviert werden muttrc.

Wenn ich jedoch msmtpals MTA verwende, dann gibt es keine Benachrichtigung über Fehler ( msmtpschreibt aber logfilewie in angegeben ~/.msmtprc).

Versuchen Sie, Benachrichtigungen zu erhalten

Von der Befehlszeile aus kann ich bei msmtpeinem Fehler einen Befehl auslösen.

</tmp/tosend msmtp -a default [email protected] --read-envelope-from || echo failed

Denkbar wäre, dass ich eine Fehlermeldung an meine lokale *nix-Mail-Adresse schicken könnte. Das scheint jedoch in Mutt nicht zu funktionieren, wenn ich Folgendes einstelle muttrc.

set sendmail = "/usr/bin/msmtp || date >> /tmp/msmtp.fail"

Dies führt dazu, dass das Senden aller E-Mails ohne Rückmeldung fehlschlägt und der folgende Fehler msmtpauftritt logfile.

Nov 05 10:53:09 host=mail.bar.com tls=on auth=on [email protected] [email protected] recipients=||,date,>>,/tmp/msmtp.fail,[email protected] smtpstatus=501 smtpmsg='501 #5.1.1 bad address ' errormsg='recipient address >> not accepted by the server' exitcode=EX_DATAERR

Offensichtlich muttwerden die zusätzlichen Teile des Befehls als Empfänger analysiert.

Frage

Gibt es eine Möglichkeit, Benachrichtigungen über gesendete E-Mails zu erhalten, die fehlgeschlagen sind, während sie im Hintergrund gesendet werden? Ich bin nicht msmtpunbedingt daran gebunden.

Antwort1

Schreiben Sie sich ein kleines Shell-Skript, das Sie als "sendmail"-Wert verwenden können. Konfigurieren Sie es beispielsweise ~/.muttrcmit

set sendmail = /home/yourid/bin/mymuttsendmail

und mymuttsendmailgeben Sie etwas ein wie

#!/bin/bash
tmp=$(mktemp /tmp/mymutt.XXXXXX)
cat >$tmp
( if ! msg=$(msmtp "$@" <$tmp 2>&1)
  then zenity --error --text "$msg"
  fi 
  rm $tmp
) &
exit 0

und chmod +xdiese Datei. Denken Sie daran, dass dieses Skript mit den Empfängern als zusätzliche Argumente aufgerufen wird, die wir mit an msmtp übergeben "$@", und die E-Mail wird auf stdin sein, die wir sofort in eine temporäre Datei kopieren, um sie dann an weiterzugeben msmtp. Alle Fehlermeldungen werden in der Variable erfasst msgund wenn der Rückgabecode ein Fehler ist, können Sie beispielsweise ein Popup-Dialogfeld wie Zenity ausführen.

Antwort2

Haben Sie über die Verwendung eines besseren Nullmailers nachgedacht, der msmtpso minimalistisch ist, wie es nur geht? Oder sogar eines vollwertigen MTA wie Exim oder Postfix (die nicht sehr schwer zu konfigurieren sind)?

Eine Liste weiterer Nullmailer-Optionen finden Sie unterhttp://linuxmafia.com/faq/Mail/nullmailers.html

Antwort3

meuhs Antwort war sehr hilfreich. Hier ist eine einfachere Version von mymuttsendmail. Ersetzen Sie es usernameim folgenden Code durch Ihren Benutzernamen, damit es Ihnen im Fehlerfall eine lokale E-Mail senden kann. Die Variable $? speichert den Exit-Code von msmtp und verwendet lokale E-Mail, um Ihnen eine E-Mail zu senden, wenn beim Senden Ihrer E-Mail ein Fehler auftritt. Denken Sie daran, sendmail_wait=-1 festzulegen.

#!/bin/bash
/usr/bin/msmtp "$@" 2>&1
VAL=$?
if (($VAL))
then 
    # message not sent
    echo "Error sending mail to $@, exit code $VAL" | mail -s 'ERROR' username
fi 

verwandte Informationen