メール送信のインフラを外部サービスに依存せず、自分のサーバーかCloudflareエッジで完結させられます。
この記事では、Cloudflare Email Sendingをベースに構築されたOSSのメール送信プラットフォーム「EmailFlare」を紹介します。
この記事でわかること:
- EmailFlareの概要と解決できる課題
- REST API・テンプレート・管理画面など主な機能の詳細
- DockerとCloudflare Workersの2通りのデプロイ手順
- SendGridやResendとの比較ポイント
EmailFlareとは
https://github.com/0xdps/emailflare
EmailFlareは、Cloudflare Email Sendingを土台にしたセルフホスト型のメール送信プラットフォームです。2026年4月にGitHubで公開され、MITライセンスで提供されています。公開から2週間あまりでスターが100を超えており、需要の高さが伺えます。
バックエンドにHono API、管理画面にReact 19 + Vite + TanStack Router、データストアにSQLiteを採用しています。PostgresもRedisも必要なく、すべてDockerコンテナ1本に収まる構成が特徴です。
どんな課題を解決するか
SendGridやResendのようなSaaS型メール送信サービスは手軽な反面、月間送信数に応じた費用が発生し、メールログなどのデータが外部サービス側に保管されます。スタートアップや個人開発者にとって、送信量が増えると費用が積み上がる構造は無視できません。
EmailFlareはCloudflare Email Sendingを直接叩くため、送信コストはCloudflareの料金体系に準じます。メールの配信ロジック・テンプレート管理・ドメイン設定をすべて自分のインフラ内で完結させられる点が最大の強みです。
主な機能
シンプルなREST API
1つのエンドポイントで送信が完結します。BearerトークンによるAPIキー認証を採用しており、キーはスコープ別に発行・ローテーション・失効が可能です。Cloudflareのマスタートークンをアプリに直接渡す必要がなく、最小権限の原則に沿った運用ができます。
レスポンスにはX-RateLimit-Limit・X-RateLimit-Remaining・X-RateLimit-Resetヘッダーが自動付与されます。
テンプレート機能
React Emailで作成したメールレイアウトをテンプレートとして登録し、送信時にスラッグと変数を渡すだけで動的なHTMLメールを生成できます。テンプレートIDの代わりにsubjectとhtmlを直接渡す生送信にも対応しています。
管理画面
ドメイン管理・テンプレート管理・APIキー管理・送信ログの確認が、React製の管理UIから操作できます。デプロイ後すぐにhttp://localhost:8090でアクセス可能です。
テストモード
テスト用APIキーを使うと、Cloudflare Email Sending APIを経由せずSMTP経由で送信をルーティングします。MailpitやMailtrapなどのメールキャッチャーに向けるだけでよく、開発中に本物のメールが飛ぶ心配がありません。ローカル開発用のcompose.dev.yamlにはMailpitがあらかじめ同梱されています。
2通りのデプロイ方法
方法1:Dockerで自己ホスト
バックエンド・管理画面・SQLiteストレージが1つのDockerイメージに同梱されています。公開済みイメージ(ghcr.io/0xdps/emailflare:latest)を使えばローカルビルドは不要です。
cp .env.example .env.local
# Cloudflare APIトークン・アカウントIDなどを記入
docker compose --env-file .env.local -f compose.yaml up -d
ストレージはmesahub-core経由の組み込みSQLiteで動作します。/dataボリュームを永続化するだけでよく、別途データベースサービスを立てる必要はありません。
方法2:Cloudflare Workersにデプロイ
DockerもVMも不要なサーバーレス構成です。Cloudflare D1(SQLite互換)とKVをデータストアとして使い、APIと管理画面パネルをエッジで動かします。
just install
cp scripts/config.example.toml scripts/config.toml
# 値を記入
just worker-setup
Railwayでの1クリックデプロイにも対応しており、必要な環境変数はCF_API_TOKENとCF_ACCOUNT_IDの2つを渡すだけです。
最低限必要な環境変数
起動に必要な変数は以下のとおりです。
| 変数名 | 用途 |
|---|---|
ADMIN_TOKEN |
管理画面ログイン用トークン |
SESSION_SECRET |
セッション署名用のシークレット |
MESAHUB_URL |
ストレージの向き先(mh://local/emailflareでローカルSQLite) |
CF_API_TOKEN |
Cloudflare APIトークン |
CF_ACCOUNT_ID |
CloudflareアカウントID |
ADMIN_TOKENとSESSION_SECRETはopenssl rand -hex 32で生成するのが手軽です。スキーマはアプリ起動時にCREATE TABLE IF NOT EXISTSで自動構築されるため、マイグレーションコマンドを手動で実行する必要もありません。
SendGrid・Resendとの比較
SendGridやResendはクラウドマネージドのメール送信サービスで、セットアップの簡単さが強みです。ただし、メールログなどのデータが外部サービス側に保管される点と、送信数に応じた費用が継続的に発生する点は避けられません。
EmailFlareはインフラを自分で管理する代わりに、すべてのデータを自分のサーバーかCloudflareエッジ内に閉じ込められます。Cloudflare Email Sendingは無料枠が存在するため、送信量が多くなければほぼゼロコストでの運用も視野に入ります。管理コストより手軽さを優先するならSaaS、データの管理範囲やランニングコストを重視するチームにはEmailFlareが有力な選択肢になります。
まとめ
EmailFlareは公開からまだ数週間のプロジェクトですが、Cloudflare Workers対応・React Emailテンプレート・テストモードなど本番運用を想定した機能がすでに揃っています。MITライセンスのため商用利用も自由で、コードを読んで改造することも容易です。外部メールサービスへの依存を減らしたい、あるいはCloudflareをすでに使っているチームにとって、導入コストの低い選択肢になります。