3. 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.
22. 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.