cloudflare-email-routing について
Cloudflare Workers開発者向けのEmail Routing実践ガイドです。メールの受信、解析、転送、送信に関する設定とコードパターンを紹介し、デプロイや配信時の問題の予防・調査も扱います。
主な機能
- 01Email Workersでメールを受信・処理
- 02メール本文と添付ファイルの解析
- 03ルールに基づくフィルタリングと転送
- 04Workersからメールを送信
- 05DNSとメールバインディングの設定
活用シーン
- 01受信メールをD1またはKVに保存
- 02件名に応じて異なる宛先へ転送
- 03サポート依頼への自動返信
- 04Workerから通知メールを送信
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jackspace/ claudeskillz --skill cloudflare-email-routingインストール後、Claude Code で/cloudflare-email-routingを入力して読み込まれたか確認します。
同梱ファイルREADME.mdSKILL.json
詳細
Cloudflare Email Routing
Status:本番環境で利用可能 ✅ 最終更新日:2025-10-23 最新バージョン:[email protected], [email protected]
Cloudflare Email Routing とは?
Cloudflare Email Routing では、相互に補完する次の 2 つの機能を利用できます。
- Email Workers - カスタムロジック(許可リスト、ブロックリスト、転送、解析、返信)を使って受信メールを受け取り、処理します
- Send Email - Workers から確認済みの宛先アドレスへメールを送信します(通知、アラート、確認)
どちらの機能も無料で、連携して Cloudflare Workers のメール機能を完全に利用できます。
クイックスタート(10 分)
パート 1:Email Routing を有効にする(ダッシュボード)
前提条件:ドメインが Cloudflare DNS に登録されていること
- Cloudflare Dashboard にログインし、ドメインを選択します
- Email > Email Routing に移動します
- Enable Email Routing → Add records and enable を選択します
- これにより、MX レコード、SPF、DKIM が DNS に自動的に追加されます
- 宛先アドレスを作成します:
- カスタムアドレス:
[email protected] - 宛先:個人のメールアドレス(例:
[email protected]) - メールで宛先アドレスを確認します
- カスタムアドレス:
- ✅ 基本的なメール転送が有効になりました
ここまでで行ったこと:DNS と基本的な転送を設定しました。それでは、カスタムロジックを追加するために Workers を設定しましょう。
パート 2:Email Workers でメールを受信する
1. 依存関係をインストールする
npm install [email protected] [email protected]
これらのパッケージが必要な理由:
postal-mime- 受信メールメッセージ(ヘッダー、本文、添付ファイル)を解析しますmimetext- 送信または返信用のメールメッセージを作成します
2. Email Worker を作成する
src/email.ts を作成します:
import { EmailMessage } from 'cloudflare:email';
import PostalMime from 'postal-mime';
export default {
async email(message, env, ctx) {
// Parse the incoming message
const parser = new PostalMime.default();
const email = await parser.parse(await new Response(message.raw).arrayBuffer());
console.log('From:', message.from);
console.log('To:', message.to);
console.log('Subject:', email.subject);
// Forward to verified destination
await message.forward('[email protected]');
},
};
3. Wrangler を設定する
wrangler.jsonc を更新します:
{
"name": "email-worker",
"main": "src/email.ts",
"compatibility_date": "2025-10-11"
}
4. デプロイしてバインドする
npx wrangler deploy
# In Cloudflare Dashboard:
# Email > Email Routing > Email Workers
# Select your worker → Create route → Enter address (e.g., [email protected])
ここまでで行ったこと:メールをログに記録して転送する Worker を作成しました。
パート 3:Workers からメールを送信する
1. Send Email バインディングを設定する
wrangler.jsonc を更新します:
{
"name": "my-worker",
"main": "src/index.ts",
"compatibility_date": "2025-10-11",
"send_email": [
{
"name": "EMAIL",
"destination_address": "[email protected]"
}
]
}
重要:destination_address は次の条件を満たす必要があります。
- Email Routing が有効になっているドメインであること
- Email Routing の設定で確認済みの宛先アドレスであること
2. Worker からメールを送信する
import { EmailMessage } from 'cloudflare:email';
import { createMimeMessage } from 'mimetext';
export default {
async fetch(request, env, ctx) {
// Create email message
const msg = createMimeMessage();
msg.setSender({ name: 'My App', addr: '[email protected]' });
msg.setRecipient('[email protected]');
msg.setSubject('Welcome to My App');
msg.addMessage({
contentType: 'text/plain',
data: 'Thank you for signing up!',
});
// Send via binding
const message = new EmailMessage(
'[email protected]',
'[email protected]',
msg.asRaw()
);
await env.EMAIL.send(message);
return new Response('Email sent!');
},
};
3. デプロイする
npx wrangler deploy
ここまでで行ったこと:確認済みのアドレスにメールを送信するよう Worker を設定しました。
Email Workers:完全ガイド
ランタイム API
EmailEvent ハンドラー
export default {
async email(message: ForwardableEmailMessage, env: Env, ctx: ExecutionContext) {
// Process email here
},
};
パラメーター:
message- ForwardableEmailMessage オブジェクトenv- 環境バインディング(KV、D1、シークレットなど)ctx- 実行コンテキスト(非同期処理用の waitUntil)
ForwardableEmailMessage のプロパティ
interface ForwardableEmailMessage {
readonly from: string; // Sender email
readonly to: string; // Recipient email
readonly headers: Headers; // Email headers
readonly raw: ReadableStream; // Raw email message
readonly rawSize: number; // Size in bytes
// Methods
setReject(reason: string): void;
forward(rcptTo: string, headers?: Headers): Promise<void>;
reply(message: EmailMessage): Promise<void>;
}
よくあるパターン
パターン 1:許可リスト
承認済みの送信者からのメールのみを受け付けます:
export default {
async email(message, env, ctx) {
const allowList = [
'[email protected]',
'[email protected]',
'[email protected]',
];
if (!allowList.includes(message.from)) {
message.setReject('Address not on allowlist');
return;
}
await message.forward('[email protected]');
},
};
使用する場面:お問い合わせフォーム、プライベートなメールアドレス、チームの受信トレイ
パターン 2:ブロックリスト
特定の送信者またはドメインからのメールを拒否します:
export default {
async email(message, env, ctx) {
const blockList = [
'[email protected]',
'@suspicious-domain.com', // Block entire domain
];
const isBlocked = blockList.some(pattern =>
message.from.includes(pattern)
);
if (isBlocked) {
message.setReject('Sender blocked');
return;
}
await message.forward('[email protected]');
},
};
使用する場面:スパムのフィルタリング、嫌がらせをする相手のブロック、ドメイン単位のブロック
パターン 3:解析して保存する
メールの内容を抽出し、D1 または KV に保存します:
import PostalMime from 'postal-mime';
export default {
async email(message, env, ctx) {
// Parse email
const parser = new PostalMime.default();
const rawEmail = new Response(message.raw);
const email = await parser.parse(await rawEmail.arrayBuffer());
// Store in D1
await env.DB.prepare(
'INSERT INTO emails (from_addr, subject, text, received_at) VALUES (?, ?, ?, ?)'
).bind(
message.from,
email.subject,
email.text,
new Date().toISOString()
).run();
// Forward to inbox
await message.forward('[email protected]');
},
};
使用する場面:メールのアーカイブ、チケットシステム、サポート用受信トレイ、監査ログ
パターン 4:自動返信
カスタムロジックで自動返信を送信します:
import PostalMime from 'postal-mime';
import { createMimeMessage } from 'mimetext';
import { EmailMessage } from 'cloudflare:email';
export default {
async email(message, env, ctx) {
// Parse incoming email
const parser = new PostalMime.default();
const email = await parser.parse(await new Response(message.raw).arrayBuffer());
// Create reply
const msg = createMimeMessage();
msg.setSender({ name: 'Support Team', addr: '[email protected]' });
msg.setRecipient(message.from);
msg.setHeader('In-Reply-To', message.headers.get('Message-ID'));
msg.setSubject(`Re: ${email.subject}`);
msg.addMessage({
contentType: 'text/plain',
data: `Thank you for your message about "${email.subject}". We'll respond within 24 hours.`,
});
// Send reply
const replyMessage = new EmailMessage(
'[email protected]',
message.from,
msg.asRaw()
);
await message.reply(replyMessage);
// Also forward to team inbox
await message.forward('[email protected]');
},
};
使用する場面:不在通知、サポートチケットの受領確認、自動応答
パターン 5:条件付きルーティング
内容に応じてメールを異なる宛先に振り分けます:
import PostalMime from 'postal-mime';
export default {
async email(message, env, ctx) {
const parser = new PostalMime.default();
const email = await parser.parse(await new Response(message.raw).arrayBuffer());
const subject = email.subject.toLowerCase();
// Route based on subject keywords
if (subject.includes('urgent') || subject.includes('critical')) {
await message.forward('[email protected]');
} else if (subject.includes('invoice') || subject.includes('payment')) {
await message.forward('[email protected]');
} else if (subject.includes('support') || subject.includes('help')) {
await message.forward('[email protected]');
} else {
await message.forward('[email protected]');
}
},
};
使用する場面:部門ごとの振り分け、優先度によるフィルタリング、カテゴリ別の受信トレイ
Send Email:完全ガイド
設定
単一の宛先(シンプル)
{
"send_email": [
{
"name": "EMAIL",
"destination_address": "[email protected]"
}
]
}
動作:env.EMAIL を使って送信されるすべてのメールが、このアドレスに送信されます。
複数の宛先(柔軟)
{
"send_email": [
{
"name": "EMAIL",
"allowed_destination_addresses": [
"[email protected]",
"[email protected]",
"[email protected]"
]
}
]
}
動作:リスト内の任意のアドレスに送信できます。
複数のバインディング(整理)
{
"send_email": [
{
"name": "NOTIFICATIONS",
"destination_address": "[email protected]"
},
{
"name": "ALERTS",
"destination_address": "[email protected]"
}
]
}
動作:用途に応じて異なるバインディングを使用します。
メールを送信する
基本的なテキストメール
import { EmailMessage } from 'cloudflare:email';
import { createMimeMessage } from 'mimetext';
const msg = createMimeMessage();
msg.setSender({ name: 'My App', addr: '[email protected]' });
msg.setRecipient('[email protected]');
msg.setSubject('Welcome!');
msg.addMessage({
contentType: 'text/plain',
data: 'Welcome to our service!',
});
const email = new EmailMessage(
'[email protected]',
'[email protected]',
msg.asRaw()
);
await env.EMAIL.send(email);
HTML メール
import { EmailMessage } from 'cloudflare:email';
import { createMimeMessage } from 'mimetext';
const msg = createMimeMessage();
msg.setSender({ name: 'My App', addr: '[email protected]' });
msg.setRecipient('[email protected]');
msg.setSubject('Welcome!');
// Add both plain text and HTML versions
msg.addMessage({
contentType: 'text/plain',
data: 'Welcome to our service!',
});
msg.addMessage({
contentType: 'text/html',
data: '<h1>Welcome!</h1><p>Thanks for joining us.</p>',
});
const email = new EmailMessage(
'[email protected]',
'[email protected]',
msg.asRaw()
);
await env.EMAIL.send(email);
カスタムヘッダー付きメール
import { EmailMessage } from 'cloudflare:email';
import { createMimeMessage } from 'mimetext';
const msg = createMimeMessage();
msg.setSender({ name: 'My App', addr: '[email protected]' });
msg.setRecipient('[email protected]');
msg.setSubject('Password Reset');
// Add custom headers
msg.setHeader('X-Priority', '1');
msg.setHeader('X-Application-ID', 'my-app-123');
msg.addMessage({
contentType: 'text/plain',
data: 'Click here to reset your password...',
});
const email = new EmailMessage(
'[email protected]',
'[email protected]',
msg.asRaw()
);
await env.EMAIL.send(email);
DNS の設定
自動セットアップ(推奨)
ダッシュボードでメールルーティングを有効にすると、Cloudflare によって次のレコードが自動的に追加されます。
-
MX レコード - メールを Cloudflare のサーバーに転送します
yourdomain.com. 300 IN MX 13 amir.mx.cloudflare.net. yourdomain.com. 300 IN MX 86 linda.mx.cloudflare.net. yourdomain.com. 300 IN MX 24 isaac.mx.cloudflare.net. -
SPF レコード - Cloudflare にお客様の代理でメールを送信する権限を付与します
yourdomain.com. 300 IN TXT "v=spf1 include:_spf.mx.cloudflare.net ~all" -
DKIM レコード - 送信メールに署名します
Automatically configured per domain
手動セットアップ(上級者向け)
別のプロバイダーから移行する必要がある場合は、次の手順を実行します。
- Email > Email Routing > Settings に移動します
- Start disabling > Unlock records and continue を選択します
- 必要に応じて DNS レコードを編集します
- 準備ができたら、Lock DNS records を選択してメールルーティングを保護します
警告:MX レコードを変更すると、メールルーティングが機能しなくなります。プロバイダーを移行する場合にのみ変更してください。
既知の問題の予防
このスキルでは、記録されている8つの問題を防止します。
問題 #1:「この workers では Email Trigger を利用できません」
エラー:メールワーカーのテストが「この workers では Email Trigger を利用できません」というエラーで失敗します
発生する理由:Wrangler dev はメールトリガーを完全にはサポートしていないため、デプロイ済みの Workers を使ってテストする必要があります
予防策:
- テストの前に、必ずメールワーカーをデプロイします
- ライブデバッグには
wrangler tailを使用します - ダッシュボードの「Test Email Event」機能を使用します(利用できる場合)
問題 #2:宛先アドレスの検証に関するバグ
エラー:検証済みの宛先アドレスが、メールワーカーによる転送では「未検証」と表示されます
出典:コミュニティからの報告(Cloudflare Community)
発生する理由:通常のルーティングルールでも使用されている場合に限り、アドレスが検証済みと表示されるダッシュボードのバグです
予防策:
- まず、各宛先アドレスの通常の転送ルールを作成します
- その後、同じアドレスをメールワーカーで使用します
- ワーカーをデプロイする前にアドレスを検証します
問題 #3:Gmail によるレート制限
エラー:「421: お客様の IP アドレスから送信された迷惑メールの量に異常があることを、システムが検出しました」
出典:コミュニティからの報告
発生する理由:共有インフラストラクチャが原因で、Gmail が Cloudflare の IP 範囲を不審と判断する場合があります
予防策:
- SPF/DKIM/DMARC レコードを適切に設定します
- メールルーティングを使って大量のメールを送信しないでください
- 送信量が多い場合は、トランザクションメールサービス(SendGrid、Mailgun など)を使用します
- 送信レートを制限します(個人利用では最大50~100通/時間)
問題 #4:MailChannels 使用時の SPF permerror
エラー:MailChannels 経由でルーティングすると、SPF permerror が発生します
出典:コミュニティでの議論
発生する理由:複数のサービスを経由して転送すると、SPF レコードのチェーンが切れる場合があります
予防策:
- MailChannels の代わりに、メールルーティングのネイティブな送信機能を使用します
- MailChannels を使用する場合は、SPF の include を正しく設定します
- MXToolbox SPF checker でテストします
問題 #5:無料プランでのログ記録の制限
エラー:ワーカーログやメール処理の詳細を確認できません
出典:コミュニティからの報告
発生する理由:無料プランでは、ログの保持期間とストリーミングが制限されています
予防策:
- 開発中はライブログの確認に
wrangler tailを使用します - メールワーカーで
console.log()を積極的に使用します - デバッグ用の重要なデータを D1/KV に保存します
- 可観測性を高めるには、Workers Paid プランにアップグレードします
問題 #6:アクティビティログの不一致
エラー:正常に転送されたメールが、アクティビティログでは「Dropped」と表示されます
出典:コミュニティからの報告
発生する理由:ダッシュボードのバグにより、誤ったステータスが表示されます
予防策:
- ダッシュボードに頼らず、実際にメールが届くことを確認します
wrangler tailを使用して処理を確認します- D1/KV を使って独自のログ記録を実装します
- 実際のメールでテストし、配信を確認します
Issue #7: テストメールイベントの読み込みが終わらない
エラー: ダッシュボードの「Test Email Event」ボタンが読み込み中のままになる
原因: ダッシュボードのテストインターフェースのバグです(2025-10 時点で未解決)
予防策:
- ダッシュボードのテスト機能に依存しないでください
- 代わりに、ローカル開発で
curlを使用してください(「ローカル開発」セクションを参照) - デプロイして実際のメールでテストしてください
wrangler tailを使用して処理を監視してください
Issue #8: Worker の呼び出しに失敗する
エラー: 「Rejected reason: Unknown error: failed to call worker: Worker call failed for 3 times, aborting…」
出典: workers-sdk #9069、コミュニティからの報告
原因: ランタイムエラー、タイムアウト、またはメモリの問題により Worker がクラッシュしています
予防策:
- try/catch による包括的なエラー処理を追加してください
- 外部 API 呼び出しにタイムアウトを設定してください
- 拒否する前にエラーを D1/KV に記録してください
- 重要度の低い処理には
ctx.waitUntil()を使用してください - さまざまなメール形式(プレーンテキスト、HTML、添付ファイル)でテストしてください
ローカル開発
メールの受信
Wrangler は HTTP POST を介してメールの受信をシミュレートします:
# Start dev server
npx wrangler dev
# In another terminal, send test email
curl http://localhost:8787 -X POST \
--data-binary @- << EOF
From: [email protected]
To: [email protected]
Subject: Test Email
This is a test email body.
EOF
動作: Wrangler はメールの処理をログに記録し、転送されるメールの送信先を表示します。
メールの送信
Wrangler は送信メールをローカルの .eml ファイルに書き込みます:
// Your worker code
await env.EMAIL.send(message);
ターミナルの出力:
[wrangler:inf] send_email binding called with the following message:
/tmp/miniflare-abc123/files/email/message-123.eml
メールの表示:
cat /tmp/miniflare-abc123/files/email/message-123.eml
設定ファイルのリファレンス
完全な wrangler.jsonc(受信と送信の両方)
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "email-worker",
"main": "src/email.ts",
"account_id": "YOUR_ACCOUNT_ID",
"compatibility_date": "2025-10-11",
"observability": {
"enabled": true
},
// Send email binding
"send_email": [
{
"name": "NOTIFICATIONS",
"destination_address": "[email protected]"
},
{
"name": "ALERTS",
"allowed_destination_addresses": [
"[email protected]",
"[email protected]"
]
}
],
// Optional: Add other bindings
"d1_databases": [
{
"binding": "DB",
"database_name": "email-archive",
"database_id": "YOUR_DATABASE_ID"
}
],
"kv_namespaces": [
{
"binding": "EMAIL_CACHE",
"id": "YOUR_KV_ID"
}
]
}
TypeScript 型
環境バインディング
interface Env {
// Send email bindings
EMAIL: SendEmail;
NOTIFICATIONS: SendEmail;
ALERTS: SendEmail;
// Other bindings
DB: D1Database;
EMAIL_CACHE: KVNamespace;
}
interface SendEmail {
send(message: EmailMessage): Promise<void>;
}
型定義の全体
import { EmailMessage } from 'cloudflare:email';
interface ForwardableEmailMessage {
readonly from: string;
readonly to: string;
readonly headers: Headers;
readonly raw: ReadableStream;
readonly rawSize: number;
setReject(reason: string): void;
forward(rcptTo: string, headers?: Headers): Promise<void>;
reply(message: EmailMessage): Promise<void>;
}
declare module 'cloudflare:email' {
export class EmailMessage {
constructor(from: string, to: string, raw: string | ReadableStream);
}
}
完全なセットアップチェックリスト
メールルーティングのセットアップ
- ドメインが Cloudflare DNS に登録されている
- ダッシュボードで Email Routing が有効になっている
- MX、SPF、DKIM レコードが自動的に追加されている
- 少なくとも 1 つの宛先アドレスが確認済みである
- カスタムアドレスで基本的な転送をテストする
Email Workers(受信)
-
[email protected]がインストールされている -
[email protected]がインストールされている -
async email()ハンドラーを含むメール Worker が作成されている - Worker がデプロイされている:
npx wrangler deploy - ダッシュボードで Worker がメールルートにバインドされている
- ルートアドレス宛ての実際のメールでテストする
-
wrangler tailでログを確認する
メールの送信
-
send_emailバインディングがwrangler.jsoncで設定されている -
destination_addressまたはallowed_destination_addressesが指定されている - Email Routing ですべての宛先アドレスが確認済みである
- Worker のコードで
env.EMAIL.send()を使用している - Worker がデプロイされている:
npx wrangler deploy - Worker エンドポイント経由でメール送信をテストする
- 受信者にメールが届いたことを確認する
トラブルシューティング
問題:「この workers では Email Trigger を利用できません」
解決策:
- Worker をデプロイしてください:
npx wrangler deploy - ローカルシミュレーションではなく、実際のメールでテストしてください
wrangler tailを使用して処理を監視してください
問題:「宛先アドレスが確認されていません」
解決策:
- ダッシュボードの Email Routing > Destination addresses を確認してください
- 必要に応じて「Resend verification」をクリックしてください
- 先に通常の転送ルールを作成してください(バグの回避策)
- Worker をデプロイする前に、すべてのアドレスを確認してください
問題:Gmail が 421 エラーでメールを拒否する
解決策:
- SPF/DKIM レコードが設定されていることを確認してください(Email Routing で自動設定されます)
- 送信レートを下げてください(個人利用では最大 50~100 通/時)
- 迷惑メールや一括メールを送信しないでください
- 大量送信の場合は、トランザクションメールサービスの利用を検討してください
問題:Email Worker からメールが転送されない
解決策:
- ダッシュボードで Worker が正しいメールルートにバインドされていることを確認してください
- 宛先アドレスが確認済みであることを確認してください
wrangler tailを使用して処理ログを確認してください- Worker のコードにエラーがないか確認してください(forward() の周囲に try/catch を追加)
- MX レコードが引き続き Cloudflare を指していることを確認してください
問題:ワーカーログを確認できない
解決方法:
- ライブログには
wrangler tail --format prettyを使用します - ワーカーに
console.log()文を十分に追加します - 後で確認できるよう、デバッグ情報を D1 または KV に保存します
- ログの保持期間を延長するには、Workers Paid プランにアップグレードします
問題:「failed to call worker」でワーカーがクラッシュする
解決方法:
- すべての処理に try/catch によるエラーハンドリングを追加します
- 外部 API 呼び出しにタイムアウトを設定します
- さまざまなメール形式(プレーンテキスト、HTML、添付ファイル)でテストします
- ワーカーが CPU/メモリの上限を超えていないことを確認します
- ブロッキングしない処理には
ctx.waitUntil()を使用します
高度なトピック
メール添付ファイルの解析
import PostalMime from 'postal-mime';
export default {
async email(message, env, ctx) {
const parser = new PostalMime.default();
const email = await parser.parse(await new Response(message.raw).arrayBuffer());
// Access attachments
if (email.attachments && email.attachments.length > 0) {
for (const attachment of email.attachments) {
console.log('Attachment:', attachment.filename);
console.log('Type:', attachment.mimeType);
console.log('Size:', attachment.content.length);
// Store in R2
await env.BUCKET.put(
`emails/${Date.now()}-${attachment.filename}`,
attachment.content
);
}
}
await message.forward('[email protected]');
},
};
メールによるタスクの作成
import PostalMime from 'postal-mime';
export default {
async email(message, env, ctx) {
const parser = new PostalMime.default();
const email = await parser.parse(await new Response(message.raw).arrayBuffer());
// Extract task from email subject
const taskMatch = email.subject.match(/\[TASK\](.*)/i);
if (taskMatch) {
const taskDescription = taskMatch[1].trim();
// Create task in D1
await env.DB.prepare(
'INSERT INTO tasks (description, created_by, created_at) VALUES (?, ?, ?)'
).bind(
taskDescription,
message.from,
new Date().toISOString()
).run();
// Send confirmation
await message.reply(new EmailMessage(
'[email protected]',
message.from,
`Task created: ${taskDescription}`
));
}
},
};
メールをトリガーとするワークフロー
export default {
async email(message, env, ctx) {
// Trigger Cloudflare Workflow based on email
if (message.from.endsWith('@trusted-domain.com')) {
await env.WORKFLOW.create({
params: {
emailFrom: message.from,
emailTo: message.to,
receivedAt: new Date().toISOString(),
},
});
}
await message.forward('[email protected]');
},
};
依存関係
必須:
[email protected]- 受信メールメッセージを解析します[email protected]- 送信用のメールメッセージを作成します
組み込み:
cloudflare:email- EmailMessage クラス(インストール不要)
任意:
@cloudflare/workers-types- TypeScript の型定義
公式ドキュメント
- メールルーティング:https://developers.cloudflare.com/email-routing/
- メールワーカー:https://developers.cloudflare.com/email-routing/email-workers/
- メール送信:https://developers.cloudflare.com/email-routing/email-workers/send-email-workers/
- ランタイム API:https://developers.cloudflare.com/email-routing/email-workers/runtime-api/
- ローカル開発:https://developers.cloudflare.com/email-routing/email-workers/local-development/
- postal-mime:https://www.npmjs.com/package/postal-mime
- mimetext:https://www.npmjs.com/package/mimetext
パッケージのバージョン(2025-10-23 確認済み)
{
"dependencies": {
"postal-mime": "^2.5.0",
"mimetext": "^3.0.27"
},
"devDependencies": {
"@cloudflare/workers-types": "^4.20251014.0",
"wrangler": "^4.44.0"
}
}
質問や問題がありますか?
- 詳細なトラブルシューティングについては、
references/common-errors.mdを確認してください - DNS 設定については、
references/dns-setup.mdを確認してください - テストのパターンについては、
references/local-development.mdを参照してください - 公式ドキュメントを確認してください:https://developers.cloudflare.com/email-routing/
- ライブデバッグには
wrangler tailを使用してください - すべての宛先アドレスがダッシュボードで認証済みであることを確認してください