Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

14,051 views

Published on

Published in: Technology, Travel, Business
  • YAPC::Asia Tokyo 2010の二日目に発表で使用したスライドです。直接ファイル(PDF)をダウンロードするリンクは http://bouncehammer.jp/ja/what-is-new/2010/10/yapcasia-tokyo-2010.html にもあります。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

  1. 1. BounceHammer オープンソースのバウンスメール解析システム BounceHammer 株式会社キュービックルート azumakuniyuki YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  2. 2. BounceHammer 自己紹介 東 邦 之 * なまえ = azumakuniyuki * しごと = サーバ管理者 > 10年 * しごと = プログラマー < 2年 * おうち = 京都市 YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  3. 3. BounceHammer BounceHammer? * ばうんすはんまーと読む * バウンスメール解析専用 * 配信システムではない * 基本的にコマンドラインツール * もちろんPerl製 YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  4. 4. BounceHammer バウンスメール? * エラーで返ってきたメール * 中身はだいたい英語 * リターンメール・不達メール YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  5. 5. BounceHammer From: * Mailer-Daemon * Mail Delivery Subsystem * Postmaster@... YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  6. 6. BounceHammer Subject: * Returned mail: see transcript ... * failure notice * Undelivered Mail Returned to ... YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  7. 7. BounceHammer Bounc eHam できること merが * エラーメールを解析する * エラー理由特定(宛先不明/拒否/...) * 宛先分類(携帯/Webメール/PC/...) * 解析したらデータベースに蓄積 * 解析済みデータはYAMLで出力 YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  8. 8. BounceHammer エラー理由 * 宛先不明 * ドメイン指定拒否 * メールボックスいっぱい * メールが大きすぎる * セキュリティ的なエラー YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  9. 9. BounceHammer 役立つ場面 * 一般的なMTAで配信している * でもバウンス処理はしていない * そこそこ沢山配信している * でもバウンス処理はしていない YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  10. 10. BounceHammer 役立つ人々 * コンテンツプロバイダ * メールマガジンスタンド * メール配信しているところ全部 * まだバウンス処理をしていない人 YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  11. 11. BounceHammer 放置すると... * 携帯宛はブロックされる → 困る * 有効配信数がわからない → 困る * 遅延がひどくて送れない → 困る * 遅延で配信時間がかかる → 困る YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  12. 12. BounceHammer 放置すると... とにかく困る YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  13. 13. BounceHammer バウンス処理は * 確実にやるべき * 配信数が少なくてもやるべき * メール1通でも送るならやるべき YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  14. 14. BounceHammer B ounc eHam 処理すると... merで * バウンスの理由が正確にわかる * バウンス記録を構造化して保存 * ウェブ管理画面でアドレス管理 * メール配信の合理化と健全化に * 自前でバウンス処理実装不必要 YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  15. 15. BounceHammer Bounc eHam 処理すると... merで とにかく良い YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  16. 16. BounceHammer B ounc eHam インストール merの * Perlモジュールを入れる * ./configure && make * make install * データベースの準備 * 設定ファイルの編集 YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  17. 17. BounceHammer 解析済みデータの利用 * 解析済みデータはYAML ¦¦ JSON * CSVでも出力(表計算ソフトで利用) * MTAでバウンス照合→削除 * 配信プログラムでバウンス照合 * ウェブサイトでバウンス照合 YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  18. 18. BounceHammer B ounc eHam 動かしてみる merを * 解析はmbox ¦¦ Maildir/を引数に * STDINからも読む(/etc/aliases) * /etc/crontabで定時処理させる * 必要に応じて解析済みデータ取得 YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  19. 19. 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.
  20. 20. BounceHammer 解析速度 * Linode(Xeon L5520x4 2.27GHz) * mbox = 約500通/秒 * Maildir/ = 約200通/秒 YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  21. 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. 22. BounceHammer MTAと協調させる * 配信プログラムはいじりたくない * でもバウンスした宛先に送るの嫌 * バウンスした宛先はMTAが削除 ! YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  23. 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. 24. BounceHammer 配信プログラムで照合 * 配信プログラムで宛先照合をする * YAMLで出力した宛先一覧を読む * 一致した宛先は送信対象から外す * YAMLが読めるなら言語を問わず YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  25. 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. 26. BounceHammer ウェブサイトに組み込む * HTTPベースのAPIを使う * ユーザ毎のページに状態を表示 * 「登録されているアドレスは...」 * メールを受け取れるアドレスに * JSONが読めるなら言語を問わず YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  27. 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. 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. 29. BounceHammer 続きはWebで http://bouncehammer.jp/ YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.
  30. 30. BounceHammer 続きは雑誌で http://gihyo.jp/magazine/SD Software Design 2010年11月号 創刊20周年記念号に載ります! 10月18日発売! 次の月曜日です! YAPC::Asia Tokyo 2010 / バウンスメール解析システム BounceHammer / Developed by Cubicroot Co. Ltd.

×