メール:オープンソースのバウンスメール解析システム BounceHammer|gihyo.jp … 技術評論社
BounceHammerの特徴
バウンスメールは確実に処理すべき
前節ではバウンスメールを放置したことによるデメリットを述べました。筆者は配信するメール量の多少にかかわらずバウンス処理は確実に行うべきであると考えています。バウンス処理をすることによって,前述のデメリットはかなり解決(注4)できます。
注4)
遅延や受信ブロックは他にも要因があります。
BounceHammerとは?
BounceHammerはオープンソースのバウンスメール解析システムです。バウンスメールを解析し,発信者アドレス/宛先アドレス/エラー理由/宛先分類/バウンス時刻などを構造化されたデータとしてYAML形式で書き出し,データベースに蓄積します。
ネットワークへの追加が容易
バウンスメール処理専用システムなので,ネットワークへの追加はBounceHammerをインストールしたホストを設置してバウンスメールを渡すだけです。
オープンソースのMTAに対応
BounceHammerはSendmail,Postfix,qmail,Exim,Courier-MTAの生成するバウンスメールに対応しています。これらのMTAは非常に多く使われているので,よほど特殊なMTAでない限り解析可能といえるでしょう。
エラー理由が正確にわかる
BounceHammerは,一般的なバウンスメールに加えて,日本の携帯電話主要キャリアのバウンスメールに対応(注5)しています。BounceHammerでは,バウンスメールが返ってこない場合はエラーの理由を知ることはできませんが,携帯電話宛の宛先不明とドメイン指定拒否を区別して検出できます。表1では,検出できる10種類以上のエラーのうち,実際の運用で重要なものを挙げています。
表1 おもなエラー理由
エラー理由(システム内での表記) エラーの説明
不明なホスト(hostunknown) @の右側が存在しないドメイン
宛先不明(userunknown) @の左側が存在しないユーザ
ドメイン指定拒否(filtered) メールアドレスは存在するが受信拒否されている
メールボックスいっぱい(mailboxfull) 宛先アドレスのメールボックスがいっぱい
メールが大きすぎる(mesgtoobig) 送信したメールのサイズがメールサーバの許容値を超えた
何らかのバウンスメールが返ってきたら,そのメールアドレスを配信不能なアドレスとして扱うという単純なバウンス処理を行った場合,“メールボックスがいっぱい”や“メールが大きすぎる”のようなエラーで宛先アドレスに配信不能フラグを立ててしまうという誤った対処をしてしまう危険性があります。
エラーになった理由ごとに適切な対処をすれば,メールアドレスの状態変化を管理しつつ,宛先不明アドレスの割合増加による遅延を回避ができます。検出できるエラーについての詳細は,http://bouncehammer.jp/features/engine/reasonをご覧ください。
注5)
スマートフォンや著名なWebメールにも対応しています。
読みにくいバウンスメールを構造化する
BounceHammerは解析したバウンスメールの内容をYAML形式で出力します。YAML形式の解析結果は1行1レコードで書き出しているので,コマンドラインからcatで眺めたり,wcで行数計測することによって手軽に解析済みデータの確認が可能です。広く使われているYAML形式でデータを書き出すので,他のアプリケーションからも容易にバウンスした記録の参照ができます。
Webブラウザベースの管理画面
BounceHammerは基本的にコマンドライン上ですべての操作を行います。しかし,人間の目で内容を確認するには,やや見にくい点もありますし,バウンスの状況を確認するのはサーバにログインしてコマンドラインで操作する人ばかりではありません。
そこで図2のようなWebブラウザベースの管理画面(注6)を使えば,サーバにログインしない,あるいはコマンドラインに精通していない人でもバウンスメールの管理ができます。
図2 BounceHammerの管理画面
図2 BounceHammerの管理画面
注6)
システム上ではWebUIと称しています。
HTTPベースのAPI
BounceHammerはHTTPベースの簡易なAPIを持っていて,発信者アドレス(From)や宛先アドレス(To),宛先ドメインやエラー理由などを文字列としてURLに入れてアクセスし,その結果をJSON(注7)形式で受け取れます。図3はcurlコマンドでAPIにアクセスしたときの実行結果です。APIを利用すると,Webサイトにバウンス記録の参照機能を短い開発期間で実装できます。
図3 HTTP-APIでJSON形式のデータを得る

