Cloudflare Pagesでお問い合わせフォーム(自動返信あり)を作る
最初に重要なお知らせです。 この記事で以前紹介していた「MailChannelsとの連携でCloudflare Pagesから無料でメール送信する方法」は、 2024年8月31日に終了しました 。当時のコード(api.mailchannels.netへの認証なしリクエスト)は現在動きません。
この記事は2023年に書いたものですが、上記の経緯を踏まえ、2026年時点でCloudflare(Pages / Workers)にお問い合わせフォームを作る方法として全面的に書き直しました。
全体の構成は変わらない
お問い合わせフォームの構成自体は当時から変わりません。
- クライアント側:フォームを
fetchで送信 - サーバー側(Pages Functions / Worker):受け取って検証
- 通知:管理者に知らせる(+必要ならユーザーに自動返信)
変わったのは3の「通知手段」です。Cloudflare環境はNodemailerのようなSMTPライブラリが基本的に動かないため、ここの選択が肝になります。2026年時点の選択肢を順に紹介します。
方法1:Slackに通知する(一番ラク・おすすめ)
そもそも「お問い合わせが来たことを自分が知りたい」だけなら、メールである必要はありません。SlackのIncoming Webhookに投げるのが、認証情報の管理も含めて一番簡単です。
await fetch(env.SLACK_WEBHOOK_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
text: `お問い合わせ\n名前: ${name}\n内容: ${message}`,
}),
}); 実はこのサイトのお問い合わせフォームも、最初はメール通知で作ったのですが、最終的にSlack通知に切り替えました。メール配信サービスの設定・ドメイン認証・到達性の心配が全部消えて、スマホへのプッシュも速い。個人や小規模チームならこれで十分です。Discordでもほぼ同じことができます。
方法2:Cloudflare純正のメール送信(Email Service)
「やっぱり通知はメールで受けたい」場合、現在はCloudflare純正の Email Service があります。WorkersのバインディングやREST APIから送信でき、自分のアカウントで検証済みの宛先アドレスへの送信は無料です。お問い合わせ通知を自分のメールアドレスで受ける用途にちょうどはまります。
注意点は、執筆時点でメール送信機能はベータであること、利用にはWorkers Paid(月5ドル〜)が必要なことです。
方法3:メール配信サービスのHTTP API(自動返信が必要ならこれ)
「送信してくれたユーザーへ自動返信メールを送る」要件がある場合は、外部のメール配信サービスをHTTP API経由で使います。SMTPが使えなくても、fetchでAPIを叩く分には何の問題もありません。Resend、SendGrid、Amazon SESあたりが定番です。
以下はResendの例です。どのサービスでも「APIキーを環境変数に置いて、JSONをPOSTする」という形は共通です。
await fetch("https://api.resend.com/emails", {
method: "POST",
headers: {
Authorization: `Bearer ${env.RESEND_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
from: "no-reply@example.com",
to: ["user@example.com"],
subject: "お問い合わせを受け付けました",
text: "お問い合わせありがとうございます。内容を確認のうえ、改めてご連絡いたします。",
}),
}); いずれのサービスも、送信元ドメインのDNS認証(SPF / DKIM)の設定が必要です。ここを省くと迷惑メール行きになるので、面倒でも最初にやってください。
方法4:MailChannelsを使い続ける場合
MailChannels自体が消えたわけではなく、APIキー認証の Email API として継続しています(無料枠は1日100通)。以前のコードからの移行が一番少ない選択肢なので、旧方式から引っ越す場合は検討してください。
組み合わせの実例
要件別にまとめると、こうなります。
- 自分が気づければいい → 方法1(Slack)だけで完結
- 通知をメールで受けたい → 方法2(Email Service)または方法3
- ユーザーへの自動返信が必要 → 方法3(メールAPI)。管理者通知は方法1と組み合わせると見落としがない
メール送信まわりの詳しい話は Nodemailerの使い方 (通常のNode.js環境向け)や Cloudflare Pages Functionsでメールが送信できない場合の対処法 も参考にしてください。