GoogleフォームでGASを使ってメール送信する方法

Google

Googleフォームの入力内容をXML形式に変換してメールで送る必要があったのでGAS(Google Apps Script)を使って作成しました。
フォームに入力された内容を加工して複数のメールアドレスに送信したいのでGoogleフォームの自動返信メールは使用しません。
別記事では、送信されたXML形式のメールをPythonで処理しています。

環境

Google Apps Script
Google Chrome

仕様

  • 管理者、応募者、入力内容の送信先の3通のメールを送信する。
  • 応募者があった事実だけをメールで管理者に送信する。
  • 応募者に入力内容を記述したメールを送信する。
  • 入力内容をXML形式に変換したメール本文を指定したメールアドレスに送信する。
  • Googleフォームの項目名で「氏名」、「メールアドレス」は固定。(変更する場合はスクリプトを修正する。)
  • Googleフォームの項目数は可変で良い。
  • Googleフォームにデータを残さない場合は、最終行の「FormApp.getActiveForm().deleteAllResponses();」をコメントする。

スプレッドシートにデータを保存する場合は、スプレッドシートを指定する。

Googleフォームの自動返信メールは使用しないので、Googleフォームの「メールアドレスを収集する」はチェックせずに「メールアドレス」項目を作成する。

手順

  1. Googleフォームを作成する。
  2. Googleフォームの右上にある「・・・」をクリックしてスクリプトエディタを起動、下記のスクリプトをコピー&ペーストする。
  3. 左メニューの「トリガー」→「トリガーを追加」をクリックする。
  4. 「実行する関数」で作成した関数の名称を選択する。
  5. 「イベントの種類を選択」で「フォーム送信時」を選択する。
  6. 「保存」をクリックして終了。
  7. Googleフォームから送信して動作するかテストする。

XML形式のメール本文

送信するメールは以下のように不完全なXML形式となっています。

<タイトル>【Googleフォーム】</タイトル>
<登録日時>2020/03/01 11:22:33</登録日時>
<氏名>手巣都 太郎</氏名>
<よみがな>てすと たろう</よみがな>
<xxxxx>oooooo</xxxxx>
<xxx>ooo</xxx>

Pythonで処理するためにXML宣言を追加します。

<?xml version="1.0" encoding="utf-8"?>
<data>
<タイトル>【Googleフォーム】</タイトル>
<登録日時>2020/03/01 11:22:33</登録日時>
<氏名>手巣都 太郎</氏名>
<よみがな>てすと たろう</よみがな>
<xxxxx>oooooo</xxxxx>
<xxx>ooo</xxx>
</data>

応募者宛のメール本文

手巣都 太郎 様

こちらはxxxxです。
ご登録いただき、ありがとうございました。
下記の内容で登録しましたのでご確認ください。

-----------------------------------------
タイトル:【Googleフォーム】
登録日時:2020/03/01 21:22:33
氏名>手巣都 太郎
よみがな:てすと たろう
xxxxx:oooooo
xxx:ooo

管理者宛のメール本文

xxxxx 様

応募があったのでお知らせいたします。

スクリプト

関数名「SendMailXML」は適当な名前に変更してください。

function SendMailXML()
{
  var form          = FormApp.getActiveForm();
  var formResponses = form.getResponses();
  var len           = formResponses.length;
  var formResponse  = formResponses[ ( len - 1 ) ];
  var itemResponses = formResponse.getItemResponses();
  
  // 管理者宛のメール送信
  var adminTo  = 'aaa@bbb.ccc';
  // XML形式のメール送信先
  var dataTo   = 'ooo@ooo.ooo';

  var Subject  = '【Googleフォーム】';
  var mailBody = '';
  var mailTo   = '';
  var mailName = '';

  // Submitした現在日時
  var now      = new Date();
  var now_time = Utilities.formatDate(now, 'JST', 'yyyy/MM/dd HH:mm:ss');

  // メール本文の作成
  mailBody += '<タイトル>' + Subject + '</タイトル>' + '\n';
  mailBody += '<登録日時>' + now_time + '</登録日時>' + '\n';
  for (var i = 0; i < itemResponses.length; i++)
  {
    var itemResponse = itemResponses[i];
    // XML形式に整形
    mailBody += '<' + itemResponse.getItem().getTitle() + '>';
    mailBody += itemResponse.getResponse();
    mailBody += '</' + itemResponse.getItem().getTitle() + '>';
    mailBody += '\n';
    // 応募者のメールアドレスを変数に代入する。
    if ( itemResponse.getItem().getTitle() == 'メールアドレス' )
    {
      mailTo = itemResponse.getResponse();
    }
    else if ( itemResponse.getItem().getTitle() == '氏名' )
    {
      mailName = itemResponse.getResponse();
    }
  }
  // XML形式のメール送信
  MailApp.sendEmail(dataTo, Subject, mailBody);

  // 管理者宛のメール送信
  mailBody  = 'xxxxx 様\n\n';
  mailBody += '応募があったのでお知らせいたします。\n\n';
  MailApp.sendEmail(adminTo, Subject, mailBody);

  // 応募者宛のメール送信
  mailBody  = mailName + ' 様\n\n';
  mailBody += 'こちらはxxxxです。\n';
  mailBody += 'ご登録いただき、ありがとうございました。\n';
  mailBody += '下記の内容で登録しましたのでご確認ください。\n\n';
  mailBody += '-----------------------------------------------------------\n';
  for (var i = 0; i < itemResponses.length; i++)
  {
    var itemResponse = itemResponses[i];
    // 整形
    mailBody += itemResponse.getItem().getTitle() + ':';
    mailBody += itemResponse.getResponse();
    mailBody += '\n';
  }
  MailApp.sendEmail(mailTo, Subject, mailBody);
  
  // Googleフォームに残った情報を削除する。
  FormApp.getActiveForm().deleteAllResponses();
}

Comments