トランザクションメールをCloudflare Email Serviceへ移行する
フリーのプロンプト百科事典 Wikiprompt より
トランザクションメールを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 ツールに貼り付けてください。
最良の結果を得るには、プレースホルダー(角括弧や大文字で示された部分)を具体的な要件に置き換えてください。
ノート
0 件のコメント