Cloudflare Email Routing + Resend で独自ドメインのメール送受信を無料で実現する

背景

サービスごとのメールアドレスを独自ドメインで使い分けたくなりました。エイリアスを切れば漏洩元の追跡やスパム対策がしやすく、差出人だけ masahiro@kusumoto.app のようにしつつ、普段の Gmail 画面はそのまま使いたい。

Cloudflare Email Routing と Resend を組み合わせれば無料で実現できたので、手順をまとめます。

全体アーキテクチャ

役割はシンプルに分かれています。

受信は Cloudflare Email Routing がメールを受け取って Gmail アドレスへ転送します。送信は Gmail の SMTP 設定に Resend を登録し、独自ドメインのアドレスを差出人にします。UI は普段通りの Gmail 画面をそのまま使います。

アーキテクチャ図

DNS は Cloudflare で管理しているので、MX レコード・SPF・DKIM の設定もすべて同じダッシュボードでまとめて完結します。

Cloudflare Email Routing のセットアップ

MX レコードの設定

Cloudflare ダッシュボードで対象ドメインを開き、「Email」→「Email Routing」へ進みます。Email Routing を有効化すると、MX レコードが自動で追加されます。手動で DNS を触る必要はありません。

宛先アドレスの追加と認証

「Routing Rules」→「Destination addresses」で転送先の Gmail アドレスを追加します。確認メールが届くので、リンクをクリックして認証を完了させます。

ルーティングルールの設定

「Custom addresses」で転送ルールを追加します。「Send to」に先ほど認証した Gmail アドレスを設定するだけです。

「Catch-all」も有効にしておくと、info@kusumoto.appcontact@kusumoto.app のように宛先が何であっても同じ Gmail に届くようになります。個人運用ではこちらが便利です。

Resend のセットアップ

Resend は無料プランで月 3,000 通まで送信できるメール配信サービスです。API も SMTP も使えます。今回は Gmail の SMTP 設定から使うので SMTP を利用します。

ドメインの追加

Resend のダッシュボードで「Domains」→「Add Domain」から kusumoto.app を追加します。追加すると、Cloudflare DNS に設定すべきレコードが一覧で表示されます。

Cloudflare DNS へのレコード追加

Resend が指示するレコードは MX・SPF・DKIM の 3 種類です。いずれも send サブドメイン周りに追加するため、Cloudflare Email Routing のルートドメイン用レコードとは競合しません。

MX レコード

TypeNameValuePriority
MXsendfeedback-smtp.us-east-1.amazonses.com10

SPF レコード(TXT)

TypeNameValue
TXTsendv=spf1 include:amazonses.com ~all

DKIM レコード(TXT)

TypeNameValue
TXTresend._domainkeyResend が表示する p= で始まる値

Cloudflare の入力画面では Name にドメイン全体(send.kusumoto.app)ではなく、サブドメイン部分(send)だけを入れます。どのレコードもプロキシ(オレンジ雲)は OFF にして DNS only にしてください。

レコードを追加したら Resend 側で「Verify DNS Records」を実行します。

API キーの発行

「API Keys」→「Create API Key」でキーを発行します。後ほど Gmail の SMTP パスワードとして使うので、コピーして手元に保管しておきます。

Gmail への SMTP 設定

Gmail の設定画面を開き「アカウントとインポート」→「他のメールアドレスを追加」をクリックします。

表示されるダイアログで以下を入力します。

項目
SMTP サーバーsmtp.resend.com
ポート465
ユーザー名resend
パスワードResend で発行した API キー
接続の保護SSL

「次のステップ」を進めると、確認コードが届くのでそれを入力します。この確認メール自体が Resend 経由で送信されるため、Resend の設定が正しく完了していることの確認にもなります。

設定が完了すると、Gmail の作成画面で差出人を masahiro@kusumoto.app に切り替えて送信できるようになります。

表示名(「From」に表示される名前)は「アカウントとインポート」→「情報を編集」から変更できます。

送信の動作確認

実際に Gmail から masahiro@kusumoto.app を差出人にして送信すると、受信側ではこのように独自ドメインの表示名とアドレスで届きます。

iPhone の Gmail アプリで受信したメール。差出人が kusumoto.app 運営 masahiro@kusumoto.app になっている

送信履歴は Resend ダッシュボードの「Logs」画面にも残ります。SMTP 経由でも内部的には Resend の API が呼ばれているため、/emails への POST 200 がここに記録されます。

Resend ダッシュボードの Logs 画面。Gmail から送信したメールも API 経由で記録される

ステータスが 200 になっていれば送信は成功しています。エラーになっている場合は SPF / DKIM の設定を見直してみてください。

送信数と他サービスの比較

Resend の無料プランは 1 日 100 通・月 3,000 通までが上限です。個人の問い合わせ対応やメール通知の転送用途であれば、まず上限に達することはないでしょう。

大量送信が必要になった場合は Amazon SES や SendGrid が候補になりますが、設定の手間と料金を考えると個人利用では Resend の無料枠で十分です。

まとめ

Cloudflare Email Routing と Resend を組み合わせると、追加コストなしで独自ドメインのメール送受信が実現できます。Gmail の UI をそのまま使えるので操作感もまったく変わりません。

複数の私物アドレスを用途別に使い分けたい方は、よければ試してみてください。

参考リンク