wrangler dev でメール送信をローカルテストし、配信をシミュレートします。デプロイ前に送信ロジックを確認できます。
- Cloudflare アカウント ↗ に登録します。
Node.js↗ をインストールします。
Node.js のバージョンマネージャー
権限の問題を避け、Node.js のバージョンを切り替えられるよう、Volta ↗ や nvm ↗ などの Node バージョンマネージャーを使います。このガイドの後半で説明する Wrangler には、Node バージョン 16.17.0 以降が必要です。
Wrangler ファイルにメールバインディングを設定します。
{
"name": "email-sending-worker",
// Set this to today's date
"compatibility_date": "2026-09-20",
"send_email": [{ "name": "EMAIL" }],
}name = "email-sending-worker"
# Set this to today's date
compatibility_date = "2026-09-20"
[[send_email]]
name = "EMAIL"Email Service をローカルで開発するときは、リモートバインディング の利用を推奨します。デフォルトでは wrangler dev がメールバインディングをローカルでシミュレートします。メールはコンソールに記録されますが、実際には送信されません。リモートバインディングを使うと、Worker はローカルで動き、メールは Email Service 経由で実際に送信されます。
Wrangler 設定のメールバインディングで remote: true を設定します。
{
"name": "email-sending-worker",
// Set this to today's date
"compatibility_date": "2026-09-20",
"send_email": [
{
"name": "EMAIL",
"remote": true,
},
],
}name = "email-sending-worker"
# Set this to today's date
compatibility_date = "2026-09-20"
[[send_email]]
name = "EMAIL"
remote = trueそのあと、いつもどおり wrangler dev を実行します。env.EMAIL.send() の呼び出しは Email Service 経由で実際のメールを送り、Worker のコードはローカルで実行されます。
リモートバインディングなしで wrangler dev を実行すると、メールバインディングはローカルでシミュレートされます。メールは送信されません。代わりに、メール本文がコンソールに記録され、確認用のローカルファイルにも保存されます。
export default {
async fetch(request, env, ctx) {
if (request.method !== "POST") {
return new Response("Method not allowed", { status: 405 });
}
try {
const emailData = await request.json();
console.log("Sending email:", {
to: emailData.to,
from: emailData.from,
subject: emailData.subject,
});
const response = await env.EMAIL.send(emailData);
return new Response(
JSON.stringify({
success: true,
id: response.messageId,
}),
{
headers: { "Content-Type": "application/json" },
},
);
} catch (error) {
return new Response(
JSON.stringify({
success: false,
error: error.message,
}),
{
status: 500,
headers: { "Content-Type": "application/json" },
},
);
}
},
};開発サーバーを起動します。
npx wrangler devテストメールを送信します。
curl -X POST http://localhost:8787/ \
-H "Content-Type: application/json" \
-d '{
"to": "recipient@example.com",
"from": "sender@yourdomain.com",
"subject": "Test Email",
"html": "<h1>Hello from Wrangler!</h1>",
"text": "Hello from Wrangler!"
}'Wrangler は次のような出力を表示します。
[wrangler:info] send_email binding called with MessageBuilder:
From: sender@yourdomain.com
To: recipient@example.com
Subject: Test Email
Text: /tmp/miniflare-.../files/email-text/<message-id>.txtメール本文(テキストと HTML)はローカルファイルに保存されます。デプロイ前にメールの構成を確認できます。
ローカル開発では send_email バインディングをローカルでシミュレートしますが、添付の content にある ArrayBuffer 値は、ローカルシミュレーターではシリアライズできません。画像や PDF の添付などで ArrayBuffer を渡すと、次のようなエラーが出ます。
Cannot serialize value: [object ArrayBuffer]回避策: ローカル開発では、テキストベースの添付に文字列コンテンツを使います。バイナリ添付(画像、PDF)をテストする場合は、npx wrangler deploy で Worker をデプロイし、デプロイ済みのバージョンに対してテストします。
この制限はローカル開発にだけ影響します。デプロイ済みの Workers では ArrayBuffer コンテンツは正しく動作します。