# Web サイトのフォームを Gmail に送る（mailto: がうまくいかない理由も）

> mailto: リンクもアプリパスワードも Apps Script も使わずに、フォームの送信データを Gmail で受け取り、ラベルを付け、迷惑メールを避け、Gmail から返信します。

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

フォームをフォームバックエンドに送信し、Gmail のアドレスを受信者に追加します。訪問者のメールアプリを開くだけの `mailto:` の action は使いません。次に送信元に対する Gmail のフィルターを追加すれば、送信データは迷惑メールを避けて専用のラベルが付きます。Gmail で **Reply** を押すと、自分のアドレスから訪問者宛てに返信できます。

## ここが違う

Gmail はメールボックスであって、サイト用の送信サービスではありません。フォームが送信できる URL がないので、Gmail へのどの経路も何か別のものを経由します。多くの人が最初に試すのが `mailto:` です:

`動いているように見えるフォーム`:

```html
<form action="mailto:you@gmail.com" method="post" enctype="text/plain">
  <input name="name" />
  <input name="email" type="email" />
  <textarea name="message"></textarea>
  <button>Send</button>
</form>
```

自分のマシンでは確かに動きます。**Send** を押すとメールアプリが開き、本文にフィールドが入っていて、それを自分宛てに送ります。訪問者の体験は違います:

図: 訪問者の端末で mailto: フォームがすること

1. 訪問者が Send を押します。ブラウザーはフォームをどこにも送信せず、mailto: リンクを OS に渡します。
2. 会社のノートパソコンや、ブラウザーで Gmail を使う人によくあるように、メールアプリや Web のハンドラーが設定されていなければ、目に見えることは何も起きないか、どのアプリを使うかを OS が尋ねます。
3. 設定されていれば、訪問者自身のメールアプリで下書きが開き、本文にフィールドが貼り付けられます。
4. 訪問者は自分のアカウントから、もう一度 Send を押す必要があります。多くの人は代わりに下書きを閉じてしまい、試みたことすらあなたにはわかりません。

最初の手順以降はすべて訪問者の端末で起きるので、どこで離脱したかは見えません。

メッセージが届いたとしても、本文は生の `name=value` の行です。`text/plain` のエンコードではそうなるからです:

`届くもの`:

```text
name=Ada Lovelace
email=ada@example.com
message=Hi, do you take on small bathroom jobs in March?
```

Gmail へのほかの経路は動きますが、どれも自分で動かすサーバーが必要です:

| 経路 | 必要なもの | 注意点 |
| --- | --- | --- |
| アプリパスワードを使う Gmail SMTP | コードを実行するサーバーと、Google アカウントの 2 段階認証プロセス | このパスワードがあればどこからでもあなたとしてメールを送れるので、絶対にブラウザーに渡してはいけません。また Google は個人アカウントが 1 日に送れる量を制限しています |
| `MailApp` を使う Google Apps Script | Web アプリとしてデプロイしたスクリプト | 個人アカウントでスクリプトからメールを送れるのは 1 日 100 人まで。URL は公開されていてスパム対策がないので、ボット 1 つで使い切られます |
| フォームバックエンド | `action` にバックエンドの URL | メールは自分ではなくサービスのアドレスから届きます。大事な部分は返信先が解決します |

Apps Script は多くのチュートリアルが勧める経路なので、詳しく見ておきます。`doPost` 関数を書き、誰でも呼び出せる Web アプリとしてデプロイし、フォームの送信先をその URL にします。動きはしますが、通常のフォーム送信だと訪問者はあなたのドメインではなく Google のドメインから配信されるページに残され、URL を見つけたボットは誰でもその日の割り当てを使い切れ、スクリプトはあなたとして実行されるので、バグがあればあなたのアカウントから誰にでもメールを送れてしまいます。さらに、以降のフォームのフィールド変更もすべて自分で対応することになります。

## フォームを Gmail に送る

小規模な施工業者向けのフォームの例です。`job` フィールドがあると受信トレイを見渡しやすく、`email` という名前にしているので返信は訪問者に届きます:

`contact.html`:

```html
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
  <label for="name">Your name</label>
  <input id="name" name="name" autocomplete="name" required />

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

  <label for="job">What do you need?</label>
  <select id="job" name="job" required>
    <option value="">Choose one</option>
    <option value="repair">A repair</option>
    <option value="quote">A quote for a new job</option>
    <option value="other">Something else</option>
  </select>

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

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

1. Ikiform でフォームを作成し、`frm_xxxxxxxxxxxxxxxx` をその ID に置き換えます。
2. Gmail のアドレスで登録していれば、ワークスペースのオーナーとしてすでにメールを受け取れます。そうでなければフォームの **Notifications** 設定を開き、**Add someone outside the workspace** に Gmail のアドレスを入力して **Send link** を押します。
3. Gmail で確認メールを開いて確認します。それまでアドレスには **Waiting for confirmation** と表示され、何も届きません。
4. フォームの **Allowed domains** に自分のドメインを追加し、ページを公開してテストを送信します。

## Gmail のフィルターで迷惑メールを避ける

新しい送信元からの最初のメールは、**Spam**（迷惑メール）や **Promotions**（プロモーション）に入ることがあります。送信元に対するフィルターを作れば、これを恒久的に防げます。Gmail で検索オプションを開き、**From** に `notifications@ikiform.com` を入れて **Create filter** を押し、**Never send it to Spam**、**Apply the label**、**Always mark it as important**、**Categorize as: Primary** にチェックを入れます。最後の設定で **Promotions** に入らなくなります。

またはフィルターをインポートします。これは Gmail 自身のフィルターの **Export** が書き出す形式です。Google はこれを別途ドキュメント化していないので、インポートに失敗したら上記のとおり手動でフィルターを作ってください。`mailFilters.xml` として保存し、**Settings**、**See all settings**、**Filters and Blocked Addresses**、**Import filters** の順に進みます:

`mailFilters.xml`:

```text
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:apps="http://schemas.google.com/apps/2006">
  <title>Mail Filters</title>
  <entry>
    <category term="filter"></category>
    <title>Mail Filter</title>
    <content></content>
    <apps:property name="from" value="notifications@ikiform.com"/>
    <apps:property name="label" value="Website"/>
    <apps:property name="shouldNeverSpam" value="true"/>
    <apps:property name="shouldAlwaysMarkAsImportant" value="true"/>
    <apps:property name="smartLabelToApply" value="^smartlabel_personal"/>
  </entry>
</feed>
```

先に **Website** ラベルを作るか、ファイル内でラベル名を変えてください。通知はすべて同じアドレスから届くので、フィルター 1 つですべてのフォームをカバーできます。フォームごとにラベルを分けるなら、`subject:("New submission: Quote request")` のように件名でフィルターします。

> Gmail は @ より前の部分のドットとプラス記号以降を無視します。受信者に `you+site@gmail.com` を追加すると通常の受信トレイに届き、**To** に対するフィルターでサイトからのメールをほかと区別できます。これは外部のアドレスとして扱われるので、ほかと同じくリンクで確認します。

## Gmail から返信する

Gmail は Reply-To ヘッダーに従うので、**Reply** は訪問者宛てになります。返信はあなたの Gmail アドレスから送られ、スレッドに Ikiform は一切現れません。

- 代わりに仕事用のアドレスから返信するには、**Settings**、**Accounts and Import**、**Send mail as** でそのアドレスを追加し、返信時に **From** 欄で選びます。
- 件名は常に `New submission:` とフォーム名なので、Gmail は同じ件名の通知を 1 つのスレッドにまとめることがあります。メッセージごとに 1 行で表示したいなら、Gmail の設定で **Conversation view**（スレッド表示）をオフにしてください。
- 1 時間ごとのダイジェストは多くの訪問者をまとめたものなので、返信先がありません。ダイジェストにはダッシュボードのリンクから返信してください。

## 動作を確認する

1. ページのフォームに入力して送信します。自分のサンクスページか、Ikiform のサンクスページに移動します。
2. Gmail でメールを探します。ラベルが付いていて、**Spam** や **Promotions** には入っていません。
3. **Reply** を押します。**To** 欄はフォームに入力されたアドレスです。
4. ハニーポットを埋めて `_gotcha=bot` で送信します。成功の応答は返りますが、送信データはスパムとして保存され、メールも Webhook も送られません。
5. 何も届かない場合は、ダッシュボードのステータスフィルターを **Spam** に切り替えてください。スパムにも本物の送信と同じ成功の応答が返ります。

## ハマりどころ

- **Google Workspace のエイリアス。** 受信者がエイリアスや Google グループの場合、外部の送信者を受け付けるかどうかはグループ自体の設定で決まります。頼りにする前にテストを送ってください。
- **確認メールが迷惑メールに入る。** 確認リンクのメールも Ikiform から届きます。見当たらなければ **Spam** を確認し、迷惑メールではないと報告してください。
- **複数の Gmail アドレス。** 1 つのフォームがメールを送れるのは合計 10 アドレスまでで、外部のアドレスはそれぞれ個別に確認します。
- **ほかの場所に残る mailto: リンク。** フッターにある `mailto:` リンクは、リンクとしては問題ありません。問題なのは、フォームの `action` に `mailto:` を使う場合だけです。

## よくある質問

### フォームの送信データを Google Workspace のアドレスに送れますか？

はい。Workspace のアドレスもほかの受信者と同じように使えます。Google グループやエイリアスの場合は、グループが外部の送信者からのメールを受け付けるか確認してから、テストを送ってください。

### mailto: のフォームが何も送信しないのはなぜですか？

mailto: の action は何も送信しません。訪問者の端末に、下書き付きでメールアプリを開くよう頼むだけです。アプリが設定されていなければ目に見えることは何も起きず、設定されていても、訪問者がそのアプリでさらに Send を押す必要があります。

### Gmail SMTP でフォームのメールを送れますか？

自分で動かすサーバーから、2 段階認証プロセスを有効にしたアカウントのアプリパスワードを使う場合に限ります。そのパスワードを絶対にブラウザーのコードに入れないでください。あなたとしてメールを送れてしまいます。

### フォームのメールが Gmail の迷惑メールに入らないようにするには？

notifications@ikiform.com からのメールに対する Gmail のフィルターを作り、Never send it to Spam にチェックを入れます。同時にラベルも付けておけば、フォームのメッセージを見つけやすくなります。

### フォームに入力した人に Gmail から返信できますか？

はい。フォームのメールのフィールド名が email、email_address、your_email、reply_to、contact_email のいずれかか、フォームが _replyto フィールドを送る場合です。そうすれば Reply を押したとき、Gmail が訪問者を To 欄に入れます。

## その他のガイド

- [フォームをメールに送る](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 を使う場面、返信が迷子になる理由を説明します。
- [PHP なしで](https://ikiform.com/ja/guides/send-form-to-email/without-php.md): mail() を呼ぶ contact.php スクリプトを、ホストされたエンドポイントに送信するフォームに置き換えます。フィールド名、サンクスページ、返信はそのままです。
- [複数の受信者](https://ikiform.com/ja/guides/send-form-to-email/multiple-recipients.md): 1 つのフォームをチーム全員にメールで送ったり、トピックごとに適切な担当者に振り分けたり。ただし、誰に送るかをフォーム自身には決めさせません。
- [EmailJS の代替](https://ikiform.com/ja/guides/send-form-to-email/emailjs-alternative.md): お問い合わせフォームを EmailJS から移行。ブラウザー側のメールキーのリスク、コードの変更点、自動返信など失うものを解説します。
- [Next.js](https://ikiform.com/ja/guides/send-form-to-email/nextjs.md): Server Action で Next.js のフォームをメールで送る 2 つの方法を公平に比較します。Resend や Nodemailer で自分で送るか、フォームバックエンドに転送するかです。
