第25章: Email Routing による受信メールのエッジ処理
メールサーバー(Postfix等)を自前運用したり有料のメール受信SaaSを契約することなく、Cloudflare Email Routing と Workers を連携させることで、届いたメールをイベント駆動でエッジ処理できます。
本チュートリアルのゴール
wrangler.jsoncでのメールハンドラー(Email Workers)の有効化- 受信メールの送信元・件名・本文の抽出
- Slack/Discordへの通知転送およびR2への添付ファイル自動保存
Step 1: wrangler.jsonc の設定
{ "name": "email-parser-worker", "main": "src/index.ts", "compatibility_date": "2024-09-01"}Step 2: メールハンドラー(email)の実装
import { EmailMessage } from 'cloudflare:email';
export default { // 受信メール処理ハンドラー async email(message: ForwardableEmailMessage, env: Env, ctx: ExecutionContext) { const sender = message.from; const recipient = message.to; const subject = message.headers.get('subject') || '(件名なし)';
console.log(`[メール受信] From: ${sender}, To: ${recipient}, Subject: ${subject}`);
// メール生データ(MIME/RFC822)の読み取り const rawEmail = await new Response(message.raw).text();
// 例: 特定の宛先(alert@my-domain.com)ならSlack通知に転送 if (recipient.startsWith('alert@')) { ctx.waitUntil( fetch('https://hooks.slack.com/services/xxx/yyy/zzz', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ text: `🚨 受信アラートメール\n差出人: ${sender}\n件名: ${subject}`, }), }) ); } else { // 通常の個人アドレスへそのまま転送 await message.forward('my-personal@gmail.com'); } }};Step 3: Cloudflareダッシュボードでのルーティング設定
- Email Routing > Routing rules に移動
- カスタムアドレス(例:
contact@my-domain.com)の宛先に、デプロイしたemail-parser-workerを選択 - 有効化するだけで、届いたメールが自動的にWorkerで解析されます。
💡 用語解説コラム
[!NOTE] RFC 822 / MIME形式
インターネット上でやり取りされる電子メールの標準データ構造(ヘッダー、本文、添付ファイルなど)。Email Workersはこの生データをエッジでパースできます。