バウンスメール解析システム bouncehammer

30
YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd. BounceHammer オープンソースのバウンスメール解析システム BounceHammer azumakuniyuki 株式会社キュービックルート

Upload: azuma-kuniyuki

Post on 22-May-2015

12.247 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

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

BounceHammer

azumakuniyuki株式会社キュービックルート

Page 2: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

自己紹介* なまえ = azumakuniyuki* しごと = サーバ管理者 > 10年* しごと = プログラマー < 2年* おうち = 京都市

東邦之

Page 3: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

BounceHammer?* ばうんすはんまーと読む* バウンスメール解析専用* 配信システムではない* 基本的にコマンドラインツール* もちろんPerl製

Page 4: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

バウンスメール?* エラーで返ってきたメール

* 中身はだいたい英語

* リターンメール・不達メール

Page 5: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

From:* Mailer-Daemon

* Mail Delivery Subsystem

* Postmaster@...

Page 6: バウンスメール解析システム BounceHammer

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

Page 7: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

できること* エラーメールを解析する* エラー理由特定(宛先不明/拒否/...)* 宛先分類(携帯/Webメール/PC/...)* 解析したらデータベースに蓄積* 解析済みデータはYAMLで出力

Bounc

eHam

merが

Page 8: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

エラー理由* 宛先不明* ドメイン指定拒否* メールボックスいっぱい* メールが大きすぎる* セキュリティ的なエラー

Page 9: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

役立つ場面* 一般的なMTAで配信している

* でもバウンス処理はしていない

* そこそこ沢山配信している

* でもバウンス処理はしていない

Page 10: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

役立つ人々* コンテンツプロバイダ

* メールマガジンスタンド

* メール配信しているところ全部

* まだバウンス処理をしていない人

Page 11: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

放置すると...* 携帯宛はブロックされる → 困る

* 有効配信数がわからない → 困る

* 遅延がひどくて送れない → 困る

* 遅延で配信時間がかかる → 困る

Page 12: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

放置すると...

とにかく困る

Page 13: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

バウンス処理は* 確実にやるべき

* 配信数が少なくてもやるべき

* メール1通でも送るならやるべき

Page 14: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

処理すると...* バウンスの理由が正確にわかる* バウンス記録を構造化して保存* ウェブ管理画面でアドレス管理* メール配信の合理化と健全化に* 自前でバウンス処理実装不必要

Bounc

eHam

merで

Page 15: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

処理すると...Bounc

eHam

merで

とにかく良い

Page 16: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

インストール* Perlモジュールを入れる* ./configure && make* make install* データベースの準備* 設定ファイルの編集

Bounc

eHam

merの

Page 17: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

解析済みデータの利用* 解析済みデータはYAML || JSON* CSVでも出力(表計算ソフトで利用)* MTAでバウンス照合→削除* 配信プログラムでバウンス照合* ウェブサイトでバウンス照合

Page 18: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

動かしてみる* 解析はmbox || Maildir/を引数に

* STDINからも読む(/etc/aliases)

* /etc/crontabで定時処理させる

* 必要に応じて解析済みデータ取得

Bounc

eHam

merを

Page 19: バウンスメール解析システム BounceHammer

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", ... }

Page 20: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

解析速度* Linode(Xeon L5520x4 2.27GHz)

* mbox = 約500通/秒

* Maildir/ = 約200通/秒

Page 21: バウンスメール解析システム BounceHammer

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で出力する* いろいろ条件指定ができます

Page 22: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

MTAと協調させる* 配信プログラムはいじりたくない

* でもバウンスした宛先に送るの嫌

* バウンスした宛先はMTAが削除 !

Page 23: バウンスメール解析システム BounceHammer

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

Page 24: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

配信プログラムで照合* 配信プログラムで宛先照合をする

* YAMLで出力した宛先一覧を読む

* 一致した宛先は送信対象から外す

* YAMLが読めるなら言語を問わず

Page 25: バウンスメール解析システム BounceHammer

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

Page 26: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

ウェブサイトに組み込む* HTTPベースのAPIを使う* ユーザ毎のページに状態を表示* 「登録されているアドレスは...」* メールを受け取れるアドレスに* JSONが読めるなら言語を問わず

Page 27: バウンスメール解析システム BounceHammer

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 ){ 内容を取得; }

Page 28: バウンスメール解析システム BounceHammer

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の

Page 29: バウンスメール解析システム BounceHammer

YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.Bounce

Ha

mm

er

続きはWebで

http://bouncehammer.jp/

Page 30: バウンスメール解析システム BounceHammer

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日発売!次の月曜日です!