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 사서함으로 보낼 수 있을 것입니다. 하지만 내가 그렇다면 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 [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 에 전달한다는 점을 기억하세요 msmtp
. 모든 오류 메시지는 변수에 캡처되며 msg
zenity와 같은 반환 코드가 실패하면 팝업 대화 상자를 실행할 수 있습니다.
답변2
msmtp
가능한 한 최소한으로 더 나은 nullmailer 사용을 고려해 보셨나요 ? 아니면 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