Mutt

我可以在 Mutt 的後台發送電子郵件,同時仍然收到錯誤通知嗎?

  • June 9, 2017

消除 mutt 的發送延遲

我最初使用 mutt 的內置 SMTP MTA。但是,點擊發送後會有相當長的暫停。這可以通過使用帶有set sendmail_wait=-1in的外部 MTA 來禁用muttrc

但是,如果我msmtp用作 MTA,則不會有錯誤通知(儘管確實按照 中指定的msmtp方式寫入)。logfile``~/.msmtprc

嘗試獲取通知

從命令行,我可以在msmtp失敗時觸發命令。

</tmp/tosend msmtp -a default foo@bar.com --read-envelope-from || echo failed

可以想像,我可以將失敗通知郵寄到我本地的 *nix 郵件中。但是,如果我在muttrc.

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

這會導致所有電子郵件無法靜默發送,並在msmtp‘s中出現以下錯誤logfile

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

顯然,mutt正在將命令的額外部分解析為收件人。

問題

有沒有辦法在後台發送時獲取發送失敗的電子郵件通知?我msmtp不一定要綁定。

為自己編寫一個小 shell 腳本,用作“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 "$@",郵件將在標準輸入上,我們立即將其複製到一個臨時文件中,然後提供給msmtp. 任何錯誤消息都會在變數中擷取,msg如果返回程式碼失敗,您可以執行一個彈出對話框,例如 zenity。

引用自:https://unix.stackexchange.com/questions/240885