mutt の送信遅延の削除

mutt の送信遅延の削除

mutt の送信遅延の削除

当初は mutt の組み込み SMTP MTA を使用していました。しかし、送信ボタンを押した後にかなりの一時停止が発生します。これは、set sendmail_wait=-1内の外部 MTA を使用することで無効にできますmuttrc

msmtpただし、 をMTA として使用すると、エラーは通知されません (で指定されたとおりmsmtpに書き込みは行われます)。logfile~/.msmtprc

通知を取得しようとする

コマンドラインから、msmtp失敗したときにコマンドをトリガーできます。

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

おそらく、失敗通知をローカルの *nix メールにメールで送信できるでしょう。ただし、 で以下を設定した場合、これは mutt では機能しないようですmuttrc

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

msmtpこれにより、 の次のエラーが表示され、すべての電子メールがサイレントに送信されなくなります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

明らかに、muttコマンドの追加部分を受信者として解析しています。

質問

バックグラウンドで送信中に、送信に失敗したメールの通知を受け取る方法はありますか?msmtp必ずしもそうする必要はありません。

答え1

「sendmail」の値として使うための小さなシェルスクリプトを自分で書いてください。例えば、次 ~/.muttrcのように設定します。

set sendmail = /home/yourid/bin/mymuttsendmail

そして、mymuttsendmail次のようなものを入力します

#!/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

そしてchmod +xこのファイル。このスクリプトは受信者を追加引数として呼び出され、 で msmtp に渡され"$@"、メールは stdin にあり、それをすぐに一時ファイルにコピーして に渡すことに注意してくださいmsmtp。エラー メッセージはすべて変数にキャプチャされmsg、戻りコードが失敗の場合、たとえば zenity のようなポップアップ ダイアログを実行できます。

答え2

より優れた、最低限の機能を備えた nullmailer の使用を検討しましたかmsmtp? あるいは、exim や postfix のような完全な MTA (設定はそれほど難しくありません) の使用も検討しましたか?

他のnullmailerオプションのリストは以下にあります。http://linuxmafia.com/faq/Mail/nullmailers.html

答え3

meuh さんの回答はとても役に立ちました。mymuttsendmail のよりシンプルなバージョンを次に示します。username次のコードで をユーザー名に置き換えて、エラーが発生した場合にローカルでメールを送信できるようにします。変数 $? には msmtp の終了コードが格納され、メールの送信中にエラーが発生した場合はローカル メールを使用してメールを送信します。sendmail_wait=-1 を設定することを忘れないでください。

#!/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 

関連情報