Inbox Zero
大規模メール配信をやっていたことがある。レガシーの極みだが、思い入れがある。
最初に触ったMTAはsendmailだった。sendmail.cfの呪文のような設定ファイルを、まともに読める人間は少なかった。毎週のようにセキュリティバグが出て、界隈ではネタのようになっていた。
qmailが出てきたとき、あのシンプルさに感動した。djbの設計思想は潔い。ラリー・ウォールと並んで、自分の中では尊敬すべきエンジニアだ。セキュリティを最優先にして、機能を削ぎ落とす。ただライセンスが独特だったし、実用的な機能の多くが野良パッチで提供されていて、どのパッチを当てるかが職人芸だった。Postfixが出てきてようやく、設定が人間に読めるMTAが手に入った。
大規模配信の世界はメールの仕様とは別の戦いだった。ちなみにスパムではない。上場企業の子会社で、オプトインの会員向けに送っていた。それでも携帯キャリアにはスパム扱いされる。
携帯キャリアのメールの挙動は独特だった。存在しないアドレスに送ると、普通ならバウンスが返る。ところが一部のキャリアは何も返さない。UDPのように静かに吸い込む。送った側からは届いたのか消えたのか判別できない。携帯キャリアによるブロックも厄介だった。同じIPから短時間に大量に送ると、IP単位でブロックされる。解除の基準も公開されていない。
対策はIPを並べることだった。複数のIPアドレスから分散して送り、1IPあたりの送信量を下げてブロックリスクを減らす。力技だが、当時はそれしかなかった。
最終的にはもっと力技に進化した。出たばかりのEC2をAPI経由で自動spawnして、コントローラーと送信ノードに分けて配信する仕組みを作った。送信量に応じて送信ノードが増減する。オートスケーリング自体はあったが、Webアクセス起点の仕組みだったのでメール配信には合わなかった。自前で組むしかなかった。
いまの大規模メール配信は様変わりした。SendGridのようなサービスに任せるのが主流で、自前でMTAを立てる時代ではなくなった。DMARC、SPF、DKIMといった送信ドメイン認証が標準になり、判定の軸がIPアドレスからドメインの信頼性に移った。IPを並べて力技で送る時代は終わった。ドメインの送信履歴と評判が、届くか届かないかを決める。
ちなみに、あのEC2で組んだ配信システムの内部プロダクト名がsuzumeだった。時を超えて、いまはまったく違うジャンルのOSSとしてその名前を拝借している。日本語を取り扱うという一点では共通しているが、メール配信の面影はない。
なお当時の同僚が、データ投入バッチにsuzume-feederと名前をつけていた。雀の餌付け。あのネーミングセンスはいまだにうらやましい。