送信メールがsmtp外部サーバーに到達できない場合(ローカルインターネット接続の問題のため)、返信メールを受信しようとしています。
私は次のように電子メールを送信します:mutt(compose) - procmail - esmtp(sendmailの代わりに) - GMail smtpサーバー
接続が失われてGmail smtpにアクセスできない場合は、電子メールローカルシステムから返送された電子メールに関する通知を受け取る必要があります。
procmailはこの動作を得るための正しい「チェーン接続」設定ですか?バウンスを設定する方法は?
編集する:
.muttrc
:
set sendmail="/usr/bin/formail -s /usr/bin/procmail -t -m /home/$myuser/.procmailoutrc"
.procmailoutrc
:
MAILCONF=$HOME/.mail
LOGFILE=$MAILCONF/procmailout.log
LOGSENDMAIL=$MAILCONF/esmtp.log
[...]
:0
* ^From.*address@gmail
{
:0c:
address@gmail
:0
| formail -I 'From ' | sendmail -v -t -X "$LOGSENDMAIL"
}
esmtprc
:
identity address@gmail
hostname smtp.gmail.com:587
username "address@gmail"
password "*"
starttls required
helo "*"
mda='/usr/bin/formail -a "Date: `date -R`" | /usr/bin/procmail -d %T'`
次のエラーが見つかったので:
"SMTP server problem Temporary failure in name resolution"
$LOGFILE
inの代わりにinを書くと、$LOGSENDMAIL
procmailがこの返されたエラーを管理し、私のメールボックスに「配信に失敗しました」というメッセージを送信できると思いました。
私の設定でわかるように、mbox名は実際のEメールアドレスと同じです。
答え1
標準出力はログファイルにリダイレクトされますsendmail
が、標準エラーはリダイレクトされないため、Procmailログファイルに残ります。
私はこれがsendmail
適切な終了コードを設定し、必要に応じて失敗したときにローカルバウンスメッセージを生成できると想像しています。
これは別のスクリプトを生成するのに十分複雑です。できるおそらく何とかあなたのインラインです.procmailout
。
#!/bin/sh
t=$(mktemp -t sendout.XXXXXXXXXXXX) || exit
trap 'rm -f "$t"' EXIT
trap 'exit 123' HUP INT TERM
formail -I "From " >"$t"
sendmail -v -t -X "$@" <"$t" && exit
# If we reached here, it's a failure
rc=$?
( printf "To: $USER\nFrom: MAILER_DAEMON\nSubject: Bounce\n\n"
printf "The following message failed to send. So sorry.\n\n"
cat "$t" ) | sendmail -oi -t
exit $rc
sendout
このスクリプトを場所の1つに送信しPATH
(Procmailにもあることを確認してPATH
)、次のように呼び出すことができます。
:0
| sendout "$LOGSENDMAIL"
メッセージがすぐに配信できない状況では、Stock Sendmailの一般的なパターンはメッセージをキューに入れ、数時間後に一時的な失敗を報告してから1週間経過するまで再試行し、まだ配信できない場合はメッセージを配信できません。として返すことです。私はそれに慣れていませんが、esmtp
Sendmailの基本的な動作(したがって、いくつかの設定ではPostfix、Eximなど)が好きなようになることができるようです。したがって、おそらくそれらの1つに切り替えます(そうでesmtp
ない場合)。動作などを構成し、独自のソリューションを作成しないでください。