Googleフォームから入力されたら自動でメール送信

Google Workspace周りで自動化のニーズがありそうな「Googleフォームで作ったアンケートが入力されたら自動的に管理者にメールを送る」の実装例を紹介します。

実装手順

1. フォームの作成

普通にフォームを作成します。

Googleドライブから新規作成

設問なども通常のフォームと同じように作成する。

2. スクリプトエディタを開く

Googleフォームの編集画面の右上のメニューから「スクリプトエディタ」を開きます。Google App Script のエディターが表示されます。

スクリプトエディタを開く

3. コードを書く

フォーム送信時(Googleフォームで最後の「送信」を押したとき)に実行するスクリプトを書きます。初期状態で選択されている「コード.gs」に以下のコードを貼り付ければ、だいたいOKです。

function onSubmit(e) {
  
  const mailAddress = "foobar@example.com";

  const itemResponses = e.response.getItemResponses();

  let mailBody = "";

  for (const itemResponse of itemResponses) {

    const item = itemResponse.getItem();

    const index = item.getIndex();
    const type = item.getType();
    const title = item.getTitle();

    const response = itemResponse.getResponse();

    mailBody += `----\n[${index}] ${title}\n----\n`;

    switch(type) {

      case FormApp.ItemType.CHECKBOX:
        if (response) {
          mailBody += response.join(", ");
          mailBody += "\n";
        }
        break;

      case FormApp.ItemType.GRID:
        if (response) {
          mailBody += response.join("\n");
          mailBody += "\n";
        }
        break;

      case FormApp.ItemType.CHECKBOX_GRID:
        if (response) {
          mailBody += response.map((elem) => {
            return elem ? elem.join(',') : "";
          }).join("\n");
        }
        break;

      default:
        mailBody += `${response}\n`;
        break;

    }

    mailBody += "\n";

  }

  GmailApp.sendEmail(mailAddress, "フォームの受け付け", mailBody);

}

mailAddress の箇所は、送信先のメールアドレスに適宜変更してください。

4. トリガーを設定する

フォーム送信時にスクリプトが実行されるようにトリガーを設定します。左のアイコンからトリガー設定を開き、「トリガーを作成」で新たなトリガーを設定します。

トリガーの設定画面

イベントのソースは「フォームから」、イベントの種類は「フォームの送信時」とします。そのほかは初期値でOKです。
登録する際、スクリプトの実行権限に関する確認が表示されるので、確認の上、「承認」や「Allow」を押して実行を許可してください。アカウントを選択した後に警告が表示される場合は「Advanced」をクリックし、「Go to ****のプロジェクト (unsafe)」をクリックすれば権限の画面に進めます(自己責任でお願いします)。

5. テストする

実際にフォームに入力・送信してみて、メールが届くことを確認してください。

気づいたこと

  • 上の例だと、メールの送信元がトリガーを設定した人になる。何らかの事情で送信元(の表示)を変えたい場合などは、Gmail API を使うとかでメールの送り方を考える必要がありそうです。
  • 上のコードでは、グリッド式の設問について行の見出しを取れていないので、改善の余地アリです。