結論(おすすめ1つ)
Resend に乗り換えるべき。
React Email との統合が標準で、TypeScript 型定義がファーストクラス対応であるため、現代的なスタック(Next.js / Node.js)と最も摩擦なく繋がる。SMTP リレーではなく HTTP API 単一エンドポイントで完結するため、Mailchimp の複雑な設定を捨てて 30 分以内に本番送信まで到達できた。DKIM・SPF の DNS 設定も管理画面で自動生成されるので、メール到達率の確保を自分でゼロから調べる必要がない。
比較表(料金/無料枠/移行コスト/対応言語)
| ツール | 無料枠 | 料金 | 移行コスト | 主な対応言語 |
|---|---|---|---|---|
| Resend | あり(公式の料金ページで要確認) | 従量課金+月額プラン | 低:HTTP API のみ | Node / Python / Go / Ruby / PHP / Elixir など公式 SDK 多数 |
| Postmark | あり(テスト用クレジット) | 送信数従量課金(公式要確認) | 低〜中:SMTP と API 両対応 | Node / PHP / Ruby / Python / .NET / Go |
| SendGrid | あり(公式の料金ページで要確認) | 従量課金+月額プラン | 中:ライブラリが旧世代気味 | 主要言語ほぼ網羅 |
| Mailgun | 試用枠あり(公式要確認) | 従量課金 | 中:ドメイン認証設定が煩雑 | Node / Python / PHP / Ruby / Java |
| AWS SES | 無料枠あり(EC2 経由に条件) | 最安水準(公式要確認) | 高:IAM / バウンス処理を自前実装 | AWS SDK 全対応 |
Mailchimp Transactional(旧 Mandrill)は Mailchimp 本体との強制バンドルが最大の痛点だった。上記の代替はいずれも単独契約できる。
移行手順
ここでは Resend への移行を例示する。
Step 1: SDK インストール
npm install resend
# Python の場合
pip install resend
Step 2: API キー取得と環境変数設定
Resend ダッシュボード → API Keys → Create API Key でキーを発行する。
# .env
RESEND_API_KEY=re_xxxxxxxxxxxxxxxxxxxx
Step 3: 送信ドメインの DNS 設定
ダッシュボード → Domains → Add Domain でドメインを追加すると、以下の形式のレコードが表示される。これを DNS プロバイダへ登録する。
TXT resend._domainkey.example.com "v=DKIM1; k=rsa; p=..."
TXT example.com "v=spf1 include:amazonses.com ~all"
検証完了まで数分〜数時間かかる。
Step 4: 最小送信コード(Node.js)
import { Resend } from 'resend';
const resend = new Resend(process.env.RESEND_API_KEY);
async function sendTransactional(to: string, orderId: string) {
const { data, error } = await resend.emails.send({
from: 'no-reply@example.com',
to,
subject: `注文確認 #${orderId}`,
html: `<p>ご注文ありがとうございます。注文番号: <strong>${orderId}</strong></p>`,
});
if (error) throw new Error(error.message);
return data;
}
Step 5: Mailchimp Transactional からの切り替え
旧コードで mailchimp_transactional.ApiClient を呼んでいた箇所を上記関数に置換する。テンプレート ID による呼び出しを使っていた場合は、React Email または通常の HTML 文字列テンプレートへ変換する。
# 旧コードの参照箇所を一括確認
grep -r "mailchimp_transactional\|mandrill" src/
Step 6: バウンス・Webhook 設定
ダッシュボード → Webhooks → Add Endpoint でバウンスや配信失敗イベントを自前 API エンドポイントへ転送するよう設定する。Mailchimp 側の Webhook 設定は削除してよい。
向き不向き
向いているチーム・ケース
- TypeScript / Node.js または Python ファーストのスタックで開発している小〜中規模チーム
- React Email でメールテンプレートをコンポーネント化したい場合(Resend が最適)
- Mailchimp の月額コストを削りたい、かつトランザクション送信に特化したい場合
- SES を使いたいが IAM 管理やバウンス処理の自前実装工数を払いたくない場合(Resend/Postmark が SES 上で動く構成を取ることもある)
避けるべきケース・注意点
- 大量の既存 Mandrill テンプレート(Handlebars 形式)をそのまま移植したい場合:変換工数がかかる。SendGrid の Dynamic Templates の方が構文が近い
- 送信数が月数百万通を超える規模で単価を極限まで下げたい場合:AWS SES の直接利用が費用面では有利だが、バウンス処理・レピュテーション管理を自前で担う覚悟が必要
- .NET / Java がメインで公式 SDK の成熟度を重視する場合:SendGrid または Postmark の方が実績が長い
- SMTP リレーを既存インフラ(レガシー PHP など)から変えられない場合:Resend より Postmark や Mailgun の SMTP エンドポイントを使う方が移行コストが低い
Top comments (0)