mutt의 전송 지연 제거
나는 원래 mutt의 내장 SMTP MTA를 사용했습니다. 그러나 보내기를 누른 후 상당한 일시 중지가 있습니다. set sendmail_wait=-1
에서 외부 MTA를 사용하여 비활성화할 수 있습니다 muttrc
.
그러나 MTA로 사용하면 msmtp
오류 알림이 없습니다( 에 지정된 대로 msmtp
기록 하지만 ).logfile
~/.msmtprc
알림을 받으려고 시도
명령줄에서 msmtp
실패 시 명령을 실행할 수 있습니다.
</tmp/tosend msmtp -a default [email protected] --read-envelope-from || echo failed
아마도 내 로컬 *nix 메일로 실패 알림을 보낼 수 있을 것입니다. 그러나 .NET에서 다음을 설정하면 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