mutt의 전송 지연 제거

mutt의 전송 지연 제거

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"

이로 인해 모든 이메일이 자동으로 전송되지 않고 msmtps에 다음 오류가 발생합니다 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. 모든 오류 메시지는 변수에 캡처되며 msgzenity와 같은 반환 코드가 실패하면 팝업 대화 상자를 실행할 수 있습니다.

답변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 

관련 정보