Googleフォームの入力内容をXML形式に変換してメールで送る必要があったのでGAS(Google Apps Script)を使って作成しました。
フォームに入力された内容を加工して複数のメールアドレスに送信したいのでGoogleフォームの自動返信メールは使用しません。
別記事では、送信されたXML形式のメールをPythonで処理しています。
環境
Google Apps Script
Google Chrome
仕様
- 管理者、応募者、入力内容の送信先の3通のメールを送信する。
- 応募者があった事実だけをメールで管理者に送信する。
- 応募者に入力内容を記述したメールを送信する。
- 入力内容をXML形式に変換したメール本文を指定したメールアドレスに送信する。
- Googleフォームの項目名で「氏名」、「メールアドレス」は固定。(変更する場合はスクリプトを修正する。)
- Googleフォームの項目数は可変で良い。
- Googleフォームにデータを残さない場合は、最終行の「FormApp.getActiveForm().deleteAllResponses();」をコメントする。
スプレッドシートにデータを保存する場合は、スプレッドシートを指定する。
Googleフォームの自動返信メールは使用しないので、Googleフォームの「メールアドレスを収集する」はチェックせずに「メールアドレス」項目を作成する。
手順
- Googleフォームを作成する。
- Googleフォームの右上にある「・・・」をクリックしてスクリプトエディタを起動、下記のスクリプトをコピー&ペーストする。
- 左メニューの「トリガー」→「トリガーを追加」をクリックする。
- 「実行する関数」で作成した関数の名称を選択する。
- 「イベントの種類を選択」で「フォーム送信時」を選択する。
- 「保存」をクリックして終了。
- 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