SlideShare a Scribd company logo
1 of 59
Download to read offline
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




               bounceHammerによる
              バウンスメール解析の技術
                                      Cubicroot Co. Ltd.
                                       @azumakuniyuki
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




                                   自己紹介
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  自己紹介
      -   Azuma, Kuniyuki
      -   @azumakuniyuki
      -   サーバ管理者(*BSD, Linux, 昔はSolarisも)
      -   プログラマ(Perl,/bin/sh, たまにC,R)
      -   京都市中京区
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  サーバ管理者
      - FreeBSD(98) → FreeBSD 4.9→ OpenBSD
      - NetBSDは未経験
      - 最近はLinuxが殆ど
        - CentOS, Fedora, RHEL, Ubuntu
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   メールサーバ管理者
      - Sendmail → Postfix → Sendmail(再)
      - /etc/sendmail.cf
        - CF(WIDE), cf, m4
        - たまにルールセットを書く
           - 柔軟な処理ができる
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   プログラマ
      -   Perl (2008年秋からモダンPerlを勉強)
      -   /bin/sh (サーバでの処理は殆ど)
      -   C(学生時代少し) ←殆ど知らない
      -   Java(JDK 1.0, 1.1の頃)
      -   PHP(PHP/FIの頃, 2.0, 3.0)
      - R(最近、統計処理のため)
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  Perl
      - /bin/shで書きにくい場合はPerl
      - 2008年秋からモダンPerlを勉強
        - モダンPerl入門+CPANモジュールガイド
      - YAPC::Asia
      - Kansai.pm(→11/26@京都)
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




                bounceHammer ?
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   bounceHammer
      -   ばうんすはんまー
      -   バウンスメール解析専用
      -   配信システムではない
      -   コマンドラインツール+WebUI
      -   Made by Perl, OpenSource!
      - 2010年春に公開
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




                   バウンスメール ?
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  バウンスメール
      - エラーで返ってきたメール
      - 中身はだいたい英語
        - 稀に日本語で書いてる
      - リターンメールとか不達メール
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  From:
      -   MAILER-DAEMON
      -   Mail Delivery Subsystem
      -   Mail Administrator
      -   Postmaster@...
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  Subject:
      -   Returned mail: see transcript for …
      -   failure notice
      -   Undelivered Mail Returned to …
      -   Delivery Failure
      -   配信エラー
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  バウンスした理由
      -   宛先不明(User Unknown)
      -   メールボックスいっぱい(Mailbox full)
      -   ドメイン指定拒否(携帯電話)
      -   セキュリティ的な理由(スパム扱い, Virus)
      -   DNS的な理由(逆引きない, SPFの不備)
      - 不明なホスト(サービス終了, ドメイン違う)
      - MTA管理者が怒ってる(行儀悪い配信)
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   メール本文
      - 英語で書いてる
      - エラーコードがあればよい
      - どれも似ている
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   例) @docomo.ne.jp
      - Sendmail経由でDoCoMoに送った場合
      - 本文はほとんど同じ
       宛先不明                                                    ドメイン指定拒否

                  ← エラーコード(D.S.N.)が少し違う →



      (reason: 550 Unknown user ****@docomo.ne.jp)
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   目視で見分ける
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




          バウンスメールの処理
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   バウンス処理は
      -   確実にやるべき
      -   正確にやるべき
      -   配信数が少なくてもやるべき
      -   メール1通でも送るならやった方がいい
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   バウンス処理を放置すると
      - 携帯宛はブロックされる
        - 遅延が発生する
          - 配信時間がかかる
          - メールサーバの負荷上昇
      - 有効配信数がわからない
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   放置した事例1
      - 携帯電話宛の宛先不明が多発
        - 消し込み処理やらずに継続配信
          - SMTP接続が拒否される(一時的)
          - 大規模な遅延が発生
          - メールサーバの負荷上昇
                - 別のIPアドレスでMTA構築(コスト↑)
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   放置した事例2
      - 宛先不明やMailbox Fullが多発
        - 消し込み処理やらずに継続配信
          - SMTP接続が拒否される(128IPs!)
          - DNSBLに登録された
          - 解除してもらうまで時間がかかる
                - 別のIPアドレスでMTA構築(コスト↑)
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   バウンス処理を実装する
      - たいへん
      - パターンが多い ← 正規表現たくさん書く
        - MTA毎に違う(Sendmail,Postfix,qmail,..)
        - 宛先毎に違う(Gmail,Yahoo!,Hotmail,…)
        - エラー毎に違う
      - 正しく解析すべき
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  雑に実装した事例
      - 簡単な一枚スクリプトで実装
      - エラーメールが返ってきたら無条件で削除
        - 宛先不明ならそれでもOK
        - Mailbox Fullや一時エラーでも削除した
          - ユーザからクレーム
                     - 「急にメールが来なくなった」
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   バウンス処理は
      -   確実にやるべき
      -   正確にやるべき
      -   配信数が少なくてもやるべき
      -   メール1通でも送るならやった方がいい
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   bounceHammer
      -   バウンスメールの解析専用
      -   サーバで動く
      -   コマンドラインツール
      -   WebUI(ブラウザベースの管理画面)
      -   HTTP-API(読み取り専用)
      - http://example.bouncehammer.jp/
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   使う利点
      -   バウンスした理由が正確にわかる
      -   バウンス記録を構造化して保存できる
      -   ブラウザベースの管理画面でアドレス管理
      -   メール配信の合理化と健全化
      -   自前でバウンス処理を実装しなくてよい
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  できること
      - バウンスメールの解析
      - エラーの理由を特定する
        - 宛先不明・拒否・容量超過(全19種類)
      - 宛先分類(携帯/スマホ/PC/Webメール)
      - YAML/JSON/CSVで結果を出力
      - DB(MySQL,PostgreSQL,SQLite)に保存
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   役立つ場面
      - オープンソースのMTAで配信している
        - Sendmail, Postfix, qmail, Exim, Courier
      - バウンス処理してない OR 緩い
        - あまり正確にやっていない
      - そこそこたくさん配信している
          - 配信数 > 100/Day
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   役立つ人々
      - コンテンツプロバイダ
        - 通知でメールが飛ぶ
      - メールマガジンスタンド
      - メール配信があるところ全部
      - まだバウンス処理していない人
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  bounceHammerのユーザ
      -   携帯向けポータルサイト(含BBS)
      -   SNS(通知関係でメールが飛ぶ)
      -   転職サイト
      -   オンラインショップ・通販
      -   レンタルサーバ
      - 海外も少し
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   @type様
      -   国内最大級の転職サイト
      -   キャリアデザインセンター様
      -   @type, 女の転職@type
      -   150万Users(2010冬)
      -   配信数1200万通/月(2010冬)
      - 私の年収...
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




           コマンドツールの機能
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  動作環境
      -   Perl 5.8.8以上といくつかのモジュール
      -   *BSD, Linux, MacOS X
      -   MySQL, PostgreSQL, SQLite(保存用)
      -   Apache(WebUI・管理画面)
      -   IE以外のブラウザ(WebUI・管理画面)
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   対応MTA
      - オープンソースのMTA
        - Sendmail, Postfix, qmail, Exim, Courier
        - 将来対応→OpenSMTPD, Apache James
      - 国内携帯電話キャリア
        - NTT DoCoMo, au by KDDI, SoftBank
      - ユーザ数の多いWebメール
        - Gmail, Yahoo!, Hotmail, Facebook, AOL
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   解析処理(mailboxparser)
      - UNIX mbox, Maildir/, 複数指定可
      - STDIN(パイプで)
      - /etc/aliasesから起動
        - bounce: "|mailboxparser --log"
      - /etc/crontabから定時処理
      - 解析できなかったものだけ保存(2.7.7から)
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   解析処理(mailboxparser)
      UNIX mboxを引数に
      # bin/mailboxparser /var/mail/hoge

      2つのMaildir/を引数に
      $ bin/mailboxparser ~/Maildir/cur ~/Maildir/new
      $ cat /var/mail/fuga | bin/mailboxparser

      バウンスメール受信と解析・DB保存をリアルタイムに
      $ tail /etc/mail/aliases
      bounce: "| mailboxparser | databasectl --update"
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   解析結果(mailboxparser)
      JSON
      # bin/mailboxparser --format json /var/mail/piyo
      [ { "bounced": 2, "addresser":
      "bouncehammer@cubicroot.jp", "recipient": "nanashi-no-
      gombee@example.jp", "senderdomain": "cubicroot.jp",
      "destination": "example.jp", "reason": "userunknown",
      "hostgroup": "reserved", "provider": "reserved",
      "frequency": 1, "description": { "deliverystatus":
      "5.1.1", "diagnosticcode": "SMTP; 550 Invalid recipient:
      <nanashi-no-gombee@example.jp>", "smtpagent": "Sendmail",
      "timezoneoffset": "+0900" }, "token":
      "6b15f26a2069e07d3e09cf30a03ac12d" } ]
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   解析結果(mailboxparser)
      アスキーテーブル
      $ bin/mailboxparser --format asciitable ~/Maildir/cur
      +----+---------------------+-------------------------+-----------------------------------------------------------+---------+-------------+
      | # | Date                 | Addresser               | Recipient                                                 | Stat    | Reason      |
      +----+---------------------+-------------------------+-----------------------------------------------------------+---------+-------------+
      | 1 | 2008/09/18 17:54:04 | user1@example.jp         | domain-does-not-exist@example.gov                         |   5.1.2 | hostunknown |
      | 2 | 2009/04/28 08:17:47 | user2@example.jp         | recipient-address-does-not-exist@docomo.ne.jp             |   5.1.1 | userunknown |
      | 3 | 2009/03/05 06:28:12 | user3@example.jp         | recipient-mailbox-is-full@docomo.ne.jp                    |   5.2.2 | mailboxfull |
      | 4 | 2008/09/17 22:25:40 | user4@example.jp         | message-is-rejected-by-the-domain-fileters@docomo.ne.jp   |   5.2.0 | filtered    |
      | 5 | 2009/04/28 08:38:49 | user5@example.jp         | this-message-excees-limit-5000kb@docomo.ne.jp             |   5.3.4 | mesgtoobig |
      | 6 | 2008/12/08 11:04:57 | user@example.co.jp       | this-user-does-not-exist-on-the-server@ezweb.ne.jp        | 5.0.911 | userunknown |
      …
      +----+---------------------+-------------------------+-----------------------------------------------------------+---------+-------------+
      |    |                     |                         | Total                                                     |      37 |             |
      '----+---------------------+-------------------------+-----------------------------------------------------------+---------+-------------'
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   解析結果を利用する
      -   解析結果はYAML(標準)かJSON
      -   CSV出力にも対応(表計算ソフトで眺める)
      -   MTAで利用(access.dbとか)
      -   配信プログラムで利用(消し込みとか)
      -   サイトでバウンス照合
          - 「○月○日に送ったメールはエラーで…」
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   解析速度(mailboxparser)
      -   Linode (Xeon L5520(4) 2.27GHz)
      -   512MB Memory
      -   Ubuntu 10.4 LTS
      -   UNIX mbox = 約500通/秒
      -   Maildir/ = 約200通/秒
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  出力(datadumper)
      1年以内にバウンスした記録をYAMLで出力
      $ bin/datadumper --howrecent 1y --format yaml

      宛先不明でバウンスした記録をJSONで出力
      $ bin/datadumper --reason 'userunknown' --format json

      携帯電話宛のバウンス記録をCSVで出力
      $ bin/datadumper --hostgroup 'cellphone' --format csv

      Gmail宛のバウンス記録を出力
      $ bin/datadumper --destination gmail.com
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  出力結果の利用1
      配信プログラムいじれない OR MTAに処理させたい
      # cd /etc/mail

      # data dumper --format csv --reason 'userunknown' 
      > | cut -d, -f3 | grep '@' | sed 
      > -e 's/^/To:/g' -e 's/$/ DISCARD/g' > ./access

      # make map hash access.db < access
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  出力結果の利用2
      配信プログラムに解析結果を処理させる
      $ datadumper > /tmp/bounce.yaml
      ----------------------------------------------------------
      #!/usr/local/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 ){
          バウンスの記録に一致しないので配信する処理;
        }
      }
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




     管理画面(WebUI)の機能
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  ダッシュボード
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  検索結果
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   解析テスト
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




  日々の更新記録
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   English
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




                   HTTP-APIの機能
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   HTTP-API
      - サイト側でアドレスの状態を確認
      - ユーザのページに表示させる
        - 「登録されているメールアドレスは…」
        - 拒否設定解除を促す
      - JSONが読める言語ならなんでもOK
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   HTTP-APIで照合
      サイト側プログラムでバウンス照合
      #!/usr/local/bin/perl
      use JSON::Syck;
      use LWP::UserAgent;
      my $A = 'ユーザのメールアドレス';
      my $H = 'http://localhost/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 ){ 内容を取得; いろいろ処理; }
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




 オープンソース以外のMTA
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   MTAは多種多様
      - オープンソースのMTA
        - ソースコードからエラーのパターンを取得
      - フリーのWebメールサービス
        - サンプル収集・帰納的
      - それ以外のMTAは?
          - Exchange, Lotus, MailFoundry,
          - Amazon SES, SendGrid,…
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




   商用MTA・アプライアンス
      -   Exchange, Lotus Notes/Domino,
      -   MailFoundry, McAfee, m-FILTER,
      -   Amazon SES, SendGrid,… 14種類対応
      -   ライセンス販売
2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki




            11/14(Mon)
        bouncehammer 2.7.7
              Release

More Related Content

Viewers also liked

最近僕が使うようになったPerl 5.10以降の新しいやつ
最近僕が使うようになったPerl 5.10以降の新しいやつ最近僕が使うようになったPerl 5.10以降の新しいやつ
最近僕が使うようになったPerl 5.10以降の新しいやつazumakuniyuki 🐈
 
運用自動化のためのプログラミング言語の作り方
運用自動化のためのプログラミング言語の作り方運用自動化のためのプログラミング言語の作り方
運用自動化のためのプログラミング言語の作り方Kenta Hattori
 
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LTインフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LTDaisuke Ikeda
 
Mumford & Sons
Mumford & SonsMumford & Sons
Mumford & SonsZac
 
Snow Patrol
Snow PatrolSnow Patrol
Snow PatrolZac
 
Implementing the Affordable Care Act: Redesigning and Coordinating Eligibilit...
Implementing the Affordable Care Act: Redesigning and Coordinating Eligibilit...Implementing the Affordable Care Act: Redesigning and Coordinating Eligibilit...
Implementing the Affordable Care Act: Redesigning and Coordinating Eligibilit...NASHP HealthPolicy
 
ξάνθη
ξάνθηξάνθη
ξάνθηteo70
 
6 Social media trends 2013
6 Social media trends 20136 Social media trends 2013
6 Social media trends 2013Anna Oscarsson
 
Css verbal communication skills
Css   verbal communication skillsCss   verbal communication skills
Css verbal communication skillsShamusideen kadiri
 
Improving your self
Improving your selfImproving your self
Improving your selfsarsnet
 
Wisconsin’s Health Reform Models and Maximizing Enrollment Experience
Wisconsin’s Health Reform Models and Maximizing Enrollment Experience Wisconsin’s Health Reform Models and Maximizing Enrollment Experience
Wisconsin’s Health Reform Models and Maximizing Enrollment Experience NASHP HealthPolicy
 
Eligibility Enrollment Overview: What ACA Means for States
Eligibility Enrollment Overview: What ACA Means for StatesEligibility Enrollment Overview: What ACA Means for States
Eligibility Enrollment Overview: What ACA Means for StatesNASHP HealthPolicy
 
Marg darshanprofile -_brief
Marg darshanprofile -_briefMarg darshanprofile -_brief
Marg darshanprofile -_briefNitu Kumari
 
Seo on site - La stai facendo nel modo giusto? | GT Conference Torino 2013
Seo on site - La stai facendo nel modo giusto? | GT Conference Torino 2013Seo on site - La stai facendo nel modo giusto? | GT Conference Torino 2013
Seo on site - La stai facendo nel modo giusto? | GT Conference Torino 2013Andrea Cardinali
 
Rotarians Partnering to Help in Afghanistan
Rotarians Partnering to Help in AfghanistanRotarians Partnering to Help in Afghanistan
Rotarians Partnering to Help in AfghanistanRotary Zones 25/26
 
State to State Exchange on Health Insurance Exchanges
State to State Exchange on Health Insurance ExchangesState to State Exchange on Health Insurance Exchanges
State to State Exchange on Health Insurance ExchangesNASHP HealthPolicy
 

Viewers also liked (20)

最近僕が使うようになったPerl 5.10以降の新しいやつ
最近僕が使うようになったPerl 5.10以降の新しいやつ最近僕が使うようになったPerl 5.10以降の新しいやつ
最近僕が使うようになったPerl 5.10以降の新しいやつ
 
運用自動化のためのプログラミング言語の作り方
運用自動化のためのプログラミング言語の作り方運用自動化のためのプログラミング言語の作り方
運用自動化のためのプログラミング言語の作り方
 
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LTインフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
 
Lect05 slides
Lect05 slidesLect05 slides
Lect05 slides
 
Soul party
Soul partySoul party
Soul party
 
Mumford & Sons
Mumford & SonsMumford & Sons
Mumford & Sons
 
Snow Patrol
Snow PatrolSnow Patrol
Snow Patrol
 
Implementing the Affordable Care Act: Redesigning and Coordinating Eligibilit...
Implementing the Affordable Care Act: Redesigning and Coordinating Eligibilit...Implementing the Affordable Care Act: Redesigning and Coordinating Eligibilit...
Implementing the Affordable Care Act: Redesigning and Coordinating Eligibilit...
 
marchaucv
marchaucvmarchaucv
marchaucv
 
ξάνθη
ξάνθηξάνθη
ξάνθη
 
6 Social media trends 2013
6 Social media trends 20136 Social media trends 2013
6 Social media trends 2013
 
Css verbal communication skills
Css   verbal communication skillsCss   verbal communication skills
Css verbal communication skills
 
Taipei image
Taipei imageTaipei image
Taipei image
 
Improving your self
Improving your selfImproving your self
Improving your self
 
Wisconsin’s Health Reform Models and Maximizing Enrollment Experience
Wisconsin’s Health Reform Models and Maximizing Enrollment Experience Wisconsin’s Health Reform Models and Maximizing Enrollment Experience
Wisconsin’s Health Reform Models and Maximizing Enrollment Experience
 
Eligibility Enrollment Overview: What ACA Means for States
Eligibility Enrollment Overview: What ACA Means for StatesEligibility Enrollment Overview: What ACA Means for States
Eligibility Enrollment Overview: What ACA Means for States
 
Marg darshanprofile -_brief
Marg darshanprofile -_briefMarg darshanprofile -_brief
Marg darshanprofile -_brief
 
Seo on site - La stai facendo nel modo giusto? | GT Conference Torino 2013
Seo on site - La stai facendo nel modo giusto? | GT Conference Torino 2013Seo on site - La stai facendo nel modo giusto? | GT Conference Torino 2013
Seo on site - La stai facendo nel modo giusto? | GT Conference Torino 2013
 
Rotarians Partnering to Help in Afghanistan
Rotarians Partnering to Help in AfghanistanRotarians Partnering to Help in Afghanistan
Rotarians Partnering to Help in Afghanistan
 
State to State Exchange on Health Insurance Exchanges
State to State Exchange on Health Insurance ExchangesState to State Exchange on Health Insurance Exchanges
State to State Exchange on Health Insurance Exchanges
 

More from azumakuniyuki 🐈

YAPC::Nagoya::Tiny 2019 | Makefile生活
YAPC::Nagoya::Tiny 2019 | Makefile生活YAPC::Nagoya::Tiny 2019 | Makefile生活
YAPC::Nagoya::Tiny 2019 | Makefile生活azumakuniyuki 🐈
 
NSEG勉強会(101)LT: 僕と長野県
NSEG勉強会(101)LT: 僕と長野県NSEG勉強会(101)LT: 僕と長野県
NSEG勉強会(101)LT: 僕と長野県azumakuniyuki 🐈
 
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4azumakuniyuki 🐈
 
SendGridのない世界 | SendGrid Night in Osaka #2
SendGridのない世界 | SendGrid Night in Osaka #2SendGridのない世界 | SendGrid Night in Osaka #2
SendGridのない世界 | SendGrid Night in Osaka #2azumakuniyuki 🐈
 
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 OsakaHokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osakaazumakuniyuki 🐈
 
メールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKA
メールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKAメールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKA
メールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKAazumakuniyuki 🐈
 
僕と北海道とPerl、それとMakefileも。
僕と北海道とPerl、それとMakefileも。僕と北海道とPerl、それとMakefileも。
僕と北海道とPerl、それとMakefileも。azumakuniyuki 🐈
 
PerlモジュールをRubyに移植する時に落ちた穴々
PerlモジュールをRubyに移植する時に落ちた穴々PerlモジュールをRubyに移植する時に落ちた穴々
PerlモジュールをRubyに移植する時に落ちた穴々azumakuniyuki 🐈
 
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性azumakuniyuki 🐈
 
Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中azumakuniyuki 🐈
 
2013 11-30-mailqueue-monitoring
2013 11-30-mailqueue-monitoring2013 11-30-mailqueue-monitoring
2013 11-30-mailqueue-monitoringazumakuniyuki 🐈
 
実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013azumakuniyuki 🐈
 
JSONでメール送信(Haineko) / KOF2013
JSONでメール送信(Haineko) / KOF2013JSONでメール送信(Haineko) / KOF2013
JSONでメール送信(Haineko) / KOF2013azumakuniyuki 🐈
 
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2azumakuniyuki 🐈
 
猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny
猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny
猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tinyazumakuniyuki 🐈
 
Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5azumakuniyuki 🐈
 
Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」azumakuniyuki 🐈
 

More from azumakuniyuki 🐈 (20)

YAPC::Nagoya::Tiny 2019 | Makefile生活
YAPC::Nagoya::Tiny 2019 | Makefile生活YAPC::Nagoya::Tiny 2019 | Makefile生活
YAPC::Nagoya::Tiny 2019 | Makefile生活
 
NSEG勉強会(101)LT: 僕と長野県
NSEG勉強会(101)LT: 僕と長野県NSEG勉強会(101)LT: 僕と長野県
NSEG勉強会(101)LT: 僕と長野県
 
Email is Slack
Email is SlackEmail is Slack
Email is Slack
 
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
[スパム報告]ボタンを押すとどうなるのか | Hosting Casual Talks #4
 
SendGridのない世界 | SendGrid Night in Osaka #2
SendGridのない世界 | SendGrid Night in Osaka #2SendGridのない世界 | SendGrid Night in Osaka #2
SendGridのない世界 | SendGrid Night in Osaka #2
 
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 OsakaHokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
Hokkaido.pm#13参加報告 | YAPC::Kansai 2017 Osaka
 
メールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKA
メールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKAメールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKA
メールフォームからメールを送る近代的な方法 | YAPC::Kansai 2017 OSAKA
 
僕と北海道とPerl、それとMakefileも。
僕と北海道とPerl、それとMakefileも。僕と北海道とPerl、それとMakefileも。
僕と北海道とPerl、それとMakefileも。
 
PerlモジュールをRubyに移植する時に落ちた穴々
PerlモジュールをRubyに移植する時に落ちた穴々PerlモジュールをRubyに移植する時に落ちた穴々
PerlモジュールをRubyに移植する時に落ちた穴々
 
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
 
Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中Hachioji.pm #40 次のbounceHammer開発中
Hachioji.pm #40 次のbounceHammer開発中
 
2013 11-30-mailqueue-monitoring
2013 11-30-mailqueue-monitoring2013 11-30-mailqueue-monitoring
2013 11-30-mailqueue-monitoring
 
Perlの書籍紹介/KOF2013
Perlの書籍紹介/KOF2013Perlの書籍紹介/KOF2013
Perlの書籍紹介/KOF2013
 
実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013実践的bounceHammer / KOF2013
実践的bounceHammer / KOF2013
 
JSONでメール送信(Haineko) / KOF2013
JSONでメール送信(Haineko) / KOF2013JSONでメール送信(Haineko) / KOF2013
JSONでメール送信(Haineko) / KOF2013
 
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
 
猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny
猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny
猫とPerl〜応用編1/YAPC Asia Tokyo 2013 LT-THON::Tiny
 
Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5
 
Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」Kansai.pm #15 LT資料「猫とPerl」
Kansai.pm #15 LT資料「猫とPerl」
 
Namba.pm #0 LT資料
Namba.pm #0 LT資料Namba.pm #0 LT資料
Namba.pm #0 LT資料
 

KOF 2011 bounceHammerによるバウンスメール解析の技術

  • 1. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki bounceHammerによる バウンスメール解析の技術 Cubicroot Co. Ltd. @azumakuniyuki
  • 2. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 自己紹介
  • 3. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 自己紹介 - Azuma, Kuniyuki - @azumakuniyuki - サーバ管理者(*BSD, Linux, 昔はSolarisも) - プログラマ(Perl,/bin/sh, たまにC,R) - 京都市中京区
  • 4. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki サーバ管理者 - FreeBSD(98) → FreeBSD 4.9→ OpenBSD - NetBSDは未経験 - 最近はLinuxが殆ど - CentOS, Fedora, RHEL, Ubuntu
  • 5. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki メールサーバ管理者 - Sendmail → Postfix → Sendmail(再) - /etc/sendmail.cf - CF(WIDE), cf, m4 - たまにルールセットを書く - 柔軟な処理ができる
  • 6. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki プログラマ - Perl (2008年秋からモダンPerlを勉強) - /bin/sh (サーバでの処理は殆ど) - C(学生時代少し) ←殆ど知らない - Java(JDK 1.0, 1.1の頃) - PHP(PHP/FIの頃, 2.0, 3.0) - R(最近、統計処理のため)
  • 7. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki Perl - /bin/shで書きにくい場合はPerl - 2008年秋からモダンPerlを勉強 - モダンPerl入門+CPANモジュールガイド - YAPC::Asia - Kansai.pm(→11/26@京都)
  • 8. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki bounceHammer ?
  • 9. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki bounceHammer - ばうんすはんまー - バウンスメール解析専用 - 配信システムではない - コマンドラインツール+WebUI - Made by Perl, OpenSource! - 2010年春に公開
  • 10. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki バウンスメール ?
  • 11. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki バウンスメール - エラーで返ってきたメール - 中身はだいたい英語 - 稀に日本語で書いてる - リターンメールとか不達メール
  • 12. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki From: - MAILER-DAEMON - Mail Delivery Subsystem - Mail Administrator - Postmaster@...
  • 13. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki Subject: - Returned mail: see transcript for … - failure notice - Undelivered Mail Returned to … - Delivery Failure - 配信エラー
  • 14. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki バウンスした理由 - 宛先不明(User Unknown) - メールボックスいっぱい(Mailbox full) - ドメイン指定拒否(携帯電話) - セキュリティ的な理由(スパム扱い, Virus) - DNS的な理由(逆引きない, SPFの不備) - 不明なホスト(サービス終了, ドメイン違う) - MTA管理者が怒ってる(行儀悪い配信)
  • 15. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki メール本文 - 英語で書いてる - エラーコードがあればよい - どれも似ている
  • 16. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 例) @docomo.ne.jp - Sendmail経由でDoCoMoに送った場合 - 本文はほとんど同じ 宛先不明 ドメイン指定拒否 ← エラーコード(D.S.N.)が少し違う → (reason: 550 Unknown user ****@docomo.ne.jp)
  • 17. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 目視で見分ける
  • 18. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki バウンスメールの処理
  • 19. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki バウンス処理は - 確実にやるべき - 正確にやるべき - 配信数が少なくてもやるべき - メール1通でも送るならやった方がいい
  • 20. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki バウンス処理を放置すると - 携帯宛はブロックされる - 遅延が発生する - 配信時間がかかる - メールサーバの負荷上昇 - 有効配信数がわからない
  • 21. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 放置した事例1 - 携帯電話宛の宛先不明が多発 - 消し込み処理やらずに継続配信 - SMTP接続が拒否される(一時的) - 大規模な遅延が発生 - メールサーバの負荷上昇 - 別のIPアドレスでMTA構築(コスト↑)
  • 22. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 放置した事例2 - 宛先不明やMailbox Fullが多発 - 消し込み処理やらずに継続配信 - SMTP接続が拒否される(128IPs!) - DNSBLに登録された - 解除してもらうまで時間がかかる - 別のIPアドレスでMTA構築(コスト↑)
  • 23. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki バウンス処理を実装する - たいへん - パターンが多い ← 正規表現たくさん書く - MTA毎に違う(Sendmail,Postfix,qmail,..) - 宛先毎に違う(Gmail,Yahoo!,Hotmail,…) - エラー毎に違う - 正しく解析すべき
  • 24. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 雑に実装した事例 - 簡単な一枚スクリプトで実装 - エラーメールが返ってきたら無条件で削除 - 宛先不明ならそれでもOK - Mailbox Fullや一時エラーでも削除した - ユーザからクレーム - 「急にメールが来なくなった」
  • 25. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki バウンス処理は - 確実にやるべき - 正確にやるべき - 配信数が少なくてもやるべき - メール1通でも送るならやった方がいい
  • 26. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki
  • 27. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki bounceHammer - バウンスメールの解析専用 - サーバで動く - コマンドラインツール - WebUI(ブラウザベースの管理画面) - HTTP-API(読み取り専用) - http://example.bouncehammer.jp/
  • 28. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 使う利点 - バウンスした理由が正確にわかる - バウンス記録を構造化して保存できる - ブラウザベースの管理画面でアドレス管理 - メール配信の合理化と健全化 - 自前でバウンス処理を実装しなくてよい
  • 29. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki できること - バウンスメールの解析 - エラーの理由を特定する - 宛先不明・拒否・容量超過(全19種類) - 宛先分類(携帯/スマホ/PC/Webメール) - YAML/JSON/CSVで結果を出力 - DB(MySQL,PostgreSQL,SQLite)に保存
  • 30. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 役立つ場面 - オープンソースのMTAで配信している - Sendmail, Postfix, qmail, Exim, Courier - バウンス処理してない OR 緩い - あまり正確にやっていない - そこそこたくさん配信している - 配信数 > 100/Day
  • 31. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 役立つ人々 - コンテンツプロバイダ - 通知でメールが飛ぶ - メールマガジンスタンド - メール配信があるところ全部 - まだバウンス処理していない人
  • 32. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki bounceHammerのユーザ - 携帯向けポータルサイト(含BBS) - SNS(通知関係でメールが飛ぶ) - 転職サイト - オンラインショップ・通販 - レンタルサーバ - 海外も少し
  • 33. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki @type様 - 国内最大級の転職サイト - キャリアデザインセンター様 - @type, 女の転職@type - 150万Users(2010冬) - 配信数1200万通/月(2010冬) - 私の年収...
  • 34. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki コマンドツールの機能
  • 35. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 動作環境 - Perl 5.8.8以上といくつかのモジュール - *BSD, Linux, MacOS X - MySQL, PostgreSQL, SQLite(保存用) - Apache(WebUI・管理画面) - IE以外のブラウザ(WebUI・管理画面)
  • 36. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 対応MTA - オープンソースのMTA - Sendmail, Postfix, qmail, Exim, Courier - 将来対応→OpenSMTPD, Apache James - 国内携帯電話キャリア - NTT DoCoMo, au by KDDI, SoftBank - ユーザ数の多いWebメール - Gmail, Yahoo!, Hotmail, Facebook, AOL
  • 37. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 解析処理(mailboxparser) - UNIX mbox, Maildir/, 複数指定可 - STDIN(パイプで) - /etc/aliasesから起動 - bounce: "|mailboxparser --log" - /etc/crontabから定時処理 - 解析できなかったものだけ保存(2.7.7から)
  • 38. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 解析処理(mailboxparser) UNIX mboxを引数に # bin/mailboxparser /var/mail/hoge 2つのMaildir/を引数に $ bin/mailboxparser ~/Maildir/cur ~/Maildir/new $ cat /var/mail/fuga | bin/mailboxparser バウンスメール受信と解析・DB保存をリアルタイムに $ tail /etc/mail/aliases bounce: "| mailboxparser | databasectl --update"
  • 39. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 解析結果(mailboxparser) JSON # bin/mailboxparser --format json /var/mail/piyo [ { "bounced": 2, "addresser": "bouncehammer@cubicroot.jp", "recipient": "nanashi-no- gombee@example.jp", "senderdomain": "cubicroot.jp", "destination": "example.jp", "reason": "userunknown", "hostgroup": "reserved", "provider": "reserved", "frequency": 1, "description": { "deliverystatus": "5.1.1", "diagnosticcode": "SMTP; 550 Invalid recipient: <nanashi-no-gombee@example.jp>", "smtpagent": "Sendmail", "timezoneoffset": "+0900" }, "token": "6b15f26a2069e07d3e09cf30a03ac12d" } ]
  • 40. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 解析結果(mailboxparser) アスキーテーブル $ bin/mailboxparser --format asciitable ~/Maildir/cur +----+---------------------+-------------------------+-----------------------------------------------------------+---------+-------------+ | # | Date | Addresser | Recipient | Stat | Reason | +----+---------------------+-------------------------+-----------------------------------------------------------+---------+-------------+ | 1 | 2008/09/18 17:54:04 | user1@example.jp | domain-does-not-exist@example.gov | 5.1.2 | hostunknown | | 2 | 2009/04/28 08:17:47 | user2@example.jp | recipient-address-does-not-exist@docomo.ne.jp | 5.1.1 | userunknown | | 3 | 2009/03/05 06:28:12 | user3@example.jp | recipient-mailbox-is-full@docomo.ne.jp | 5.2.2 | mailboxfull | | 4 | 2008/09/17 22:25:40 | user4@example.jp | message-is-rejected-by-the-domain-fileters@docomo.ne.jp | 5.2.0 | filtered | | 5 | 2009/04/28 08:38:49 | user5@example.jp | this-message-excees-limit-5000kb@docomo.ne.jp | 5.3.4 | mesgtoobig | | 6 | 2008/12/08 11:04:57 | user@example.co.jp | this-user-does-not-exist-on-the-server@ezweb.ne.jp | 5.0.911 | userunknown | … +----+---------------------+-------------------------+-----------------------------------------------------------+---------+-------------+ | | | | Total | 37 | | '----+---------------------+-------------------------+-----------------------------------------------------------+---------+-------------'
  • 41. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 解析結果を利用する - 解析結果はYAML(標準)かJSON - CSV出力にも対応(表計算ソフトで眺める) - MTAで利用(access.dbとか) - 配信プログラムで利用(消し込みとか) - サイトでバウンス照合 - 「○月○日に送ったメールはエラーで…」
  • 42. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 解析速度(mailboxparser) - Linode (Xeon L5520(4) 2.27GHz) - 512MB Memory - Ubuntu 10.4 LTS - UNIX mbox = 約500通/秒 - Maildir/ = 約200通/秒
  • 43. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 出力(datadumper) 1年以内にバウンスした記録をYAMLで出力 $ bin/datadumper --howrecent 1y --format yaml 宛先不明でバウンスした記録をJSONで出力 $ bin/datadumper --reason 'userunknown' --format json 携帯電話宛のバウンス記録をCSVで出力 $ bin/datadumper --hostgroup 'cellphone' --format csv Gmail宛のバウンス記録を出力 $ bin/datadumper --destination gmail.com
  • 44. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 出力結果の利用1 配信プログラムいじれない OR MTAに処理させたい # cd /etc/mail # data dumper --format csv --reason 'userunknown' > | cut -d, -f3 | grep '@' | sed > -e 's/^/To:/g' -e 's/$/ DISCARD/g' > ./access # make map hash access.db < access
  • 45. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 出力結果の利用2 配信プログラムに解析結果を処理させる $ datadumper > /tmp/bounce.yaml ---------------------------------------------------------- #!/usr/local/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 ){ バウンスの記録に一致しないので配信する処理; } }
  • 46. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 管理画面(WebUI)の機能
  • 47. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki ダッシュボード
  • 48. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 検索結果
  • 49. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 解析テスト
  • 50. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 日々の更新記録
  • 51. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki English
  • 52. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki HTTP-APIの機能
  • 53. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki HTTP-API - サイト側でアドレスの状態を確認 - ユーザのページに表示させる - 「登録されているメールアドレスは…」 - 拒否設定解除を促す - JSONが読める言語ならなんでもOK
  • 54. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki HTTP-APIで照合 サイト側プログラムでバウンス照合 #!/usr/local/bin/perl use JSON::Syck; use LWP::UserAgent; my $A = 'ユーザのメールアドレス'; my $H = 'http://localhost/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 ){ 内容を取得; いろいろ処理; }
  • 55. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki オープンソース以外のMTA
  • 56. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki MTAは多種多様 - オープンソースのMTA - ソースコードからエラーのパターンを取得 - フリーのWebメールサービス - サンプル収集・帰納的 - それ以外のMTAは? - Exchange, Lotus, MailFoundry, - Amazon SES, SendGrid,…
  • 57. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki
  • 58. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 商用MTA・アプライアンス - Exchange, Lotus Notes/Domino, - MailFoundry, McAfee, m-FILTER, - Amazon SES, SendGrid,… 14種類対応 - ライセンス販売
  • 59. 2011/11/12(Sat) / KANSAI OPEN SOURCE 2011/ bounceHammerによるバウンスメール解析の技術 / Cubicroot Co. Ltd. @azumakuniyuki 11/14(Mon) bouncehammer 2.7.7 Release