モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

Gmailで予想外のメールループ

Gmailからの転送でメールループのエラーで転送できない、という問い合わせがあって、MTAだけで完結しないメールループというのを初めて経験したのでメモ。


Gmailのアカウントから自メールアドレスへ転送設定をすると、転送先サーバからメールループのエラーメールが返って来るという状況でした。
確かに、Gmailから転送しようとされてきたメールに対しては「mail forwarding loop」でbounceしているというログが残っていました。
しかし、設定やログ見てもGmailには転送している記録はないため、メールループにはならないはず、と思えました。


postfixはどうやってループを検出しているんだろう?と思ってぐぐったところ「Deliverd-To」フィールドの内容と送付先が同じ場合にループ判定しているということがわかりました。

[postfix-jp: 783] mail forwarding loop

local(8)デーモンは、配送先のアドレスがすでにDelivered-To:にあるメッセージを"mail forwarding loop"としてbounceします。


ということは、どこかで「Deliverd-To」フィールドを追加してしまっている?と思って、エラーメールの内容を良く確認したところ、確かにDeliverd-Toフィールドに転送先のアドレスが書かれていました。

これがなぜついてるかはすぐにわかりました。Deliverd-Toのすぐ上に「X-Gmail-Fetch-Info」フィールドが付いていたので。

Gmailでは、他のメールサーバからPOP等でメールを取ってくるという設定が出来るのですが、これで取得したメールについては「X-Gmail-Fetch-Info」と「Deliverd-To」フィールドが追加されるようです。


つまり、あるメールサーバからGmailでPOPで取得している上に、そこ宛に転送もしようとしているので、だからループになるからエラーになった、というわけです。
これだと、MTAだけでループは完結せず、途中にPOP3サーバなどのMRAが介在してループが完成します。
なので、メールサーバのログを眺めただけでは、なぜループが発生していると言われるのかわからない、という状況になります。