はじめに #
独自ドメインのメールで受信はCloudflare Email Routing。送信はResendを使っています。
今回、両方の設定手順を記載しておきます。
Cloudflare Email Routingとは #
Cloudflare Email Routingは、独自ドメイン宛のメールを既存のメールアドレス(Gmailなど)に無料で転送できるサービスです。サーバーを用意することなく、簡単に独自ドメインのメールアドレスを運用できます。設定した手順をメモしておきます。
設定手順 #
1. 転送先アドレスの登録と認証 #
まず、実際にメールを受け取る既存のアドレスを登録します。
- Cloudflareダッシュボードのメニューから [メール] > [Email Routing] を選択。
- [転送先アドレス] タブで、受け取りたいアドレス(例:
[email protected])を追加。 - 登録したアドレスに届く確認メール内のリンクをクリックし、ステータスを Verified にします。
2. カスタムアドレスの作成 #
独自ドメインとして使用したいアドレスを作成します。
- [ルーティングルール] タブで [アドレスを作成] をクリック。
- [カスタムアドレス] に希望の文字列(例:
info)を入力。 - [アクション] を「転送先へ送る」にし、手順1で認証したアドレスを選択して保存します。
3. DNSレコードの有効化 #
メールの送受信に必要なMXレコードなどをDNSに反映させます。
- 設定画面に表示される [レコードを追加して有効化] ボタンをクリック。
- Cloudflareが自動的に必要なレコードをDNS設定に追加します。
注意点 #
- 受信専用: この設定は転送(受信)専用です。独自ドメインを使って送信も行いたい場合は、別途ResendなどのSMTPサービスの連携が必要です。
- テスト時の注意: 送信元と転送先を同じGmailアドレスにしてテストを行うと、Gmailの仕様により受信トレイに表示されない場合があります。テストは別のアドレスから送信して確認する必要があります。
Cloudflare Email Routingまとめ #
Cloudflare Email Routingを利用すれば、コストをかけずに独自ドメインの窓口を作成できます。スパムフィルタも強力とのことなので運用を試してみようと思います。
なぜメール送信にResendを使うのか #
独自ドメインのメールを受信するだけであればCloudflare Email Routingの転送設定でも可能ですが、「送信」も行う場合は信頼性の高いSMTPサーバーが必要だと考えます。
生成AIに聞いたところ、Resendを採用する主なメリットは以下の通りとのことです。
- 高い到達率: 開発者向けに最適化されており、正しく設定すれば受信側の迷惑メールフィルタを回避しやすくなります。
- シンプルな管理: モダンなUIでDNS認証(DKIM等)の状態が一目でわかり、設定のミスを防げます。
- 無料枠の充実: 個人ブログや小規模な運用であれば、十分な無料枠内で高品質な送信インフラを利用できます。
AWS SESやOCI Email Deliveryなどを準備するのも手ですが、今回は取り回しの良さからResendを採用しました。
自分の振り返り用に手順などをまとめておきます。
1. Resendでのドメイン登録とAPIキー準備 #
まず、Resend側で送信ドメインの許可を得るための準備を行います。
- ドメインの追加: Resend管理画面の
Domains>Add Domainから独自ドメインを入力します。 - DNSレコードの確認: 表示されるDKIM用のCNAMEレコードをコピーし、Cloudflare等のDNSに登録します。Cloudflareの場合、自動でDNSレコード登録されました。
- 認証完了の確認: ステータスが
Verifiedになるまで待ちます。 - API Keyの作成: API Keysで「Sending access」権限を持つキーを発行し、値をコピーしておきます(
re_から始まる文字列)。
2. DNSレコードの最適化(SPF/DKIM/DMARC) #
近年のGmailをはじめとする主要なメールプロバイダは、なりすまし対策として送信ドメイン認証のポリシーを非常に厳格化しています。
SPF、DKIM、DMARCが適切に設定されていないメールは、受信を拒否(弾かれる)されたり、高い確率で迷惑メールフォルダに振り分けられたりする可能性があります。
実務でもこの辺りでハマった経験があるので、今回も設定していきます。
SPFレコードの設定 #
ResendでCustom Return Path(例: send.yourdomain.com)を使用する場合、ルートとサブ(send) の両方にレコードが必要です。
DNS設定例 #
自動でレコード発行されますが、ルートのSPFはAWS SESのレコード(include:amazonses.com)を自分でマージするが必要ありました。
| タイプ | 名前 (Host) | 内容 (Value) | 役割 |
|---|---|---|---|
| TXT | @ | v=spf1 include:_spf.google.com include:amazonses.com ~all |
ルート用。GmailとResend(SES)の両方を許可。自分でAWS SEDレコードをマージする必要あり |
| TXT | send | v=spf1 include:amazonses.com ~all |
Resend配送元(Return-Path)用。これがないとSPF=NONEになる |
| CNAME | (Resend指定) | (Resend指定).dkim.amazonses.com | DKIM署名用 |
| MX | send | feedback-smtp.us-east-1.amazonses.com 等 |
Resendのバウンス(エラー)通知受信用 |
| TXT | _dmarc | v=DMARC1; p=none; |
ドメイン全体のなりすまし防止・認証結果報告 p=だとブロックしない設定 |
DKIM・DMARCの確認 #
- DKIM: 手順1で登録したCNAMEレコードが有効であることを確認。これが「このメールは本当にあなたのドメインから送られたものである」という電子署名になります。
- DMARC:
v=DMARC1; p=none;などのレコードをDNSに登録します。これにより、SPFやDKIMの認証に失敗したメールをどう扱うかを宣言し、ドメインの信頼性を担保します。 Cloudflareの場合、DMARC Managementを有効化することで、Cloudflare側でDMARCレポートを受け取ってくれるので今回使用します。
3. Gmailでの送信設定(SMTPリレー) #
Gmailの管理画面からResendを経由して送信できるように連携します。
- Gmailの「設定(歯車)」>「すべての設定を表示」>「アカウントとインポート」を開く。
- 「他のメールアドレスを追加」をクリックし、名前と独自ドメインアドレスを入力。
- SMTPサーバー設定:
- SMTPサーバー:
smtp.resend.com - ポート:
587 - ユーザー名:
resend(※固定値です) - パスワード: 手順1で発行した
re_から始まるAPIキー - 接続方式:
TLSを使用したセキュアな接続
- SMTPサーバー:
4. Tips:返信時に自動で送信アドレスを切り替える #
複数のメールアドレスを運用している場合、返信ボタンを押した際に「受信したアドレス」を自動的に差出人として選択するように設定しておくと便利です。
- Gmailの [設定] > [すべての設定を表示] > [アカウントとインポート] を開きます。
- 「名前:」セクションにある 「デフォルトの返信モード」 を探します。
- 「メールを受信したアドレスから返信する」 にチェックを入れます。
これにより、独自ドメイン宛のメールに返信する際、手動で差出人を切り替える手間が省け、個人アドレスでの誤返信を防げます。
5. 到達確認と認証チェック #
設定が正しく反映されているか、テストを行います。
メッセージソースの確認 #
- Gmailで独自ドメインを差出人にして自分宛にテストメールを送信。
- 受信メールの「︙(その他)」から 「メッセージのソースを表示」 を選択。
- 以下の項目がすべて 「PASS」 になっているか確認します。
- SPF: PASS
- DKIM: PASS
- DMARC: PASS
5. 注意点 #
- DNS反映待ち: レコード変更後、反映まで数時間かかる場合があります。
- 10回制限: SPFの
includeは合計10回までです。これを超える場合は、不要な記述を整理する必要があります。
付録:Resend Freeプラン(無料枠)の制限事項 #
運用にあたって注意すべき無料プランの制限は以下の通りです。生成AIに聞いて作成したので誤りがあるかもしれません。参考にされる場合は公式ドキュメントをご確認ください。
| 項目 | 制限内容 | 備考 |
|---|---|---|
| 月間送信数 | 3,000通 / 月 | |
| 1日あたりの送信数 | 100通 / 日 | |
| 送信ドメイン数 | 1ドメイン | 認証可能な独自ドメインの数 |
| ログの保持期間 | 1日間 | 管理画面で詳細ログを確認できる期間 |
| メンバー数 | 1名 | チーム機能による管理者の追加は不可 |
| 送信IPアドレス | 共有IP | 他のユーザーと共有のIPアドレスを使用 |
| サポート | コミュニティ |
参照元: Resend Pricing Official / Resend Docs
制限はありますが無料でも結構使える印象です。制限を超えそうなら課金なり、他サービスを検討したいと思っています。