Mutt
我可以在 Mutt 的後台發送電子郵件,同時仍然收到錯誤通知嗎?
消除 mutt 的發送延遲
我最初使用 mutt 的內置 SMTP MTA。但是,點擊發送後會有相當長的暫停。這可以通過使用帶有
set sendmail_wait=-1
in的外部 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。