Upload
azuma-kuniyuki
View
12.247
Download
5
Embed Size (px)
Citation preview
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
オープンソースのバウンスメール解析システム
BounceHammer
azumakuniyuki株式会社キュービックルート
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
自己紹介* なまえ = azumakuniyuki* しごと = サーバ管理者 > 10年* しごと = プログラマー < 2年* おうち = 京都市
東邦之
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
BounceHammer?* ばうんすはんまーと読む* バウンスメール解析専用* 配信システムではない* 基本的にコマンドラインツール* もちろんPerl製
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
バウンスメール?* エラーで返ってきたメール
* 中身はだいたい英語
* リターンメール・不達メール
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
From:* Mailer-Daemon
* Mail Delivery Subsystem
* Postmaster@...
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
Subject:* Returned mail: see transcript ...
* failure notice
* Undelivered Mail Returned to ...
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
できること* エラーメールを解析する* エラー理由特定(宛先不明/拒否/...)* 宛先分類(携帯/Webメール/PC/...)* 解析したらデータベースに蓄積* 解析済みデータはYAMLで出力
Bounc
eHam
merが
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
エラー理由* 宛先不明* ドメイン指定拒否* メールボックスいっぱい* メールが大きすぎる* セキュリティ的なエラー
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
役立つ場面* 一般的なMTAで配信している
* でもバウンス処理はしていない
* そこそこ沢山配信している
* でもバウンス処理はしていない
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
役立つ人々* コンテンツプロバイダ
* メールマガジンスタンド
* メール配信しているところ全部
* まだバウンス処理をしていない人
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
放置すると...* 携帯宛はブロックされる → 困る
* 有効配信数がわからない → 困る
* 遅延がひどくて送れない → 困る
* 遅延で配信時間がかかる → 困る
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
放置すると...
とにかく困る
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
バウンス処理は* 確実にやるべき
* 配信数が少なくてもやるべき
* メール1通でも送るならやるべき
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
処理すると...* バウンスの理由が正確にわかる* バウンス記録を構造化して保存* ウェブ管理画面でアドレス管理* メール配信の合理化と健全化に* 自前でバウンス処理実装不必要
Bounc
eHam
merで
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
処理すると...Bounc
eHam
merで
とにかく良い
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
インストール* Perlモジュールを入れる* ./configure && make* make install* データベースの準備* 設定ファイルの編集
Bounc
eHam
merの
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
解析済みデータの利用* 解析済みデータはYAML || JSON* CSVでも出力(表計算ソフトで利用)* MTAでバウンス照合→削除* 配信プログラムでバウンス照合* ウェブサイトでバウンス照合
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
動かしてみる* 解析はmbox || Maildir/を引数に
* STDINからも読む(/etc/aliases)
* /etc/crontabで定時処理させる
* 必要に応じて解析済みデータ取得
Bounc
eHam
merを
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
解析コマンド
# mailboxparser /var/mail/root
% mailboxparser ~/Maildir/cur ~/Maildir/new
% cat /var/mail/azuma | mailboxparser
* mailboxparserというコマンド
- { "bounced": 1221728044, "addresser": "[email protected]", "recipient": "[email protected]", "senderdomain": "example.jp", "destination": "example.gov", "reason": "hostunknown", ... }
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
解析速度* Linode(Xeon L5520x4 2.27GHz)
* mbox = 約500通/秒
* Maildir/ = 約200通/秒
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
出力コマンド
% datadumper --howrecent 1y 1年以内の記録
% datadumper --reason 'userunknown' 宛先不明だけ
% datadumper --hostgroup 'cellphone' 携帯だけ
% datadumper --format csv --destination gmail.com
* datadumperというコマンド* YAML,JSON,CSVで出力する* いろいろ条件指定ができます
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
MTAと協調させる* 配信プログラムはいじりたくない
* でもバウンスした宛先に送るの嫌
* バウンスした宛先はMTAが削除 !
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
/etc/mail/access
# 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
* DISCARDで宛先不明は破棄する
Sendmail
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
配信プログラムで照合* 配信プログラムで宛先照合をする
* YAMLで出力した宛先一覧を読む
* 一致した宛先は送信対象から外す
* YAMLが読めるなら言語を問わず
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
YAMLファイルで照合
#/usr/bin/perluse JSON::Syck;my @A = 配信対象のメールアドレス配列;my @B = JSON::Syck::LoadFile("/tmp/bounce.yaml");foreach my $e ( @A ){ unless( grep { $e eq $_->{recipient} } @B ){ バウンス記録に一致しないので配信する; }}
# datadumper > /tmp/bounce.yaml
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
ウェブサイトに組み込む* HTTPベースのAPIを使う* ユーザ毎のページに状態を表示* 「登録されているアドレスは...」* メールを受け取れるアドレスに* JSONが読めるなら言語を問わず
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
HTTP-APIで照合#/usr/bin/perluse 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.Bounce
Ha
mm
er
今後* 次の2.6.0でエラーの理由 += 4;* なるべく国産モジュール使いたい* ORMは国産化完了(DBIC→Skinny)* CGI::Application::.+ → ?* APIで書き込み可能にする
Bounc
eHam
merの
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
続きはWebで
http://bouncehammer.jp/
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce
Ha
mm
er
続きは雑誌でhttp://gihyo.jp/magazine/SD
Software Design 2010年11月号創刊20周年記念号に載ります!
10月18日発売!次の月曜日です!