SES, SendGrid, Mandrill, Mailgunの採用を見送った話

先日観にいったお芝居「朝日のような夕日をつれて2014」では、(ネタバレになってしまいますが、)Oculus Rift とそのアプリケーション企画がばんばん登場していたので、思わずニヤリとしてしまいました。9月には福岡と再度東京での公演もあるそうですね。イット業界の方も楽しめる内容のような気がします。

さて、今回は、Cyta.jp でのメール配信についてのお話です。Cyta.jp では、事務局/コーチ/受講生との連絡手段のひとつにメールを使っています。顔を合わせたことが無いコーチと受講生の間の連絡を取り持つことは、Cyta.jp の重要なプラットフォーム機能のひとつです。受講生数やレッスン数の増加に伴いメールの配信数も増加しているため、メールの遅配や配信失敗を最小限にできるよう、システム運用担当者は目を光らせています。

Cyta.jp では、最近、このメール配信サービスの可用性と送達精度をより高めるため、外部サービス利用の検討をおこないました。が、最終的に自社でのメールサーバ運営に落ち着きました。今回はこの判断に至るまでの顛末をご紹介します。

Cyta.jp での外部メール配信サービスの検討にあたって、導入の条件は以下のようなものでした。

1) (HTTPなどではなく) SMTP で利用できること
2) 国内携帯キャリアに問題なく配送できること
3) 配送失敗による Bounce が、配送しようとしたメール単位で確認できること
4) 配送できないメールアドレスの検出とクリーニングができること
5) 予算内で利用できること

パッと見、最近のメール配信サービスは、上記の (1)〜(4) はいずれも満たしているように見えたので、まずは費用面だけ気にしつつ、評判や導入事例なども参考に、いくつか候補をピックアップしてみました。候補にあがったのは以下のサービスたちです。

a) Amazon SES
b) SendGrid
c) Mandrill
d) Mailgun

費用面の見積りでは http://atskimura.hatenablog.com/entry/2014/02/13/084051 こちらの記事を参考にしました(ありがとうございます)。

なお、結論は冒頭書いたとおり、これらのサービスはいずれも Cyta.jp の要件にフィットしなかったため、導入見送りとなりました。以下、「どこがフィットしなかったのか」を書きますが、個別のサービスをdisる意図はまったくありませんし、その後サービス内容が変わっているかもしれませんし、また、私が勘違いしているだけの可能性もありますので、その辺りはご了承いただいた上で読み進めていただきたく思います。

a) Amazon SES

とにかく安い。利用開始も簡単だし、管理画面も AWS のダッシュボードからそのまま行けて楽ちん。AWS の担当者さん曰く「国内携帯キャリア向けの配送は推奨しない」とのことでしたが、SPF と DKIM 設定さえしておけば携帯向けも問題なさそうでした(実験中にたまたま良い IP が使えていただけかもしれませんが)。

しかし、残念ながら、メールアドレスのクリーニングに関する機能がフィットしませんでした。SES では Blacklist 入りしたメールアドレスを、専用の管理画面で操作しない限り List から外せなくなってしまうんですね。

携帯メールを使っているお客様は、自身で意識せずとも携帯キャリアが提供する迷惑メールフィルタを使っていることが多いため、配送失敗時には弊社のサポートスタッフが、電話でサポートしながら迷惑メール設定変更(着信許可ドメイン指定)などの案内をしています。キャリア側の迷惑メールフィルタ設定を変えることで、メールは配送できるようになるわけですが、SES 側で Blacklist に入れられてしまうと、こちらの操作までサポートスタッフに要求しなくてはなりません。あの英語UIだけの管理画面をサポートスタッフに使ってもらうのはハードルが高く、Blacklist 解除のための API も提供されていないようでしたので、SES の導入は断念することになりました。

b) SendGrid

SendGrid は、heroku addon でも利用できますし、以前よりよく耳にしていたサービスです。昨年後半から本格的に国内展開を開始された影響か、同業他社さんでの導入事例も増えてきた気がします。Bounce や Spam Report への API も充実しており、また、クライアントライブラリも各種言語用意されているため、さすがは古参のサービスだな、という印象でした。

が、残念ながら、Bounce を個別のメールに対して取得することができませんでした(「どのメールアドレスに対するメールが届かなかった」は API で取得できるのですが..)。弊社ではコーチや受講生に対して「どのメールが届かなかったのか」をできるだけ正しく把握し、緊急性の高いものは再送したり電話連絡したりといった対応をとっているため、ここがフィットしませんでした。

c) Mandrill

Mandrill は、MailChimp のメール配信プラットフォームです。もともと弊社では、キャンペーンなど一部のメール配信に MailChimp を使っていたこともあり、馴染みのあるサービスです。実績もさることながら、費用面でのメリットがかなり高く、サービスをピックアップした時点では最有力候補でした。

しかし、残念ながら Mandrill も Bounce をメール毎に取得することができませんでした。Sendgrid 同様の仕様であったため、むしろ、弊社側のサービス導入の要件から見直したほうがいいのではないか、という意見も社内から出ましたが、この段階で社内オペレーションの変更を伴う意思決定はできない、という判断をしました。大抵こういった基盤サービスの移行というのは、何かと想定していなかった課題が発生するため、今回の移行で無用に混乱を増やすことは避けたかった、という考えもあります。

d) Mailgun

Mailgun は、社外の方とコミュニケーションしている某チャットルームで教えてもらいました。Rackspace が運営。GitHub も導入している MTA で、シンプルで安い、という印象です。API も必要最低限揃っており、個別の Bounce もとれます。ダッシュボードもシンプルでわかりやすい。検証した結果、携帯向けのメールも問題なく配送できたので、機能要件的には問題なさそうに見えました。実は、クレジットカード登録までおこない、数日の間、移行して並行運用していました。

しかしながら、数日運用していたところ、一部のドメインへのメール配送が拒否されていることが発覚しました。相手方からの SMTP 応答を読んでいくと、どうやら、弊社が使うサーバに割り当てられていた IP アドレスが第三者が管理しているブラックリストに入っていたようです。

さっそく、Mailgun のサポートに「ブラックリスト入りしてるんだけど、どうすればいいの?」と問い合わせしてみました。すると2日ほど経過してから返信がきました。「ああ、申し訳ない。ブラックリストは外してもらうように申請しておいたよ。あと、あなたのとこには別の IP 割り当てといたよ。もし続くようなら dedicated IP も使ってみてね、追加料金かかるけど」とのこと。

この対応自体は、至極真っ当なものだと思うのですが.. dedicated IP の追加料金は、残念ながら費用面で折り合いがつかず。かといって、Blacklist に入ったら都度 2 日ほど対応を待つというのも難しいため、Mailgun への完全移行を断念することにしました。

というわけで

以上のような顛末で、結局、Cyta.jp のメール配信環境は、オンプレミス環境で Postfix を並べる、という構成に落ち着きました。運用管理のコストはかかってしまうのですが、メールが Cyta.jp の非常に重要なコミュニケーションチャネルである以上、「何かあった際はできるだけ自分たちで対応できるようにしておくべき」というスタンスをとったことになります。

何かと不安ではありましたが、少し前に JAWS-UG の勉強会に行ったところ、ビズリーチの竹内さんが AWS で Postfix を並べて月に1億通配送しているという話をしていたので、「うちはマダマダ規模小さいしがんばらないとなー」と腹をくくることにしました(今のところは、ですよ)。

最近は、様々な分野で外部サービスが利用できますので、運用コストを下げるという大義で外部への移行を推し進めたくなってしまうのですが、なかなかそう簡単にはいかないですね。とはいえ、今回の比較検討で、自社のサービスでは、今どこに価値があるのか、何を大事にしているのか、を整理することができたので、結果オーライです。勉強になりました。

それでは、また。