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スポット解析・解析済みデータ提供

bounceHammerが作るデータ構造

 

YAML/JSONで作るデータ構造

bounceHammerは解析したバウンスメールを構造化したデータとして出力します。 このフォーマットは主にYAML/JSONを使用しています。

構造化したデータとして出力する事によって、他のプログラムで照合する等再利用がしやすくなります。

bounceHammerはバウンスメールに含まれるエラー内容から、重要なものを取り出し、 それらを組み合わせたり分離する事によって新たな項目を作成し、構造化したデータを作ります。

データ構造の一例

下記はbounceHammerが出力する構造化された解析済みデータの一例です。 1行1件の配列で、それぞれの配列の中身は 'Key Name': 'Value' のハッシュ形式です。 YAML/JSONパーサで読出せます。

YAMLについては、 The Official YAML Web Siteまたは YAML - Wikipediaで、 JSONについてはIntroducing JSON または JavaScript Object Notation - Wikipedia で、それぞれ情報が得られます。

- { "bounced": 1221851954, "addresser": "bouncehammer@cubicroot.jp", "recipient": "this-user-does-not-exist-for-example@gmail.com", "senderdomain": "cubicroot.jp", "destination": "gmail.com", "reason": "userunknown", "hostgroup": "webmail", "provider": "google", "frequency": 1, "description": { "deliverystatus": "5.1.1", "diagnosticcode": "SMTP; 550-5.1.1 The email account that you tried to reach does not exist. Please", "listid": "", "messageid": "<4C02AA08-8F33-4607-BDF6-8C7AC9EF289C@cubicroot.jp>", "smtpagent": "Sendmail", "subject": "テスト(日本語)", "timezoneoffset": "+0900" }, "token": "79e4cde6c1ddede1dafa1e7ccb48e5b4" }
- { "bounced": 1221964150, "addresser": "bouncehammer@cubicroot.jp", "recipient": "non-existent-user-address-this-is@google.mil", "senderdomain": "cubicroot.jp", "destination": "google.mil", "reason": "hostunknown", "hostgroup": "pc", "provider": "various", "frequency": 1, "description": { "deliverystatus": "5.1.2", "diagnosticcode": "SMTP; 550 Host unknown", "listid": "", "messageid": "", "smtpagent": "Sendmail", "subject": "TEST", "timezoneoffset": "+0900" }, "token": "08d15b6a47ffc71594e062f4d855f5f2" }

上記の例(1行目)は、From:sender01@example.jp から To:user01@example.orgへ送ったメールが、 2009年2月13日の15:31:30(UNIX時間1234567890)に、 エラー理由がuserunknown(宛先不明)で差し戻された、 という事を意味しています。

データ構造の各項目

bounced - 差戻日時

bouncedは、メールがエラーとなって戻ってきた日時(差戻日時)を UNIX時間で記録しています。32ビットの数値なので黙視では日時が把握しにくいので、 別のプログラム等で読出して見やすい形式に変換するとよいでしょう。

addresser - 発信者アドレス

addressserは、電子メールの発信者(From)アドレスです。 全ての文字はアルファベットの小文字で記録されています。 元の電子メールに書いているアドレスが大文字で表記されていても、 bounceHammerは小文字に変換します。

recipient - 受信者アドレス

recipientは、電子メールの受信者(To)アドレスです。 addresserと同様に全ての文字はアルファベットの 小文字で記録されています。 元の電子メールに書いているアドレスが大文字で表記されていても、 bounceHammerは小文字に変換します。

senderdomain - 発信者ドメイン

senderdomainは、電子メールの発信者(From)アドレスのドメイン部分(@の右側)です。 addresser, recipientと同様に全ての文字はアルファベットの小文字で記録されています。 元の電子メールに書いているアドレスが大文字で表記されていても、 bounceHammerは小文字に変換します。この項目は発信者を分類するために使用されます。

destination - 受信者ドメイン

destinationは、電子メールの受信者(To)アドレスのドメイン部分(@の右側)です。 addresser, recipient, senderdomainと同様に全ての文字はアルファベットの小文字 で記録されています。 元の電子メールに書いているアドレスが大文字で表記されていても、 bounceHammerは小文字に変換します。この項目は受信者を分類するために使用されます。

reason - 差戻理由

reasonは、なぜエラーで電子メールが返ってきたかを分類した理由です。 bounceHammerが分類するエラー理由の一覧は 差戻理由(Reason) をご覧ください。

hostgroup - 宛先分類

hostgroupは、受信者(To,宛先)ドメインをある程度おおまかな グループ分けをしたものです。bounceHammer宛先分類(Host Group) に列挙するものに分類します。

provider - 宛先所属

providerは、受信者(To,宛先)ドメインを宛先分類(hostgroup)より 細かく分類したものです。bounceHammer宛先所属/小分類(Provider) に列挙するものに分類します。 この項目は、世界的にある程度の規模をもつ電子メールプロバイダを特定するために使用されます。

frequency - 差戻回数

frequencyは、同じ発信者アドレス(addresser)と受信者アドレス(recipient)の 組み合わせを基準として、その組み合わせでの差戻回数(エラーで戻ってきた回数)を記録します。 mailboxparser コマンドが出力するデータは、frequencyは必ず1ですが、データベースに記録する時に、 既に同じ発信者と受信者の組み合わせのデータが存在した場合は、データベース上のfrequencyが増加します。

description - その他の記述

descriptionは、バウンスメール(エラーで戻ってきたメール)に記述されているもののうち、 エラー理由の決定等に使用したデータの保存をしています。他の項目の補助的な位置づけで、 それほど役に立つデータではありません。

decription/deliverystatus - D.S.N.

description/deliverystatusは、バウンスメールのStatus: ヘッダの値(D.S.N.)を記録しています。 Status:ヘッダの存在しないバウンスメールであった場合は、bounceHammerが 内部で使用するコードを記録します。

decription/diagnosticcode - 診断メッセージ

description/diagnosticcodeは、バウンスメールのDiagnostic-Code: ヘッダの値(診断メッセージ)を記録しています。 Diagnostic-Code:ヘッダの存在しないバウンスメールであった場合は、 bounceHammerがバウンス理由の特定のために収集した本文・ヘッダ内の 必要なメッセージを記録します。

decription/listid - メーリングリスト名

この項目はbounceHammer 2.7.10から登場しました。
description/listidは、バウンスメールに含まれるList-IDヘッダを記録します。 メーリングリストの宛先のどれかでバウンスが発生した場合、どのメーリングリストであるかが 特定しやすくなります。

decription/smtpagent - MTAソフトウェア名

この項目はbounceHammer 2.6.1から登場しました。
description/smtpagentは、バウンスメールを生成した メールサーバソフトウェアの名前(Sendmail, Postfix, qmail, Exim , CourierMTAなど) を記録しています。bounceHammerが正式に対応していないMTAが作った バウンスメールの場合はUnknown と記録されます。

decription/timezoneoffset - 時差

description/timezoneoffsetは、バウンスした時刻を取得したヘッダ (Arrival-Dateなど)に書かれているタイムゾーンの時差を+0900の形式で記録しています。 タイムゾーンが特定できない場合は、+0000と記録します。

description/messageid - 元メールのMessage-Id

この項目はbounceHammer 2.7.11から登場しました。
description/messageidは、バウンスした元メールのMessage-Id ヘッダの値を記録します。バウンスメールによっては、元メールのヘッダが削除されているケースが ありますので、Message-Idヘッダがない場合は空白になります。

description/subject - 元メールの件名

この項目はbounceHammer 2.7.11から登場しました。
description/subjectは、バウンスした元メールのSubject ヘッダの値を記録します。バウンスメールによっては、元メールのヘッダが削除されているケースが ありますので、Subjectヘッダがない場合は空白になります。 Subjectヘッダに日本語等非ASCII文字が含まれている場合は、UTF-8 で再エンコードされた値が記録されます。

token - メッセージトークン

tokenは、バウンスの記録を一意に特定するための、 いわば記録のIDに相当するものです。tokenの文字列は、 発信者アドレス(addresser)と受信者アドレス(recipient)の組み合わせから 生成されるMD5のハッシュ値で、APIや検索で使用されます。

コマンドラインツール messagetokenや、 管理画面(WebUI)でも生成できます。 メッセージトークンの使いどころは、API使用時にクエリー文字列の中にメールアドレスを 載せたくない場合に有効です。