日本の携帯電話、例えばNTT docomo(ドコモ)にメールを送ってバウンスしてくる場合、 その多くが宛先不明かドメイン指定拒否によるものです。 宛先不明もドメイン指定拒否も、どちらのバウンスメールも内容は Unknown User と書かれていて、一見しただけでは判別しにくいのですが、よく観察すると僅かな違いがあります。
戻ってきたバウンスメールが、どのMTA(メールサーバ)で作られたものであるかは 文面や構造をよく見ないと判別できませんので、より詳細な解析結果が必要な場合は Sisimaiによる解析をお試しください。
Sisimaiは携帯電話宛バウンスメールの宛先不明を userunknownと、 ドメイン指定拒否をfiltered として自動で区別して検出しますが、ここでは目視による簡単な判別方法を紹介します。
初出: bouncehammer.jp/.../distinguish-between-the-unknown-and-the-filtered
送信するメールサーバがSendmailの場合、宛先不明(userunknown)と ドメイン指定拒否(filtered)を見分ける方法は非常に容易で、 バウンスメールの本文内Status:の値を見ます。 後述のメールサーバと比べて最も目視で判別がしやすい構造、文面となっています。
Final-Recipient: RFC822; *********@docomo.ne.jp Action: failed Status: 5.1.1 ←ここを見る Remote-MTA: DNS; mfsmax.docomo.ne.jp Diagnostic-Code: SMTP; 550 Unknown user *********@docomo.ne.jp Last-Attempt-Date: Fri, 2 Apr 2010 01:23:45 +0900
Final-Recipient: RFC822; *********@docomo.ne.jp Action: failed Status: 5.2.0 ←ここを見る Remote-MTA: DNS; mfsmax.docomo.ne.jp Diagnostic-Code: SMTP; 550 Unknown user *********@docomo.ne.jp Last-Attempt-Date: Fri, 2 Apr 2010 01:24:09 +0900
Status:の値が5.1.1 なら宛先不明(userunknown)です。 一方Status:の値が5.2.0 ならドメイン指定拒否(filtered)です。まとめると次のようになります。
送信するメールサーバがPostfixの場合は、どのエラーであっても前述の Status:の値は概ね5.0.0 となっていて判別ができません。そこでバウンスメールの本文に書かれている、 エラーの発生したSMTPコマンドを読み取って判断します。 Sendmailと比べると多少英語で書かれたエラーメッセージの単語を追いかける必要があります。
The mail system <*******@docomo.ne.jp>: host mfsmax.docomo.ne.jp[203.138.180.112] said: 550 Unknown user *****@docomo.ne.jp (in reply to RCPT TO command)
The mail system <*******@docomo.ne.jp>: host mfsmax.docomo.ne.jp[203.138.180.112] said: 550 Unknown user *****@docomo.ne.jp (in reply to end of DATA command)
Status:の値を見る事に比べて一見しただけでは分かりにくいのですが、 in reply to RCPT TO Commandと書いていれば 宛先不明(userunknown)で、 in reply to end of DATA Command と書いていればドメイン指定拒否(filtered) という事になります。纏めると次のようになります。
送信するメールサーバがqmailの場合は更に判別が難しく、 バウンスメール本文の文章における表現の違いを読み取ります。 ここまで来ると最早簡易な判別ではないかもしれませんが、 qmailもそこそこユーザのいるMTAなので同じように紹介します。
<*****@docomo.ne.jp>: 203.138.180.240 does not like recipient. ←ここを見る Remote host said: 550 Unknown user ******@docomo.ne.jp Giving up on 203.138.180.240.
<*****@docomo.ne.jp>: 203.138.180.112 failed after I sent the message. ←ここを見る Remote host said: 550 Unknown user *****@docomo.ne.jp
qmailはエラーメッセージの文面で判別します。 上記のようにdoes not like recipient と書いていれば宛先不明(userunknown)であり、 failed after I sent the messageと書いていれば ドメイン指定拒否(filtered)となります。 纏めると次のようになります。
非常に見分けにくいのですが、無理やり解釈するならば、 does not like recipientは正しい受信者ではない=SMTPの RCPT TOコマンドでエラーが発生した、 failed after I sent the message はメッセージ送信後に失敗した=メッセージの送信はSMTPのDATAコマンドを使う=SMTPのDATAコマンドでエラーが発生した、ということでしょう。
送信するメールサーバがEximの場合は、 Postfixと同じくバウンスメールの文面からエラーの発生したコマンドを読み取るだけです。
*******@docomo.ne.jp SMTP error from remote mail server after RCPT TO:<*****@docomo.ne.jp>:←この行を見る host mfsmax.docomo.ne.jp [203.138.180.112]: 550 Unknown user *****@docomo.ne.jp
*******@docomo.ne.jp SMTP error from remote mail server after end of data:<*****@docomo.ne.jp>:←この行を見る host mfsmax.docomo.ne.jp [203.138.180.112]: 550 Unknown user *****@docomo.ne.jp
Eximのバウンスメールは、エラーが発生したSMTPコマンドが書かれているので qmailと比較すると判別がしやすいでしょう。纏めると次のようになります。
送信するメールサーバがCourier-MTAの場合は、 PostfixやEximと同じくバウンスメールの文面からエラーの発生したコマンドを読み取るだけです。
UNDELIVERABLE MAIL Your message to the following recipients cannot be delivered: <********@docomo.ne.jp>: mfsmax.docomo.ne.jp [203.138.180.240]: >>> RCPT TO:<******@docomo.ne.jp> ←この行を見る <<< 550 Unknown user ****@docomo.ne.jp
UNDELIVERABLE MAIL Your message to the following recipients cannot be delivered: <********@docomo.ne.jp>: mfsmax.docomo.ne.jp [203.138.181.112]: >>> DATA ←この行を見る <<< 550 Unknown user ****@docomo.ne.jp
Courier-MTAのバウンスメールは、PostfixやEximと同様にエラーが発生したSMTPコマンドが 書かれているのでqmailと比較すると判別がしやすいでしょう。纏めると次のようになります。
この文書では一例として、日本の携帯電話宛、特にドコモ宛で発生したバウンスメールの、 宛先不明(userunknown)とドメイン指定拒否(filtered) を見分ける方法を紹介しました。
Sisimaiは、自動でこの区別を行うだけでなく、メールボックスがいっぱい、 メールが大きすぎるなど 他のエラー理由(合計34種類)も検出し、 また携帯電話だけでなくGmailやYahoo!などのメールサービスのエラー解析にも対応しています。