BounceHammer BounceHammer?
* ばうんすはんまーと読む
* バウンスメール解析専用
* 配信システムではない
* 基本的にコマンドラインツール
* もちろんPerl製
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
4.
BounceHammer バウンスメール?
* エラーで返ってきたメール
* 中身はだいたい英語
* リターンメール・不達メール
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
5.
BounceHammer From:
* Mailer-Daemon
* Mail Delivery Subsystem
* Postmaster@...
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
6.
BounceHammer Subject:
* Returned mail: see transcript ...
* failure notice
* Undelivered Mail Returned to ...
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
7.
BounceHammer
Bounc
eHam できること
merが
* エラーメールを解析する
* エラー理由特定(宛先不明/拒否/...)
* 宛先分類(携帯/Webメール/PC/...)
* 解析したらデータベースに蓄積
* 解析済みデータはYAMLで出力
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
8.
BounceHammer エラー理由
* 宛先不明
* ドメイン指定拒否
* メールボックスいっぱい
* メールが大きすぎる
* セキュリティ的なエラー
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
9.
BounceHammer 役立つ場面
* 一般的なMTAで配信している
* でもバウンス処理はしていない
* そこそこ沢山配信している
* でもバウンス処理はしていない
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
10.
BounceHammer 役立つ人々
* コンテンツプロバイダ
* メールマガジンスタンド
* メール配信しているところ全部
* まだバウンス処理をしていない人
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
11.
BounceHammer 放置すると...
* 携帯宛はブロックされる → 困る
* 有効配信数がわからない → 困る
* 遅延がひどくて送れない → 困る
* 遅延で配信時間がかかる → 困る
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
12.
BounceHammer 放置すると...
とにかく困る
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
13.
BounceHammer バウンス処理は
* 確実にやるべき
* 配信数が少なくてもやるべき
* メール1通でも送るならやるべき
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
14.
BounceHammer
B ounc
eHam 処理すると...
merで
* バウンスの理由が正確にわかる
* バウンス記録を構造化して保存
* ウェブ管理画面でアドレス管理
* メール配信の合理化と健全化に
* 自前でバウンス処理実装不必要
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
15.
BounceHammer
Bounc
eHam 処理すると...
merで
とにかく良い
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
16.
BounceHammer
B ounc
eHam インストール
merの
* Perlモジュールを入れる
* ./configure && make
* make install
* データベースの準備
* 設定ファイルの編集
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
17.
BounceHammer 解析済みデータの利用
* 解析済みデータはYAML ¦¦ JSON
* CSVでも出力(表計算ソフトで利用)
* MTAでバウンス照合→削除
* 配信プログラムでバウンス照合
* ウェブサイトでバウンス照合
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
18.
BounceHammer
B ounc
eHam 動かしてみる
merを
* 解析はmbox ¦¦ Maildir/を引数に
* STDINからも読む(/etc/aliases)
* /etc/crontabで定時処理させる
* 必要に応じて解析済みデータ取得
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer MTAと協調させる
* 配信プログラムはいじりたくない
* でもバウンスした宛先に送るの嫌
* バウンスした宛先はMTAが削除 !
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
23.
BounceHammer
Send /etc/mail/access
mail
* DISCARDで宛先不明は破棄する
# cd /etc/mail
# datadumper --format csv --reason userunknown
> | cut -d, -f3 | grep '@'
> | sed 's/^/To:/g;s/$/ DISCARD/g' > ./access
# makemap hash access.db < access
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
24.
BounceHammer 配信プログラムで照合
* 配信プログラムで宛先照合をする
* YAMLで出力した宛先一覧を読む
* 一致した宛先は送信対象から外す
* YAMLが読めるなら言語を問わず
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
25.
BounceHammer YAMLファイルで照合
# datadumper > /tmp/bounce.yaml
#/usr/bin/perl
use JSON::Syck;
my @A = 配信対象のメールアドレス配列;
my @B = JSON::Syck::LoadFile("/tmp/bounce.yaml");
foreach my $e ( @A ){
unless( grep { $e eq $_->{recipient} } @B ){
バウンス記録に一致しないので配信する;
}
}
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
26.
BounceHammer ウェブサイトに組み込む
* HTTPベースのAPIを使う
* ユーザ毎のページに状態を表示
* 「登録されているアドレスは...」
* メールを受け取れるアドレスに
* JSONが読めるなら言語を問わず
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
27.
BounceHammer HTTP-APIで照合
#/usr/bin/perl
use JSON::Syck;
use LWP::UserAgent;
my $A = 'ユーザのメールアドレス';
my $H = 'http://127.0.0.1/b.cgi/search/recipient/';
my $U = new LWP::UserAgent();
my $R = $U->request( HTTP::Request->new(
GET => $H.$A ));
my $J = JSON::Syck::Load( $R->content() ) || [];
foreach my $e ( @$J ){ 内容を取得; }
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.