# 1 つのフォームを複数のメールアドレスに送る

> 1 つのフォームをチーム全員にメールで送ったり、トピックごとに適切な担当者に振り分けたり。ただし、誰に送るかをフォーム自身には決めさせません。

公開日 2026-10-25 · https://ikiform.com/ja/guides/send-form-to-email/multiple-recipients

ダッシュボードで各メンバーをフォームの受信者に追加します。ワークスペースのメンバーはチェックを入れるだけ、それ以外の人は確認リンクで、最大 10 アドレスまでです。全員が、すべての送信データのコピーを個別に受け取ります。営業の質問はある人に、サポートは別の人に送りたい場合は、代わりに Webhook でフィールドをもとに振り分けます。

## ここが違う

古い PHP スクリプトや一部のフォームサービスでは、hidden の `to` や `cc` フィールドで、フォーム自身が受信者を指定できます。便利ですが、お問い合わせフォームがスパムのリレーになるのもこの仕組みのせいです。ボットが hidden フィールドを書き換えると、サーバーがあなたのドメインから好きな相手にメールを送ってしまいます。Ikiform には受信者のフィールドがありません。誰にメールを送るかはダッシュボードで設定し、ワークスペース外の人は先に確認が必要です。

そのため、ここには 2 つの別々の作業があり、それぞれ別の場所で解決します:

| したいこと | 設定する場所 | 上限 |
| --- | --- | --- |
| 全員がすべての送信データを受け取る | フォームの **Notifications** 設定の受信者 | フォームごとに 10 アドレス |
| 送信データごとに適切な担当者へ送る | フィールドを読んで 1 つのチームにメールする Webhook | ワークスペースごとに Webhook エンドポイント 3 つ |

## すべての送信データをチーム全員に送る

図: 1 件の送信データにつき、受信者ごとに 1 通のメール

1. フォームは Ikiform に 1 回送信します。
2. Ikiform が受信者リストを作ります。このフォームでチェックしたメンバー（またはワークスペースのデフォルト）に、確認済みの外部アドレスを加えたものです。
3. 重複は除かれ、リストは 10 件で打ち切られます。
4. 受信者ごとに別々のメールが届くので、ほかの人のアドレスは誰にも見えません。
5. 確認待ちのアドレスと、バウンス後に一時停止されたアドレスはスキップされます。

コピーが別々なので、誰かが返信してもほかの人には共有されません。5 人を追加する前に、誰が何に答えるかを決めておきましょう。

1. ダッシュボードでフォームを開き、**Settings**、**Notifications** の順に進みます。**Email new submissions** がオンになっていることを確認します。
2. メールを受け取るワークスペースのメンバーにチェックを入れます。表示されるのは、アドレスが確認済みのメンバーだけです。
3. ワークスペース外の人は、**Add someone outside the workspace** にアドレスを入力して **Send link** を押します。フォームごとに 5 件まで追加できます。
4. 相手に確認してもらいます。確認されるまで、その行には **Waiting for confirmation** と表示され、何も届きません。

外部の受信者には送信データのフィールドと配信停止リンクが表示されます。アカウントがないので、ダッシュボードへのリンクはありません。メンバーには **View submission** ボタンが表示されます。誰かが抜けたらその行を削除してください。配信停止した場合は、行も自動で消えます。

> 10 人を超える場合や、メンバーがよく入れ替わるチームの場合は、Google グループやメールエイリアスのような共有アドレスを 1 つだけ受信者にして、メンバーはそちらで管理してください。

### メンバーと外部アドレス

2 種類の受信者は動作が異なるので、誰をどこに追加するかを決めるときに重要です:

|   | ワークスペースのメンバー | 外部アドレス |
| --- | --- | --- |
| 追加方法 | フォームでチェックを入れる | **Send link** のあと、本人が確認 |
| メールに表示されるもの | フィールドと **View submission** ボタン | フィールドと配信停止リンク |
| ダッシュボードを開ける | はい | いいえ |
| メールが止まるとき | チェックを外したとき、またはワークスペースを抜けたとき | 行を削除したとき、または本人が配信停止したとき |
| カウント対象 | 10 アドレスの上限 | 10 アドレスの上限と、フォームごとの外部アドレス 5 件 |

メッセージに対応する人にはワークスペースの席を用意し、過去の送信データやスパムも見られるようにしましょう。マネージャーや共有の受信箱など、知っておくだけでよい相手には外部アドレスを使います。

## トピックごとに送信データを振り分ける

受信者を、訪問者が選んだ内容によって変えることはできません。そうしたい場合は、チームを示すフィールドを追加し、小さな Webhook ハンドラーにアドレスを選ばせます。フォームは次のとおりです:

`contact.html`:

```html
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
  <label for="department">Who should read this?</label>
  <select id="department" name="department" required>
    <option value="sales">Sales</option>
    <option value="support">Support</option>
    <option value="billing">Billing</option>
  </select>

  <label for="name">Name</label>
  <input id="name" name="name" autocomplete="name" required />

  <label for="email">Email</label>
  <input id="email" name="email" type="email" autocomplete="email" required />

  <label for="message">Message</label>
  <textarea id="message" name="message" rows="5" required></textarea>

  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
  <button>Send</button>
</form>
```

ダッシュボードで `department` を `select` フィールドとして定義すれば、送信に含められるのは `sales`、`support`、`billing` だけになります。それ以外を送るボットは `422 validation_failed` を受け取り、ハンドラーには届きません。

次にハンドラーです。署名を検証し、`department` からチームを選び、自分のメールプロバイダー（ここでは Resend）経由で送信します。自分でメールを送るので、件名も自由に決められます:

`app/api/route-message/route.ts`:

```ts
import { Resend } from "resend";
import { verifyWebhook, WebhookVerificationError } from "@ikiform/sdk/webhooks";

const resend = new Resend(process.env.RESEND_API_KEY);

const TEAMS: Record<string, string[]> = {
  sales: ["sales@example.com"],
  support: ["support@example.com", "oncall@example.com"],
  billing: ["accounts@example.com"],
};

export async function POST(request: Request) {
  const payload = await request.text();
  try {
    const event = await verifyWebhook({
      payload,
      headers: request.headers,
      secret: process.env.IKIFORM_WEBHOOK_SECRET!,
    });
    if (event.type !== "submission.created") return new Response(null, { status: 204 });

    const fields = event.data.fields;
    const department = String(fields.department ?? "support");
    const { error } = await resend.emails.send(
      {
        from: "Website <forms@example.com>",
        to: TEAMS[department] ?? TEAMS.support,
        replyTo: typeof fields.email === "string" ? fields.email : undefined,
        subject: `[${department}] ${String(fields.name ?? "New message")}`,
        text: Object.entries(fields)
          .map(([key, value]) => `${key}: ${String(value)}`)
          .join("\n"),
      },
      { idempotencyKey: event.id },
    );
    if (error) return new Response(error.message, { status: 502 });
    return new Response(null, { status: 204 });
  } catch (error) {
    if (error instanceof WebhookVerificationError) return new Response(error.reason, { status: 400 });
    throw error;
  }
}
```

- アドレスはフォームではなくコードの中にあります。訪問者が選ぶのはチーム名であって、アドレスではありません。
- `replyTo` により、Ikiform 自身のメールと同じく **Reply** は訪問者宛てになります。
- `idempotencyKey: event.id` により、リトライされた配信では新たに何も送られません。Ikiform は `2xx` を受け取れなかった配信を、同じ ID でリトライします。
- プロバイダーが失敗したときに `502` を返すと Ikiform が後でリトライするので、短い障害でメッセージが失われることはありません。
- 不明な部署や部署の指定がない場合は、メッセージを捨てずに support に回します。

ダッシュボードの **Webhooks** に URL を追加し、その `whsec_` シークレットを `IKIFORM_WEBHOOK_SECRET` にコピーします。リトライとペイロードについては [Webhook のドキュメント](https://ikiform.com/ja/docs/webhooks.md)にあります。コードを書きたくなければ、部署ごとにフィルターを付けた [Zapier](https://ikiform.com/blog/form-submissions-to-zapier.md) や [n8n](https://ikiform.com/blog/form-submissions-to-n8n.md) のフローでも同じことができます。

保険として 1 人分だけ Ikiform 自身のメールをオンにしておくか、**Email new submissions** をオフにして、誰もメッセージを 2 通受け取らないようにします。

## 動作を確認する

1. フォームの **Notifications** 設定で、受信者の行をすべて確認します。**Waiting for confirmation** と表示されている行があってはいけません。
2. ページのフォームに入力して送信します。自分のサンクスページか、Ikiform のサンクスページに移動します。
3. 受信者はそれぞれ自分宛てのメールを受け取ります。誰か 1 人に **To** 欄を確認してもらってください。本人のアドレスだけが表示されています。
4. Webhook で振り分ける場合は、部署ごとに 1 回ずつ送信し、**Webhooks** の配信ログを確認します。どれも `succeeded` になっています。
5. ハニーポットを埋めて `_gotcha=bot` で送信します。成功の応答は返りますが、送信データはスパムとして保存され、メールも Webhook も送られません。

## ハマりどころ

- **CC や BCC はありません。** 受信者ごとに別々のメッセージが届くので、共有のスレッドはありません。誰が返信するかを決めておくか、トピックで振り分けてください。
- **上限は受信者数ではなく送信数で数えます。** 1 つのフォームで 1 時間に 50 件を超えると、受信者全員が代わりにダイジェストを受け取ります。
- **メンバーの変更。** ワークスペースを抜けた人には、すぐにメールが届かなくなります。チームが変わったらフォームの受信者を確認し、誰にもメールが届かない状態にならないようにしてください。
- **バウンスしたアドレスは一時停止されます。** その行には日付付きで **Emails bounced** と表示され、その日以降にメールが再開されます。アドレスを修正するか、削除してください。
- **訪問者には何も届きません。** Ikiform はフォームに入力した人にはメールを送りません。通知メールはあなたとチームだけに届くので、自動返信、確認メール、ダブルオプトインはありません。それらは [Webhook](https://ikiform.com/ja/docs/webhooks.md) をきっかけに、自分のメールツールから送ってください。

## よくある質問

### 受信者のアドレスがバウンスするとどうなりますか？

Ikiform はそのアドレスへのメールをしばらく一時停止し、フォームの設定でその行に Emails bounced と表示します。ほかの受信者には影響しません。アドレスを修正するか削除してください。

### 1 つのフォームでいくつのメールアドレスに送れますか？

最大 10 件です。チェックを入れたワークスペースのメンバーと、最大 5 件の外部アドレスを含みます。外部アドレスはそれぞれ、先にリンクで確認します。

### メールの受信者をフォームに選ばせることはできますか？

いいえ。これは意図的です。受信者のフィールドがあると、誰でもフォームを使って任意のアドレスにメールを送れてしまいます。代わりに Webhook で select フィールドをもとに振り分け、アドレスは自分のコードに置いてください。

### 受信者同士でアドレスは見えますか？

いいえ。受信者はそれぞれ、自分だけに宛てた別々のメールを受け取ります。

### 営業とサポートのメッセージを別の人に送れますか？

はい、Webhook を使えばできます。フォームに部署の select を追加し、小さなハンドラーや自動化ツールにアドレスを選ばせてメールを送ります。

## その他のガイド

- [フォームをメールに送る](https://ikiform.com/ja/guides/send-form-to-email.md): メールサーバーなしで、すべての送信データを受信トレイに届けます。mailto: と PHP の mail() がうまくいかない理由と、スパムを除外して返信もできる構成を解説します。
- [受信トレイから返信](https://ikiform.com/ja/guides/send-form-to-email/reply-to.md): フォームの通知メールで Reply を押すと、フォームに入力した人宛てになるようにします。使えるフィールド名、_replyto を使う場面、返信が迷子になる理由を説明します。
- [Gmail へ](https://ikiform.com/ja/guides/send-form-to-email/gmail.md): mailto: リンクもアプリパスワードも Apps Script も使わずに、フォームの送信データを Gmail で受け取り、ラベルを付け、迷惑メールを避け、Gmail から返信します。
- [Next.js](https://ikiform.com/ja/guides/send-form-to-email/nextjs.md): Server Action で Next.js のフォームをメールで送る 2 つの方法を公平に比較します。Resend や Nodemailer で自分で送るか、フォームバックエンドに転送するかです。
- [PHP なしで](https://ikiform.com/ja/guides/send-form-to-email/without-php.md): mail() を呼ぶ contact.php スクリプトを、ホストされたエンドポイントに送信するフォームに置き換えます。フィールド名、サンクスページ、返信はそのままです。
- [EmailJS の代替](https://ikiform.com/ja/guides/send-form-to-email/emailjs-alternative.md): お問い合わせフォームを EmailJS から移行。ブラウザー側のメールキーのリスク、コードの変更点、自動返信など失うものを解説します。
