0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Resend + Cloudflare Email Routingで独自ドメインの送受信環境を無料枠で構築する

0
Last updated at Posted at 2026-05-04

検証日: 2026-08-17

結論

小規模なサービスで独自ドメインの送受信環境を用意する場合、次の構成を無料枠から始められます。

  • 送信: Resend
  • 受信・転送: Cloudflare Email Routing

2026年8月時点で、ResendのFreeプランは月3,000通、1日100通までです。Cloudflare Email Routingの受信は無料プランでも利用できます。

無料枠や仕様は変わるため、本番導入時は公式料金表と制限を再確認してください。

構成

[送信] Cloudflare Workers → Resend API → 受信者
[受信] 独自ドメイン → Cloudflare Email Routing → Gmailなど

送信と受信を別サービスへ分けます。

1. Cloudflare Email Routingで受信する

Cloudflareのダッシュボードで、対象ドメインのEmail Routingを有効にします。

  1. 転送先アドレスを登録して検証する
  2. info@example.com などのカスタムアドレスを作る
  3. 転送先を紐付ける
  4. Cloudflareが案内するDNS設定を反映する

受信メールのサイズ上限は25MiBです。Email Routing Workerを使う場合は、Workers側のCPU・メモリ制限にも注意します。

2. Resendで送信ドメインを検証する

Resendへ登録し、Domainsから送信ドメインを追加します。画面に表示されたDNSレコードをCloudflare DNSへ追加し、検証完了後にAPI Keyを発行します。

DNSの反映時間は環境によって変わります。「10〜30分で必ず終わる」とは限らないため、検証が通らない場合はレコード値とDNSの反映状況を確認します。

3. Cloudflare Workersから送信する

Honoを使った最小例です。

import { Hono } from "hono";

type Env = {
  RESEND_API_KEY: string;
};

const app = new Hono<{ Bindings: Env }>();

app.post("/notify", async (c) => {
  const response = await fetch("https://api.resend.com/emails", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${c.env.RESEND_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      from: "Example App <no-reply@example.com>",
      to: ["user@example.net"],
      subject: "Hello from Workers",
      html: "<p>Hello</p>",
    }),
  });

  const body = await response.json();

  if (!response.ok) {
    return c.json({ ok: false, error: body }, response.status);
  }

  return c.json({ ok: true, data: body });
});

export default app;

API Keyはソースコードや wrangler.toml に直接書かず、Secretとして登録します。

npx wrangler secret put RESEND_API_KEY

ハマりやすい点

from は検証済みドメインに合わせる

Resendで検証していないドメインから送信すると失敗します。サブドメインを検証した場合は、from もその範囲に合わせます。

Email Routingは転送であり、返信経路は別に設計する

受信メールをGmailへ転送しただけでは、独自ドメインからの返信経路が自動で完成するわけではありません。

返信もResend経由にするのか、別のメールボックスを使うのかを決めておきます。Reply-To を使う場合も、なりすまし対策と運用ルールを確認します。

無料枠は月間だけでなく日次上限を見る

Resend Freeは月3,000通に加えて1日100通の上限があります。通知が一日に集中するサービスでは、月間枠が余っていても日次上限に達します。

エラーをそのまま成功扱いにしない

fetch() は4xxや5xxでも例外を投げません。response.ok を確認し、失敗時のログと再送方針を用意します。

本番運用前チェックリスト

  • API KeyをSecretで管理している
  • 送信元ドメインのSPF / DKIM / DMARCを確認した
  • fromReply-To の役割を決めた
  • 日次・月次上限を監視する
  • バウンスと配信停止を処理する
  • フォームやAPIの悪用対策を入れる
  • 障害時の再送と重複送信対策を用意する
  • 料金・制限の更新日を記録する

自社サービスでの利用

自社で運営する小規模Webサービスでも、Workers + HonoからResendを呼び、Cloudflare Email Routingで受信する構成を利用しています。

低トラフィックの検証や初期プロダクトでは始めやすい構成ですが、メールは認証、配信品質、悪用対策まで含めて設計する必要があります。無料であることだけで選ばず、送信量と運用要件で判断するのが安全です。

公式ドキュメント


この記事は株式会社Root on Tech Blogによる、自社実装をもとにした技術検証です。

生成AI・DX、PoC、PM・PMO、Web・システム実装の相談は、Root on公式サイトをご覧ください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?