ノート

トランザクションメールをCloudflare Email Serviceへ移行する

フリーのプロンプト百科事典 Wikiprompt より

@levelsio

2026年5月10日

トランザクションメールをCloudflare Email Serviceへ移行する PostmarkやSESなどのプロバイダーからCloudflare Email Serviceへのトランザクションメール移行のための包括的なプロンプト。前提条件、ドメイン戦略、コード監査、ヘルパー関数、段階的移行、注意点を網羅しています。

プロンプト内容保存

🌐
このコードベースの送信メールを、現在のプロバイダー(Postmark / SES / Resend / SendGrid / Mailgun など)からCloudflare Email Service(パブリックベータ、2026年4月ローンチ)に移行したいと考えています。慎重に進めるのを手伝ってください。 ## コンテキスト:Cloudflare Email Serviceとは Cloudflareの新しいトランザクションメールAPIです。エンドポイント: ``` POST https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/email/sending/send Authorization: Bearer {API_TOKEN} Content-Type: application/json ``` リクエストボディ: ```json { "to": "user@example.com", // 文字列または文字列の配列 "from": "no-reply@yourdomain.com", // 文字列または {"address":"x@y","name":"Display"} "subject": "...", "html": "<p>...</p>", // オプション "text": "...", // オプション(html/textのいずれか必須) "cc": ["..."], // オプション、配列 "bcc": ["..."], // オプション、配列 "reply_to": "...", // オプション、単一の文字列 "headers": {"List-Unsubscribe": "<...>"} // オプション、ニュースレターなどで使用 } ``` 成功レスポンス:HTTP 200 + `{"success":true,"result":{"delivered":[],"queued":[],"permanent_bounces":[]}}`。 失敗:非200 または `success:false` または非空の `permanent_bounces`。常に3つすべてを確認してください。 料金:$5/月のWorkers Paidプラン + 3,000通無料 + 以降1,000通あたり$0.35。Postmarkより約5倍安い。バッチ送信エンドポイントはありません。単一送信をループしてください。 ## 従うべき手順 ### 1. 前提条件を私と確認する コードを書く前に、以下を確認するよう私に求めてください: - Cloudflare Workers Paidプラン($5/月)を持っている - Cloudflareダッシュボード → Email → Email Sending → Onboard Domainで送信元ドメインをオンボード済み(SPF/DKIM/DMARC + cf-bounce MXレコードが自動追加される) - `email_sending:write`スコープのAPIトークンを持っている(https://dash.cloudflare.com → Custom Tokenで作成) - CloudflareアカウントIDを持っている これらが揃うまで先に進まないでください。 ### 2. ドメイン評価戦略を推奨する ほとんどのアプリは、スパム苦情が他の送信元の配信性に悪影響を与えないよう、送信元を2〜3のサブドメインに分割すべきです: - `mail.<domain>` または `members.<domain>` → トランザクションメール(ログイン、領収書、パスワードリセット、アプリ内通知) - `e.<domain>` → コールド/リカバリーメール(カート放棄、リピート購入キャンペーン) - `newsletter.<domain>` → List-Unsubscribeヘッダー付きのオプトインニュースレター 各サブドメインはCloudflareで個別にオンボードする必要があります。どれを使いたいか私に尋ねてください。 ### 3. 既存のメール送信を監査する grep/searchを使用して、このコードベース内でメールを送信するすべての場所を見つけてください。探すもの: - 現在のプロバイダーのSDKクラス名、API URL、env/config変数 - `mail()`、SMTP使用、`nodemailer`などの一般的なパターン ファイルごとではなく、メールの種類/目的(例:「マジックリンクログイン」、「支払い領収書」、「週次ニュースレター」)ごとに結果をグループ化してください。何も変更する前に、見つけた内容を私に伝えてください。 ### 4. 単一のヘルパー関数を追加する コードベース全体にCloudflare API呼び出しを散りばめないでください。1つのヘルパー(プロバイダー固有の名前、例:`sendEmailViaCloudflare()`)を追加してください。そのヘルパーは: - `from`をconfig変数からデフォルト設定(ハードコードしない) - `"Name <email@domain>"`形式の文字列をAPIの`{address, name}`オブジェクト形式にパース - `cc`/`bcc`を文字列または配列のいずれかで受け付ける - `headers`ディクショナリを受け付ける(ニュースレターには`List-Unsubscribe` + `List-Unsubscribe-Post`が必要) - `bool`を返す(成功時はtrue、失敗時はfalse) - 失敗時は、私が見える場所にログ/アラートを記録(Telegram、Sentry、ログファイル。コードベースが既に使用しているものに合わせる) - curl/fetchタイムアウトを設定(接続5秒、合計15秒)して、Cloudflare APIがスタックしてもリクエストがハングしないようにする - `permanent_bounces: [...]`が非空の場合をソフト障害として扱う ### 5. まずリスクの低いメールタイプを1つ移行する 一度にすべてを移行しないでください。監査で最もリスクの低いメールタイプ(スパムに入ってもお金やユーザーを失わないもの、例:「内部管理者アラート」、「プロフィール写真拒否」)を選び、その1つだけを移行してください。エンドツーエンドでテストしてください。メールが実際に届くことを確認してください。その後でのみ、次の移行を提案してください。 ### 6. ログインメールの移行を私に止めさせる コードベースがマジックリンクログインやパスワードリセットメールを送信している場合、それらをまだCloudflareに移行しないでください。Cloudflare Email Serviceは新しく(執筆時点で約1ヶ月)、そのIP/ドメイン評価は未検証です。ログインメールがスパムに入ると、ユーザーがロックアウトされます。リスクの低いタイプで3ヶ月以上のクリーンな配信データが得られるまで、現在のプロバイダーに維持してください。これを明示的に私に伝えてください。 ### 7. コミット境界を提案する 各移行が成功した後、明確なメッセージを持つ焦点を絞ったgitコミットを提案してください。無関係な変更をまとめないでください。 ## 私に提示すべき重要な注意点 - ベータ製品。料金は完全には確定していません。SLAは未定義。変更される可能性があります。 - バッチエンドポイントなし。大量送信(1000人以上の受信者へのニュースレター)はループが必要。送信あたり約150msで、1000通あたり約2.5分。cronには問題ないが、同期ユーザー向けフローには不向き。 - バウンスウェブフックはまだありません。レスポンスボディの`permanent_bounces`配列で失敗を確認してください。 - 抑制リストは自動管理。ハードバウンス、繰り返しのソフトバウンス、スパム苦情はブロックされます。スパム苦情による抑制は解除が困難(不正防止対策)。 - メッセージごとのログ/ダッシュボードはまだありません。追跡に必要ならレスポンスの`messageId`を使用してください。 - List-Unsubscribeヘッダーはそのまま渡されます。Gmailの大量送信者要件は、`headers`に含める場合にのみ満たされます。 ## 最初のアクション コードを書く前に:手順1(前提条件の確認)と手順3(既存送信の監査)を行い、移行順序を簡単な説明付きで提案してください。変更を加える前に私の確認を待ってください。

ログインして完全なプロンプトを表示

次で続行:

ログインすると、次に同意したことになります: 利用規約 と プライバシーポリシー

使い方

このプロンプトは coding 向けに設計されています。上の内容をコピーして、お好みの AI ツールに貼り付けてください。

最良の結果を得るには、プレースホルダー(角括弧や大文字で示された部分)を具体的な要件に置き換えてください。

参考資料

カテゴリ:coding| twitter| email-migration| cloudflare

ノート