オープンソースのバウンスメール解析システム BounceHammer

この記事を読むのに必要な時間:およそ 6.5 分

WebUI用CGIの設定

WebUIを使う場合は,図10のようにCGIスクリプトを実行可能なディレクトリに設置してください。設置するファイルは2つなので,ApacheのScriptAliasで指定されるディレクトリにコピーすると簡単でしょう。

図10 CGIスクリプトの設置例

↓ScriptAliasで指定するディレクトリに短い名前で設置
root@172.16.0.49 # cd /usr/local/bouncehammer/share/script
root@172.16.0.49 # cp ./bouncehammer.cgi /usr/local/apache/cgi-bin/b.cgi
root@172.16.0.49 # cp ./api.cgi /usr/local/apache/cgi-bin/a.cgi
root@172.16.0.49 # chmod a+x /usr/local/apache/cgi-bin/{a,b}.cgi

管理するドメインの登録

BounceHammerは,データベースに登録された発信者ドメインに一致するバウンス記録だけを,データベースに蓄積するしくみになっています。図11のように管理したい発信者(From)ドメインをデータベースに登録します。ここでは,BounceHammerをインストールしたディレクトリのbin/に入っているtablectlコマンドを使用し,自社ドメインexample.jpを例として登録しています。

図11 tablectlで発信者ドメインを登録する

user@172.16.0.49< cd /usr/local/bouncehammer
user@172.16.0.49< ./bin/tablectl --table s --insert --name 'example.jp'

バウンスメールを転送

図4では,ホストsmtp.example.jpがバウンスメールを受け取っています。解析を行うために,リスト2のようなaliasesファイルを使って,バウンスメールをBounceHammerをインストールしたホストbh.example.jpに転送しています。

リスト2 ホストsmtp.example.jpの/etc/aliases(sendmail,postfix共通)

MAILER-DAEMON: postmaster
postmaster: root, bounce@bh.example.jp

BounceHammerはバウンスメールさえあれば解析できるので,SMTPで転送する以外にfetchmailやscpでメールボックスサーバから取得しても良いでしょう。

BounceHammerを使う

コマンドラインツール

BounceHammerは7つのコマンドラインツールですべての操作ができます。各コマンドラインツールの名前と役割は表2のとおりです。それぞれのコマンドは多くのオプション注10を持ち,コマンドラインの引数と標準入力のどちらからでもデータを受け付けます。一般的な使用方法は,メールの配信量や処理するバウンスの量に合わせて,/etc/crontab注11で定期的に処理を行うと良いでしょう。各コマンドによる処理の流れはhttp://bouncehammer.jp/features/flowをご覧ください。

表2 各コマンドの名称と役割

コマンド名コマンドの役割
mailboxparserバウンスメールを解析してYAML形式で出力する
logger解析済みのYAMLファイルをバウンス発生日別にファイルに記録する
databasectl解析済みのYAMLファイルを読込んでデータベースに記録する
datadumperデータベースに登録されているバウンス記録を出力する
summarizerデータベースに登録されているバウンス記録を集計して出力する
tablectlデータベースのマスタデータを編集する(発信者ドメインの登録など)
messagetokenメッセージトークン(バウンス記録を識別する文字列)を生成する
注10)
各コマンドの詳細はhttp://bouncehammer.jp/features/commandをご覧ください。
注11)
インストール先ディレクトリのetc/にあるcrontab-exampleを参考にしてください。

他のシステムと協調する

BounceHammerはバウンスメール解析専用のシステムですので,Sendmail,Postfix,qmailなどのMTAでメール配信を行っていて,かつバウンス処理を行っていない場合,比較的短期間でバウンス処理のシステムを組み込めます。

システム自体はPerlで作られていますが,解析済みデータにアクセスする手段は,直接データベースに接続してSQLで行う,解析済みのYAMLファイルを読込む,API経由で参照注12するなどいくつかの方法がありますので,WebサイトがPerl以外の言語で作られていても連動させることができます図12)⁠

図12 配信からエラー発生以降の具体的な処理の流れ

図12 配信からエラー発生以降の具体的な処理の流れ

また,解析済みデータから宛先メールアドレスだけを取り出してMTAのaccessデータベース用に加工したり,CSVで出力して表計算ソフトで集計/分析をするという使い方もあります。

注12)
ソースアーカイブ内example/ディレクトリにはPerl,Python,Ruby,PHPでのAPIにアクセスする簡易なサンプルスクリプトを同梱しています。

悪循環から好循環へ

BounceHammerでバウンスメールの処理注13を日常的に行うと,本項前半で述べた悪循環から,次のような好循環に転じることが可能です。

  • ① メール配信後に毎回バウンス処理をする
  • ② 日々のバウンス記録を蓄積する
  • ③ 配信時に前回配信できなかったアドレスは配信対象から除外
  • ④ ①に戻る

配信後に毎回確実にバウンス処理をし,次回の配信に反映させることによって,次第にバウンスの発生が抑制され,配信に要する時間も必要最低限で済むようになり,宛先不明アドレスの発生は,前回信してから次回に配信するまでの間に増えたユーザ数に応じた一定範囲の割合に落ち着きます。

注13)
もしもサーバに過去のバウンスメールが残っていれば,次回の配信までにそれを解析し,その解析結果を次回配信対象の取捨選択に使用することもできます。

BounceHammerの今後

BounceHammerはまだ登場して間も無いシステムですが,数十万~百万のメールマガジンや通信販売サイト,大規模な無料のWebサービスなどで導入頂いています。今後の課題として,対応できるバウンスメールの種類を増やすための解析精度の向上と,大量のバウンスメールを高速に解析するためのシステムの更なる軽量化を予定しています。

本稿ではBounceHammerの詳細な部分についての紹介ができませんでしたが,バウンス処理を必要としている方や頻繁にメール配信をしている方,そしてBounceHammerに興味を持っていただいた方は,是非BounceHammerのWebサイトhttp://bouncehammer.jp/をご覧ください。BounceHammerがみなさまのバウンス処理に役に立てれば幸いです。

著者プロフィール

東邦之(あずまくにゆき a.k.a azumakuniyuki)

立命館大学大学院中退後,PCインストラクター(Windows),インフラエンジニア(LANケーブル作成からサーバ設置,FirewallやVPNなどなんでも),サーバ管理者(主にDNSとSendmail)を経験。コンテンツプロバイダを退職後,2008年に(株)Cubicrootを設立し,バウンスメール解析システムbouncehammerを開発,公開。普段はVimで開発し,LaTeXで文書を書いています。よく使う言語はPerl,R,sendmail.cf。

バックナンバー

メール

  • オープンソースのバウンスメール解析システム BounceHammer

コメント

コメントの記入