SlideShare a Scribd company logo
BounceHammer
                 オープンソースのバウンスメール解析システム

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




               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   自己紹介
                                                 東
                                                 邦
                                                 之

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



               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   BounceHammer?
                  * ばうんすはんまーと読む
                  * バウンスメール解析専用
                  * 配信システムではない
                  * 基本的にコマンドラインツール
                  * もちろんPerl製
               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   バウンスメール?
                  * エラーで返ってきたメール

                  * 中身はだいたい英語

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


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

                  * Mail Delivery Subsystem

                  * Postmaster@...


               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   Subject:
                  * Returned mail: see transcript ...

                  * failure notice

                  * Undelivered Mail Returned to ...


               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer
    Bounc
     eHam        できること
     merが

                  * エラーメールを解析する
                  * エラー理由特定(宛先不明/拒否/...)
                  * 宛先分類(携帯/Webメール/PC/...)
                  * 解析したらデータベースに蓄積
                  * 解析済みデータはYAMLで出力
               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   エラー理由
                  * 宛先不明
                  * ドメイン指定拒否
                  * メールボックスいっぱい
                  * メールが大きすぎる
                  * セキュリティ的なエラー

               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   役立つ場面
                  * 一般的なMTAで配信している

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

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

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

               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   役立つ人々
                  * コンテンツプロバイダ

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

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

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

               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   放置すると...
                  * 携帯宛はブロックされる → 困る

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

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

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

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


                とにかく困る

               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   バウンス処理は
                  * 確実にやるべき

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

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


               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer
    B ounc
     eHam        処理すると...
     merで

                  * バウンスの理由が正確にわかる
                  * バウンス記録を構造化して保存
                  * ウェブ管理画面でアドレス管理
                  * メール配信の合理化と健全化に
                  * 自前でバウンス処理実装不必要
               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer
    Bounc
     eHam        処理すると...
     merで




                とにかく良い

               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer
    B ounc
     eHam        インストール
     merの

                  * Perlモジュールを入れる
                  * ./configure && make
                  * make install
                  * データベースの準備
                  * 設定ファイルの編集
               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   解析済みデータの利用
                  * 解析済みデータはYAML ¦¦ JSON
                  * CSVでも出力(表計算ソフトで利用)
                  * MTAでバウンス照合→削除
                  * 配信プログラムでバウンス照合
                  * ウェブサイトでバウンス照合
               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer
    B ounc
     eHam        動かしてみる
     merを

                  * 解析はmbox ¦¦ Maildir/を引数に

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

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

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

               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   解析コマンド
                   * mailboxparserというコマンド
               # 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", ... }
               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   解析速度
                   * Linode(Xeon L5520x4 2.27GHz)

                   * mbox = 約500通/秒

                   * Maildir/ = 約200通/秒




               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   出力コマンド
                   * datadumperというコマンド
                   * YAML,JSON,CSVで出力する
                   * いろいろ条件指定ができます
               % datadumper --howrecent 1y 1年以内の記録

               % datadumper --reason 'userunknown' 宛先不明だけ

               % datadumper --hostgroup 'cellphone' 携帯だけ

               % datadumper --format csv --destination gmail.com

               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   MTAと協調させる
                  * 配信プログラムはいじりたくない

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

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


               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
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.
BounceHammer   配信プログラムで照合
                  * 配信プログラムで宛先照合をする

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

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

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

               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
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.
BounceHammer   ウェブサイトに組み込む
                  * HTTPベースのAPIを使う
                  * ユーザ毎のページに状態を表示
                  * 「登録されているアドレスは...」
                  * メールを受け取れるアドレスに
                  * JSONが読めるなら言語を問わず
               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
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.
BounceHammer
    Bounc
     eHam         今後
     merの

                  * 次の2.6.0でエラーの理由 += 4;
                  * なるべく国産モジュール使いたい
                  * ORMは国産化完了(DBIC→Skinny)
                  * CGI::Application::.+ → ?
                  * APIで書き込み可能にする
               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   続きはWebで


                     http://bouncehammer.jp/




               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
BounceHammer   続きは雑誌で
                 http://gihyo.jp/magazine/SD

                                              Software Design 2010年11月号
                                              創刊20周年記念号に載ります!

                                              10月18日発売!
                                              次の月曜日です!
               YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.

More Related Content

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

  • 1. BounceHammer オープンソースのバウンスメール解析システム BounceHammer 株式会社キュービックルート azumakuniyuki YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  • 2. BounceHammer 自己紹介 東 邦 之 * なまえ = azumakuniyuki * しごと = サーバ管理者 > 10年 * しごと = プログラマー < 2年 * おうち = 京都市 YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  • 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.
  • 11. BounceHammer 放置すると... * 携帯宛はブロックされる → 困る * 有効配信数がわからない → 困る * 遅延がひどくて送れない → 困る * 遅延で配信時間がかかる → 困る YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  • 12. BounceHammer 放置すると... とにかく困る YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  • 13. BounceHammer バウンス処理は * 確実にやるべき * 配信数が少なくてもやるべき * メール1通でも送るならやるべき YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  • 14. BounceHammer B ounc eHam 処理すると... merで * バウンスの理由が正確にわかる * バウンス記録を構造化して保存 * ウェブ管理画面でアドレス管理 * メール配信の合理化と健全化に * 自前でバウンス処理実装不必要 YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  • 15. BounceHammer Bounc eHam 処理すると... merで とにかく良い YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  • 16. BounceHammer B ounc eHam インストール merの * Perlモジュールを入れる * ./configure && make * make install * データベースの準備 * 設定ファイルの編集 YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  • 17. BounceHammer 解析済みデータの利用 * 解析済みデータはYAML ¦¦ JSON * CSVでも出力(表計算ソフトで利用) * MTAでバウンス照合→削除 * 配信プログラムでバウンス照合 * ウェブサイトでバウンス照合 YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  • 18. BounceHammer B ounc eHam 動かしてみる merを * 解析はmbox ¦¦ Maildir/を引数に * STDINからも読む(/etc/aliases) * /etc/crontabで定時処理させる * 必要に応じて解析済みデータ取得 YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  • 19. BounceHammer 解析コマンド * mailboxparserというコマンド # 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", ... } YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  • 20. BounceHammer 解析速度 * Linode(Xeon L5520x4 2.27GHz) * mbox = 約500通/秒 * Maildir/ = 約200通/秒 YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  • 21. BounceHammer 出力コマンド * datadumperというコマンド * YAML,JSON,CSVで出力する * いろいろ条件指定ができます % datadumper --howrecent 1y 1年以内の記録 % datadumper --reason 'userunknown' 宛先不明だけ % datadumper --hostgroup 'cellphone' 携帯だけ % datadumper --format csv --destination gmail.com 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.
  • 28. BounceHammer Bounc eHam 今後 merの * 次の2.6.0でエラーの理由 += 4; * なるべく国産モジュール使いたい * ORMは国産化完了(DBIC→Skinny) * CGI::Application::.+ → ? * APIで書き込み可能にする YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  • 29. BounceHammer 続きはWebで http://bouncehammer.jp/ YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  • 30. BounceHammer 続きは雑誌で http://gihyo.jp/magazine/SD Software Design 2010年11月号 創刊20周年記念号に載ります! 10月18日発売! 次の月曜日です! YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.