SlideShare a Scribd company logo
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
バウンスメールを自動解析するシステム
bounceHammerというのを作りました
Perl and eMail
azumakuniyuki
株式会社キュービックルート
Kansai.pm#13
in Kyoto, 2010/11/20(Sat)
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
自己紹介
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer ✏ なまえ = azumakuniyuki
✏ しごと = サーバ管理者 > 10 年
✏ しごと = プログラマー < 2⅛ 年
✏ おうち = 上京区
✏ ねっと = @azumakuniyuki
✏ はてな = id:azumakuniyuki
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
E PowerBookG4
E iPhone3G
E NOKIA NM705i
ふつうのぼうし
わりときたないふく
スニーカー
E ふゆようのスーツ
E かわのくつ
そうび
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
どうぐ
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
本題
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
YAPC::Asia Tokyo 2010
で発表した内容の改訂版です
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
バウンスメールを処理、解析、
蓄積、出力する専用システムを
作りました
Perlで
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
bounceHammer
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
bounceHammer?
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ ばうんすはんまーと読む
✏ バウンスメール解析専用
✏ 配信システムではない
✏ 基本的にコマンドラインツール
✏ Webの管理画面もあります
bouncehammer?
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
bounceMail?
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ エラーで返ってきたメール
✏ 中身はだいたい英語
✏ 日本語のものもある
✏ リターンメール
✏ 不達メール
bounce mail?
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/メーラーダエモン
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...
✏メールサーバによっていろいろ
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
できること
bounceHammerが
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ バウンスメールを解析する
✏ バウンス理由特定(宛先不明/拒否...)
✏ 宛先分類(携帯/Webメール/PC...)
✏ 解析したらデータベースに蓄積
✏ 解析済みデータはYAMLで出力
Can ...
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
バウンス理由
bounceHammerが検出する
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ 宛先不明/ドメイン指定拒否
✏ メールボックスいっぱい
✏ メールが大きすぎる
✏ セキュリティ的なエラー
✏ 配送時間切れで差戻し
✏ ほかいろいろ(16種類ぐらい)
Reasons
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
何の役に立つ?
bounceHammerは
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ 一般的なMTAで配信している所
✏ でもバウンス処理はしていない
✏ そこそこ沢山配信している所
✏ でもバウンス処理はしていない
Where
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ コンテンツプロバイダさん
✏ メールマガジンスタンドさん
✏ メール配信しているところ全部
✏ まだバウンス処理をしていない人
Who
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
放置すると...
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ 携帯宛はブロックされる → 困る
✏ 有効配信数がわからない → 困る
✏ 遅延で配信時間がかかる → 困る
✏ 遅延でサーバが負荷上昇 → 困る
Block & Delay
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
とにかく困る
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
バウンス処理は
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ 確実にやるべき
✏ 配信数が少なくてもやるべき
✏ メール1通でも送るならやるべき
Bounce handling
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
処理をすると
bounceHammerで
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ バウンスの理由が正確にわかる
✏ バウンス記録を構造化して保存
✏ ウェブ管理画面でアドレス管理
✏ メール配信の合理化と健全化に
✏ 自前でバウンス処理の実装不要
use bouncehammer;
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
動作環境
bounceHammerの
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
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
対応MTA
bounceHammerの
http://d.hatena.ne.jp/keyword/MTA
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ Sendmail (たぶん商用も)
✏ Postfix
✏ qmail
✏ Exim
✏ Courier(近日対応予定)
✏ OpenSMTPD(近日対応予定)
MTAs
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
構築
bounceHammerの
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ Perlモジュールを入れる
✏ /bin/sh ./configure && make
✏ make test && make install
✏ データベースの準備
✏ 設定ファイルの編集
Build
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
動かす
bounceHammerを
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ 解析はmbox ¦¦ Maildir/を引数に
✏ STDINからも読む(/etc/aliases)
✏ /etc/crontabで定時処理させる
✏ 必要に応じて解析済みデータ取得
Operation
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
解析コマンド
bounceHammerの
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
# mailboxparser /var/mail/root
% mailboxparser ~/Maildir/cur ~/Maildir/new
% cat /var/mail/azuma | mailboxparser
- { "bounced": 1221728044, "addresser":
"user1@example.jp", "recipient": "domain-does-
not-exist@example.gov", "senderdomain":
"example.jp", "destination": "example.gov",
"reason": "hostunknown", ... }
bin/mailboxparser*
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ Linode512(Xeon L5520x4 2.27GHz, 512MB RAM)
✏ 約2000通のバウンスメールを解析
✏ mbox = 約500通/秒
✏ Maildir/ = 約200通/秒
Benchmark
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
出力コマンド
bounceHammerの
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
% datadumper --howrecent 1y # 1年以内の記録
% datadumper --reason 'userunknown' # 宛先不明だけ
% datadumper --hostgroup 'cellphone' # 携帯だけ
% datadumper --format csv --destination gmail.com
✏ DBに蓄積された記録を出力
✏ YAML, JSON, CSVで出力する
✏いろいろ条件指定ができます
bin/datadumper*
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
解析済データ
bounceHammerの
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ 解析済みデータはYAML ¦¦ JSON
✏ CSVでも出力できます
✏ サーバでバウンスの照合→削除
✏ 配信プログラムでバウンス照合
✏ ウェブサイトでバウンスの照合
Parsed data
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
MTAと協調
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ たぶん一番手っ取り早い利用方法
✏ 配信プログラムはいじりたくない
✏ 配信側をいじる期間の確保が無理
✏ でもバウンスした宛先に送るの嫌
✏ バウンスした宛先はMTAが削除 !
at MTA
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
# 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
✏ datadumperで解析結果を得る
✏ DISCARDで宛先不明は破棄する
/etc/mail/access
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
配信側で照合
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ たとえばユーザ宛にお知らせ送信
✏ メール配信プログラムで宛先照合
✏ YAMLで出力した宛先一覧を読む
✏ 一致した宛先は送信対象から外す
✏ YAMLが読めるなら言語を問わず
Read YAML
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
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
サイト上で照合
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ HTTPベースのAPIを使う
✏ ユーザ毎のページに状態を表示
✏「登録されているアドレスは...」
✏ 受け取れるアドレスに変更催促
✏ JSONが読めるなら言語を問わず
use HTTP-API;
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 ){ 内容を取得; }
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
✏ なるべく国産モジュール使いたい
✏ ORMは国産化完了(DBIC→Skinny)
✏ CGI::Application::.+ → ? + ?
✏ APIで書き込み可能にする
✏ 商用MTA・アプライアンスに対応?
TODOs
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
http://bouncehammer.jp/
詳細はWebで
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
http://gihyo.jp/magazine/SD
Software Design 2010年11月号
創刊20周年記念号に載りました
Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd.
bounceHammer
御静聴あり
がとうござ
いました・

More Related Content

Perl and eMail at Kansai.pm #13 Meeting in Kyoto

  • 1. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd. bounceHammer バウンスメールを自動解析するシステム bounceHammerというのを作りました Perl and eMail azumakuniyuki 株式会社キュービックルート Kansai.pm#13 in Kyoto, 2010/11/20(Sat)
  • 2. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd. bounceHammer 自己紹介
  • 3. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd. bounceHammer ✏ なまえ = azumakuniyuki ✏ しごと = サーバ管理者 > 10 年 ✏ しごと = プログラマー < 2⅛ 年 ✏ おうち = 上京区 ✏ ねっと = @azumakuniyuki ✏ はてな = id:azumakuniyuki
  • 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 放置すると...
  • 24. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd. bounceHammer ✏ 携帯宛はブロックされる → 困る ✏ 有効配信数がわからない → 困る ✏ 遅延で配信時間がかかる → 困る ✏ 遅延でサーバが負荷上昇 → 困る Block & Delay
  • 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の
  • 41. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd. bounceHammer # mailboxparser /var/mail/root % mailboxparser ~/Maildir/cur ~/Maildir/new % cat /var/mail/azuma | mailboxparser - { "bounced": 1221728044, "addresser": "[email protected]", "recipient": "domain-does- [email protected]", "senderdomain": "example.jp", "destination": "example.gov", "reason": "hostunknown", ... } bin/mailboxparser*
  • 42. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd. bounceHammer ✏ Linode512(Xeon L5520x4 2.27GHz, 512MB RAM) ✏ 約2000通のバウンスメールを解析 ✏ mbox = 約500通/秒 ✏ Maildir/ = 約200通/秒 Benchmark
  • 43. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd. bounceHammer 出力コマンド bounceHammerの
  • 44. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd. bounceHammer % datadumper --howrecent 1y # 1年以内の記録 % datadumper --reason 'userunknown' # 宛先不明だけ % datadumper --hostgroup 'cellphone' # 携帯だけ % datadumper --format csv --destination gmail.com ✏ DBに蓄積された記録を出力 ✏ YAML, JSON, CSVで出力する ✏いろいろ条件指定ができます bin/datadumper*
  • 45. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd. bounceHammer 解析済データ bounceHammerの
  • 46. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd. bounceHammer ✏ 解析済みデータはYAML ¦¦ JSON ✏ CSVでも出力できます ✏ サーバでバウンスの照合→削除 ✏ 配信プログラムでバウンス照合 ✏ ウェブサイトでバウンスの照合 Parsed data
  • 47. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd. bounceHammer MTAと協調
  • 48. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd. bounceHammer ✏ たぶん一番手っ取り早い利用方法 ✏ 配信プログラムはいじりたくない ✏ 配信側をいじる期間の確保が無理 ✏ でもバウンスした宛先に送るの嫌 ✏ バウンスした宛先はMTAが削除 ! at MTA
  • 49. Kansai.pm #13@京都 / Perl and eMail - bounceHammerっていうのを作りました / Developed by Cubicroot Co. Ltd. bounceHammer # 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 ✏ datadumperで解析結果を得る ✏ DISCARDで宛先不明は破棄する /etc/mail/access
  • 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 御静聴あり がとうござ いました・