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=-1
in deaktiviert werden muttrc
.
Wenn ich jedoch msmtp
als MTA verwende, dann gibt es keine Benachrichtigung über Fehler ( msmtp
schreibt aber logfile
wie in angegeben ~/.msmtprc
).
Versuchen Sie, Benachrichtigungen zu erhalten
Von der Befehlszeile aus kann ich bei msmtp
einem 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 msmtp
auftritt 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 mutt
werden 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 msmtp
unbedingt daran gebunden.
Antwort1
Schreiben Sie sich ein kleines Shell-Skript, das Sie als "sendmail"-Wert verwenden können. Konfigurieren Sie es beispielsweise
~/.muttrc
mit
set sendmail = /home/yourid/bin/mymuttsendmail
und mymuttsendmail
geben 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 +x
diese 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 msg
und 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 msmtp
so 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 username
im 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