Open8

メール送信サービスを選ぶときに考えたこと

Yusuke KawabataYusuke Kawabata

Cloudflareのメール送信機能が開始したんだけど、ちょうど先週と今週メール配信サービスを検討しまくってて、今どきのメール配信機能について言語化していく

Yusuke KawabataYusuke Kawabata

まず、メールを送信する部分について。

  • to, cc, from, subject, body を渡すと、宛先のメールにアドレスにメールを届ける機能
    これはどこのサービスでもありますし、なんならローカルマシンからでも理論上は送れます。

しかし、送れるだけでは届かないのです。現在は大量のスパムメールと戦った歴史がありますので、基本的な処理を行う必要があります。

  • DKIM、DMARCの設定
  • SPFの設定(任意)

このメールの送信者は、なりすましメール対策をしてますよ~ということを、DNSレコードで指定しつつ、そのヘッダを付けたメールを送る機能が必要です。

Yusuke KawabataYusuke Kawabata

次に、IPアドレス単位でのレピュテーションチューニングです。Gmailほか大手のサービスでは、送信元IPアドレス単位で不審な送信元かどうかをチェックしています。不審な送信先とはつまり、存在しない宛先に送りまくってくるIPはまるっとブロックしちゃおうという機能ですね。

そのため、各社はメールを送信しようとすると、バウンス管理というものを行います。届かなかったメールのデータをすべてチェックして、届かなったアドレスには次回以降メールを送信禁止にするという機能です。これによりIPアドレスの評価を守ります。ほかにもドメイン単位での通数制限などもあるようなので、そのあたりは大手配信スタンドの腕の見せ所のようです。

また、後述するワンクリック解除に関しても重要な要素となります。

送るメールの種類によりますが、「会員登録完了のお知らせ」のような単発の連絡はシステムメールやトランザクションメール、いわゆるメルマガのことをキャンペーンメールと呼ぶことが多いです。ここから先はキャンペーンメールの話になります。

Yusuke KawabataYusuke Kawabata

さて、つぎは「誰にどんな」メールを送るかという部分です。これは以下のような機能で実現できます。おそらく今回のCloudflareのやつにはついていない機能かもしれません。

一般的にメルマガというものは全員に送ったりすると思うのですが、受け取りたくないな~という人がいたり、有料プランのひとだけ送りたいとかってありますよね。それらをどこかで管理する必要があります。

機能としては

  • 送信リスト管理機能
  • セグメント(配信条件)作成機能

といったものになるかと思います。CSVとかスプシインポートとかで、送りたいメアドや会員種別をインポートして管理できる機能とかのことです。

また、送る内容も事前に登録しておくことで一気に大量送信が可能になります。メール本文登録機能、HTMLメールエディタ、テンプレート機能なんかがありますね。

Yusuke KawabataYusuke Kawabata

まだまだあります。配信先管理でメアド一覧の管理ができるので、メールアドレス単位で様々なデータを管理できます。開かれているか?クリックされているか?という計測機能がついてくるケースがあります。

  • 開封管理
  • クリックカウント
  • 配信停止管理

本文編集機能に合わせてついてくることが多いです。開封カウントは、HTMLメールの中に画像を埋め込んでそのアクセスをカウントする方式、クリックカウントは転送URL、配信停止管理はフッターに「配信停止」のリンクが自動挿入されるといった機能があります。(およびメールヘッダに追加)

この、配信停止が1クリックでできること、というのは米国を中心にいくつかの国で法的に定められていますので、グローバルサービスを使うとデフォルトで適用されます。

Yusuke KawabataYusuke Kawabata

さて、ここまで進んだら、もっとマーケティング的な機能も欲しいですよね?だんだんメール送信サービスからMarketing Automation,MAの領域に入っていきますが、実際のところこれらの境目はあいまいです。

自動送信メールについて

たとえば、新規会員登録したら、初日は使い方、2日目は活用事例、3日は有料プランのご案内ということができると思います。そのような「トリガー」をもとに「複数回」メールを送る機能が自動メール送信機能です。ステップメールなどとも呼ばれます。

さらに、開封などをトリガーに条件分岐することもできます。2日目までにメールが未開封の場合は有料プランのご案内ではなく別のサポート記事を送るといったものです。

トリガーの種類にもさまざまあり、メールの域を超えてWeb上にビーコンを張ることにより、メールをクリックした後、価格ページを回遊した顧客には価格に関するメールを送るといった高度なこともできる場合があります。

Yusuke KawabataYusuke Kawabata

これらの機能を自分たちがどこまで必要なのか?たとえば5000通くらいまででしたら自前のサーバから送信機能だけのシンプルなサービス経由で送信してもそこまで問題ありません、しかし、それらを超えてくると配信先の管理や効果測定などやりたいことがたくさん出てきますので、価格をみながら適したサービスを選びましょう。

だいたい~月1万通までは無料か月1万円以下のサービスが多いです。10万通ですとだいたい月5万円前後のサービスが多いです。50万通だと月30万円くらいのサービスが多い印象です。通数が多くなると、開封カウントで用意するサーバも大変ですし、高度なトリガーが連動するときの負荷やそもそも送るだけでも大変という問題を抱えてるので、自前で扱うのは難しくなってくるでしょう。

これらの観点で、みなさんのメール送信サービス選定のお役に立てるとうれしいです!

Yusuke KawabataYusuke Kawabata

OSSでの選択肢

メール送信サービスには、けっこうOSSが充実している。これらを使ってセルフホストすることも可能です。気になったものは以下の通り

  1. SendPortal https://sendportal.io/
  2. Dittofeed https://www.dittofeed.com/
  3. ListMonk https://listmonk.app/
    ほかにもMauticとかあるけど高機能すぎてちょっとむずかしかった。

まずはSendPortalはLaravel製のメルマガツールで、Amazon SESやSendgridなどをバックエンドに使って自前の顧客管理でメルマガを送ることができる。Laravelでアプリ構築している人は、artisanコマンドで自分のアプリに組み込んで一体化させることも可能。トリガーメールには未対応なのと、Laravelのqueueを使って送るので数十万通とかは厳しいかもしれない。

DittofeedはNodejsベースで、どちらかというとトリガーメール押しのプロダクトでメール以外にも対応してるみたい。ぼくはDBをマネージドでそろえたいので、Clickhouseを使うところで挫折したんだけど高機能な割にクリーンでよさそうだった。

ListMonkはgoで書かれたハイパフォーマンス送信コントローラーで、時間単位の送信通数コントロールとかができるから数百万通オーダーの大量送信にも対応できるみたい。シンプルなキャンペーン機能しかないので、送信エンジンとしてだけ活用できないかなって思った。