bounceHammer has been EOL'ed on February 29, 2016

製品ライフサイクルの終了

2010年3月にオープンソースソフトウェアとして公開して以来、多くのユーザ様・企業様にダウンロードし、 ご利用いただきましたbounceHammerは、2016年2月29日(月)を持ちまして製品ライフサイクルの終了(EOL: End Of Life) となりました。長きにわたりbounceHammerをご使用いただき誠に有り難う御座いました。 開発元では後継となるバウンスメール解析ライブラリとして、より高精度で高速なSisimai(シシマイ) を二条項BSDライセンスで公開しています。

Sisimai
商用サポート

  • 1一式導入・設定・保守・開発の補助
  • 2独自MTA用解析モジュールの開発
  • 3個別案件の対応とメールサポート
  • 4バウンス管理・運用コンサルティング
  • 5スポット解析・解析済みデータ提供

携帯電話宛バウンスの見分け

2010/11/27

バウンスした理由毎の処理

日本の携帯電話、例えばNTT DoCoMo(ドコモ)にメールを送ってバウンスしてくる場合、 その多くが宛先不明かドメイン指定拒否によるものです。 宛先不明もドメイン指定拒否も、どちらのバウンスメールも内容はUnknown User と書かれていて、一見しただけでは判別しにくいのですが、よく観察すると僅かな違いがあります。

bounceHammerは携帯電話宛バウンスの宛先不明とドメイン指定拒否を自動で区別して検出しますが、 ここでは目視による簡単な判別方法を紹介します。

具体的な見分け方

Sendmail/Postfix/qmail/Exim/Courier MTAでの例

Sendmailの場合/Status:の値を見る

送信するメールサーバが Sendmail の場合、宛先不明とドメイン指定拒否を見分ける方法は非常に容易で、 バウンスメールの本文内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)です。 まとめると次のようになります。

  • Status: 5.1.1 = 宛先不明(SMTPのRCPT TO:コマンドでエラーが出た)
  • Status: 5.2.0 = ドメイン指定拒否(SMTPのDATAコマンド以降でエラーが出た)

Postfixの場合/エラーが発生したコマンドを読み取る

送信するメールサーバがPostfix の場合は、どのエラーであっても前述のStatusの値は概ね5.0.0となっていて判別ができません。 そこでバウンスメールの本文に書かれているエラーの発生したSMTPコマンドを読み取って判断します。

宛先不明の場合

        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と書いていれば宛先不明、 in reply to end of DATA Commandと書いていれば ドメイン指定拒否という事になります。纏めると次のようになります。

  • in reply to RCPT TO Command = 宛先不明(SMTPのRCPT TO:コマンドでエラーが出た)
  • in reply to end of DATA Command =ドメイン指定拒否(SMTPのDATAコマンド以降でエラーが出た)

qmailの場合/本文の文面を比較する

送信するメールサーバが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 と書いていれば宛先不明であり、failed after I sent the message と書いていればドメイン指定拒否となります。纏めると次のようになります。

  • does not like recipient = 宛先不明(SMTPのRCPT TO:コマンドでエラーが出た)
  • failed after I sent the message =ドメイン指定拒否(SMTPのDATAコマンド以降でエラーが出た)

非常に見分けにくいのですが、無理やり解釈するならば、does not like recipient は正しい受信者ではない=SMTPのRCPT TOコマンドでエラーが発生した、 failed after I sent the messageはメッセージ送信後に失敗した=メッセージの送信は SMTPのDATAコマンドを使う=SMTPのDATAコマンドでエラーが発生した、と言うことでしょう。

Eximの場合/エラーが発生したコマンドを読み取る

送信するメールサーバが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と比較すると判別がしやすいでしょう。纏めると次のようになります。

  • after RCPT TO = 宛先不明(SMTPのRCPT TO:コマンドでエラーが出た)
  • after end of data =ドメイン指定拒否(SMTPのDATAコマンド以降でエラーが出た)

Courier-MTAの場合/エラーが発生したコマンドを読み取る

送信するメールサーバが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と比較すると判別がしやすいでしょう。纏めると次のようになります。

  • >>> RCPT TO = 宛先不明(SMTPのRCPT TO:コマンドでエラーが出た)
  • >>> DATA =ドメイン指定拒否(SMTPのDATAコマンド以降でエラーが出た)

自動化するには

 

この記事では一例として、日本の携帯電話宛、特にドコモ宛で発生したバウンスメールの、 宛先不明とドメイン指定拒否を見分ける方法を紹介しました。 bounceHammerは、自動でこの区別を行うだけで なく、メールボックスがいっぱい、メールが大きすぎるなど 他のエラー理由 も検出し、また 携帯電話だけでなく WebMailやPCにも対応しています。