4. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
E PowerBookG4
E iPhone3G
E NOKIA NM705i
ふつうのぼうし
わりときたないふく
スニーカー
E ふゆようのスーツ
E かわのくつ
そうび
5. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
/usr/bin/perl -w
/bin/sh
/bin/tcsh
OpenBSD
Ubuntu
MacVim
/usr/bin/vi
/usr/lib/sendmail
LaTeX2e
どうぐ
6. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
本題
7. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
YAPC::Asia Tokyo 2010
で発表した内容の改訂版です
8. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
バウンスメールを処理、解析、
蓄積、出力する専用システムを
作りました
Perlで
9. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
bounceHammer
10. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
bounceHammer?
11. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ ばうんすはんまーと読む
✏ バウンスメール解析専用
✏ 配信システムではない
✏ 基本的にコマンドラインツール
✏ Webの管理画面もあります
bouncehammer?
12. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
bounceMail?
13. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ エラーで返ってきたメール
✏ 中身はだいたい英語
✏ 日本語のものもある
✏ リターンメール
✏ 不達メール
bounce mail?
14. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
From:
✏ Mailer-Daemon
✏ Mail Delivery Subsystem
✏ Mail Delivery System
✏ Postmaster@...
✏ だいたい↑のどれか
http://d.hatena.ne.jp/keyword/メーラーダエモン
15. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
Subject:
✏ Returned mail: see transcript ...
✏ failure notice
✏ Undelivered Mail Returned to ...
✏ Mail delivery failed: returning...
✏メールサーバによっていろいろ
16. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
できること
bounceHammerが
17. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ バウンスメールを解析する
✏ バウンス理由特定(宛先不明/拒否...)
✏ 宛先分類(携帯/Webメール/PC...)
✏ 解析したらデータベースに蓄積
✏ 解析済みデータはYAMLで出力
Can ...
18. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
バウンス理由
bounceHammerが検出する
19. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ 宛先不明/ドメイン指定拒否
✏ メールボックスいっぱい
✏ メールが大きすぎる
✏ セキュリティ的なエラー
✏ 配送時間切れで差戻し
✏ ほかいろいろ(16種類ぐらい)
Reasons
20. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
何の役に立つ?
bounceHammerは
21. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ 一般的なMTAで配信している所
✏ でもバウンス処理はしていない
✏ そこそこ沢山配信している所
✏ でもバウンス処理はしていない
Where
22. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ コンテンツプロバイダさん
✏ メールマガジンスタンドさん
✏ メール配信しているところ全部
✏ まだバウンス処理をしていない人
Who
23. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
放置すると...
25. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
とにかく困る
26. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
バウンス処理は
27. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ 確実にやるべき
✏ 配信数が少なくてもやるべき
✏ メール1通でも送るならやるべき
Bounce handling
28. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
処理をすると
bounceHammerで
29. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ バウンスの理由が正確にわかる
✏ バウンス記録を構造化して保存
✏ ウェブ管理画面でアドレス管理
✏ メール配信の合理化と健全化に
✏ 自前でバウンス処理の実装不要
use bouncehammer;
30. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
31. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
32. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
動作環境
bounceHammerの
33. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ LAMPならなんでも動く
✏ Perl 5.8.1以上
✏ *BSD, Linux, MacOS X
✏ PostgreSQL, MySQL, SQLite
✏ Apache(CGI, mod_perl2)
Environment
34. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
対応MTA
bounceHammerの
http://d.hatena.ne.jp/keyword/MTA
35. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ Sendmail (たぶん商用も)
✏ Postfix
✏ qmail
✏ Exim
✏ Courier(近日対応予定)
✏ OpenSMTPD(近日対応予定)
MTAs
36. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
構築
bounceHammerの
37. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ Perlモジュールを入れる
✏ /bin/sh ./configure && make
✏ make test && make install
✏ データベースの準備
✏ 設定ファイルの編集
Build
38. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
動かす
bounceHammerを
39. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ 解析はmbox ¦¦ Maildir/を引数に
✏ STDINからも読む(/etc/aliases)
✏ /etc/crontabで定時処理させる
✏ 必要に応じて解析済みデータ取得
Operation
40. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
解析コマンド
bounceHammerの
50. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
配信側で照合
51. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ たとえばユーザ宛にお知らせ送信
✏ メール配信プログラムで宛先照合
✏ YAMLで出力した宛先一覧を読む
✏ 一致した宛先は送信対象から外す
✏ YAMLが読めるなら言語を問わず
Read YAML
52. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
#!/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 ){
バウンス記録に一致しないので配信する;
}
}
# datadumper > /tmp/bounce.yaml
53. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
サイト上で照合
54. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ HTTPベースのAPIを使う
✏ ユーザ毎のページに状態を表示
✏「登録されているアドレスは...」
✏ 受け取れるアドレスに変更催促
✏ JSONが読めるなら言語を問わず
use HTTP-API;
55. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer #!/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 ){ 内容を取得; }
56. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ なるべく国産モジュール使いたい
✏ ORMは国産化完了(DBIC→Skinny)
✏ CGI::Application::.+ → ? + ?
✏ APIで書き込み可能にする
✏ 商用MTA・アプライアンスに対応?
TODOs
57. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
http://bouncehammer.jp/
詳細はWebで
58. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
http://gihyo.jp/magazine/SD
Software Design 2010年11月号
創刊20周年記念号に載りました
59. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
御静聴あり
がとうござ
いました・