Resend APIを使ったメール送信方法:完全ガイド (2026年版)
Resend の開発者フレンドリーな API でトランザクションメールを送信しましょう
Hyperealで構築を始めよう
Kling、Flux、Sora、Veoなどに単一のAPIでアクセス。無料クレジットで開始、数百万規模まで拡張可能。
クレジットカード不要 • 10万人以上の開発者 • エンタープライズ対応
Resend APIを使用したメール送信:完全ガイド (2026年版)
Resendは、古いメールインフラとの格闘に疲れた開発者のために構築された最新のメールAPIです。React Emailの開発チームによって作成されたResendは、クリーンなAPI、優れた到達性、そしてNext.js、Node.js、Pythonなどのフレームワークへの最高クラスのサポートを提供します。
このガイドでは、アカウントの設定から本番環境向けのコード例まで、Resendを使用してトランザクションメールの送信を開始するために必要なすべてを解説します。
なぜ Resend なのか?
詳細に入る前に、Resendと他の選択肢を比較してみましょう。
| 機能 | Resend | SendGrid | Amazon SES | Postmark |
|---|---|---|---|---|
| 無料枠 | 3,000通/月 | 100通/日 | 62,000通/月 (12ヶ月間) | 100通/月 |
| 最低料金 | $20/月 | $19.95/月 | 1,000通あたり $0.10 | $15/月 |
| React Email サポート | 標準対応 | なし | なし | なし |
| APIの簡潔さ | 非常に優れている | 普通 | 複雑 | 良好 |
| Webhook サポート | あり | あり | あり (SNS経由) | あり |
| カスタムドメイン | あり | あり | あり | あり |
Resendは、その開発者体験(DX)において際立っています。APIは最小限で、ドキュメントは素晴らしく、JSXを使用して美しいテンプレートを構築できるReact Emailとネイティブに統合されています。
前提条件
開始する前に、以下が準備されていることを確認してください。
- Resend アカウント (resend.com で登録)
- 認証済みドメイン(またはテスト用のサンドボックス
onboarding@resend.devを使用) - Node.js 18+ または Python 3.7+ がインストールされていること
- Resend ダッシュボードから取得した API key
ステップ 1: API Key の取得
- resend.com の Resend ダッシュボードにログインします。
- サイドバーの API Keys に移動します。
- Create API Key をクリックします。
- "Production" などの名前を付け、適切な権限を選択します。
- キーをすぐにコピーしてください。
re_で始まるこのキーは、一度しか表示されません。
# API keyを環境変数として保存します
export RESEND_API_KEY="re_your_api_key_here"
ステップ 2: ドメインの認証
サンドボックスの代わりに独自のドメインからメールを送信するには、DNSレコードを認証する必要があります。
- Resend ダッシュボードの Domains に移動します。
- Add Domain をクリックし、ドメインを入力します(例:
mail.yourdomain.com)。 - Resend が提供する DNS レコードをドメインレジストラ(お名前.comやCloudflareなど)に追加します。
| レコードタイプ | ホスト名 | 値 |
|---|---|---|
| TXT | _resend.yourdomain.com |
認証文字列 |
| MX | bounce.yourdomain.com |
Resend提供の値 |
| TXT | bounce.yourdomain.com |
SPFレコード |
| CNAME | resend._domainkey.yourdomain.com |
DKIMレコード |
- DNSレコードが浸透したら(通常 5〜30 分)、Verify をクリックします。
ステップ 3: 最初のメールを送信する
cURL を使用する場合
APIをテストする最も簡単な方法です。
curl -X POST 'https://api.resend.com/emails' \
-H 'Authorization: Bearer re_your_api_key_here' \
-H 'Content-Type: application/json' \
-d '{
"from": "You <hello@yourdomain.com>",
"to": ["recipient@example.com"],
"subject": "Hello from Resend",
"html": "<h1>Welcome!</h1><p>Your first email via Resend API.</p>"
}'
成功すると、200 ステータスと email ID が返されます。
{
"id": "49a3999c-0ce1-4ea6-ab68-afcd6dc2e794"
}
Node.js を使用する場合
公式 SDK をインストールします。
npm install resend
メールを送信します。
import { Resend } from 'resend';
const resend = new Resend(process.env.RESEND_API_KEY);
async function sendEmail() {
const { data, error } = await resend.emails.send({
from: 'You <hello@yourdomain.com>',
to: ['recipient@example.com'],
subject: 'Hello from Resend',
html: '<h1>Welcome!</h1><p>Your first email via Resend.</p>',
});
if (error) {
console.error('Failed to send email:', error);
return;
}
console.log('Email sent:', data.id);
}
sendEmail();
Python を使用する場合
Python SDK をインストールします。
pip install resend
メールを送信します。
import resend
import os
resend.api_key = os.environ["RESEND_API_KEY"]
params: resend.Emails.SendParams = {
"from": "You <hello@yourdomain.com>",
"to": ["recipient@example.com"],
"subject": "Hello from Resend",
"html": "<h1>Welcome!</h1><p>Your first email via Resend.</p>",
}
email = resend.Emails.send(params)
print(f"Email sent: {email['id']}")
ステップ 4: React Email テンプレートの使用
Resend の最大の利点の一つは、ネイティブな React Email サポートです。生の HTML テーブルを書く代わりに、JSX コンポーネントでメールテンプレートを構築できます。
React Email をインストールします。
npm install @react-email/components
テンプレートを作成します。
// emails/welcome.tsx
import { Html, Head, Body, Container, Text, Button } from '@react-email/components';
export default function WelcomeEmail({ name }: { name: string }) {
return (
<Html>
<Head />
<Body style={{ fontFamily: 'Arial, sans-serif', backgroundColor: '#f4f4f5' }}>
<Container style={{ maxWidth: '600px', margin: '0 auto', padding: '20px' }}>
<Text style={{ fontSize: '24px', fontWeight: 'bold' }}>
ようこそ、{name}さん!
</Text>
<Text>
ご登録ありがとうございます。あなたをメンバーとしてお迎えできて嬉しく思います。
</Text>
<Button
href="https://yourdomain.com/dashboard"
style={{
backgroundColor: '#000',
color: '#fff',
padding: '12px 24px',
borderRadius: '6px',
textDecoration: 'none',
}}
>
ダッシュボードへ移動
</Button>
</Container>
</Body>
</Html>
);
}
Resend でテンプレートを送信します。
import { Resend } from 'resend';
import WelcomeEmail from './emails/welcome';
const resend = new Resend(process.env.RESEND_API_KEY);
await resend.emails.send({
from: 'You <hello@yourdomain.com>',
to: ['recipient@example.com'],
subject: 'プラットフォームへようこそ',
react: WelcomeEmail({ name: 'Alice' }),
});
ステップ 5: Webhooks の処理
Resend は、メールの到達、バウンス、開封などのイベントをサーバーに通知できます。
- Resend ダッシュボードの Webhooks に移動します。
- エンドポイント URL を追加します(例:
https://yourdomain.com/api/webhooks/resend)。 - 受信したいイベントを選択します。
API ルートで Webhook を処理します。
// app/api/webhooks/resend/route.ts (Next.js App Router)
import { NextRequest, NextResponse } from 'next/server';
export async function POST(req: NextRequest) {
const body = await req.json();
switch (body.type) {
case 'email.delivered':
console.log(`Email ${body.data.email_id} が ${body.data.to} に到達しました`);
break;
case 'email.bounced':
console.log(`Email ${body.data.email_id} がバウンスしました`);
// データベースから無効なメールアドレスを削除するなどの処理
break;
case 'email.complained':
console.log(`Email ${body.data.email_id} がスパム報告されました`);
// ユーザーの購読を解除するなどの処理
break;
}
return NextResponse.json({ received: true });
}
主な Webhook イベント
| イベント | 説明 |
|---|---|
email.sent |
Resend によってメールが受理された |
email.delivered |
受信者のメールサーバーに到達した |
email.bounced |
バウンスした(宛先不明など) |
email.complained |
受信者によってスパムとしてマークされた |
email.opened |
受信者がメールを開封した |
email.clicked |
受信者がリンクをクリックした |
ステップ 6: バッチ送信(一括送信)
一度に複数のメールを送信する必要がある場合は、batch エンドポイントを使用します。
const { data, error } = await resend.batch.send([
{
from: 'You <hello@yourdomain.com>',
to: ['user1@example.com'],
subject: '週次レポート',
html: '<p>レポートはこちらです...</p>',
},
{
from: 'You <hello@yourdomain.com>',
to: ['user2@example.com'],
subject: '週次レポート',
html: '<p>レポートはこちらです...</p>',
},
]);
batch エンドポイントは、1回のリクエストで最大100通までサポートしています。
エラーハンドリングのベストプラクティス
Resend API を使用する際は、常にエラーを適切に処理してください。
import { Resend } from 'resend';
const resend = new Resend(process.env.RESEND_API_KEY);
async function sendWithRetry(params, maxRetries = 3) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
const { data, error } = await resend.emails.send(params);
if (!error) return data;
if (error.statusCode === 429) {
// レート制限 - 待機してから再試行
const delay = Math.pow(2, attempt) * 1000;
console.log(`レート制限に達しました。${delay}ms 後に再試行します...`);
await new Promise(resolve => setTimeout(resolve, delay));
continue;
}
// 再試行不可能なエラー
throw new Error(`Resend API エラー: ${error.message}`);
}
throw new Error('最大試行回数を超えました');
}
レート制限(Rate Limits)
| プラン | レート制限 |
|---|---|
| Free | 2 通/秒 |
| Pro | 50 通/秒 |
| Enterprise | カスタム |
クイックリファレンス: API エンドポイント
| エンドポイント | メソッド | 説明 |
|---|---|---|
/emails |
POST | 単一メールの送信 |
/emails/{id} |
GET | メールの詳細を取得 |
/emails/{id} |
PATCH | スケジュールされたメールの更新 |
/emails/batch |
POST | 最大100通まで送信 |
/domains |
GET | 認証済みドメインの一覧取得 |
/domains |
POST | 新しいドメインの追加 |
/api-keys |
POST | API key の作成 |
おわりに
Resend は、開発者にとってトランザクションメールをシンプルにしてくれます。クリーンな API、React Email との統合、そして寛大な無料枠により、あらゆる規模のプロジェクトにおいて優れた選択肢となります。まずはテスト用のサンドボックスから始め、本番環境用にドメインを認証し、Webhook を活用して配信状況を追跡しましょう。
もし、AI 生成画像や動画のサムネイルをメールで送信するなど、メールワークフローと並行してメディア生成が必要なアプリケーションを構築している場合は、Hypereal AI をチェックしてみてください。Hypereal は、AI 画像生成や動画作成などのシンプルな API を提供しており、トランザクションメールのパイプラインと完璧に組み合わせることができます。
