スキルアップを始める!

【GoogleAppsScript】Googleフォームのタイトルと回答を全て取得してメール本文に追加してメールを自動送信する方法

GAS(GoogleAppsScript)
この記事は約5分で読めます。

※記事中に広告情報を含みます。

\ワードプレスのスキルアップはこちら!/ WordPress入門読本

Googleフォームの回答→メール送信

Googleフォームの回答が送信されたタイミングで、内容を全取得して、メールで送信をさせたいと思います。

▼Kindle本はこちら

https://amzn.to/3ur402c

まずはGoogleフォームを作成

テスト用なので、大まかに作っておきます。

回答用のスプレッドシートを準備

※回答シートを何にも使わなければ、 Googleシートに回答は溜まっていくので、別途回答シートの作成は不要です。

フォームの準備ができたのでスクリプトを作成していきます!

スクリプトエディタ

スクリプトエディタを開きます。

[rml_read_more]

function autoreply(e)

フォームに送信があったタイミングでメールを自動送信させます。

response.getItemResponses

var itemResponses = e.response.getItemResponses();

response.getItemResponses を使うと回答を配列で取得することができます。

メールの送信元を設定

変数でそれぞれ設定をしておきます。

// メールの送信設定 
//「送信元」メールアドレスの表示名
var admin_name ="XXXXXXX";
// 「送信元」メールアドレス
var admin = "XXX@XXXXXXX.jp"; 
//「送信先」メールアドレス
var to = "XXXX@XXXXXXX.jp"; 
// 件名
var title = "【テスト送信】XXXXXについて回答がありました。";
// メール本文の冒頭メッセージ
var header = "以下の内容でお客様よりフォームが送信されました。\n\n";

データセット用の変数を作成

//質問用
var question = "" ;
//回答用
var answer = "";
// メール本文
var mailbody= "";

本文に別途ヘッダーやフッターが必要あれば、別の変数を作って足しましょう。

// メール本文のヘッダー文字
var header = "以下の内容でフォームが送信されました。\n\n";
// 署名用(メールのフッター)
var footer = "";
// ヘッダーを足す
mailbody += header;

入力項目を全て取得する

itemResponses.lengthでGoogleフォームの回答を全部取得して、メールの本文となる変数にひとつずつ格納していきます。

//***フォームの回答を取得して本文に足す****

//入力項目を全て取得します
for (var i = 0; i < itemResponses.length; i++) {
//質問を取得:getItem().getTitle()
question = itemResponse.getItem().getTitle();
//回答を取得 : getResponse()
answer = itemResponse.getResponse();
//質問+回答を繋げて、本文に追加します。
mailbody += question + ‘: ‘ + answer + ‘\n’;
}

はい、簡単でしたが、
これでほぼ準備完了です\(^o^)/

メール送信

メール送信の設定をして準備完了です!送信前にフッターを足します。

//*****ここまで******

// フッターを足す
mailbody += footer ;

//メールを送信します
MailApp.sendEmail(to, title, mailbody,
{
from: admin, //fromアドレス
name: admin_name //差出人
}
);

実行

最初にAuthorizaton requiredでスクリプト実行の許可を与えないといけないので、実行ボタンを押します。

TypeError :undedined からプロパティ「response」を読み取れません。

スクリプトエディタから直接実行させたので、フォームの回答が取得できません。フォームから送信させてみます。

その前にトリガー

フォームが回答されたタイミングでスクリプトが実行されるようにトリガーを設定しておきます。

アカウントのアクセスリクエストを許可しておきます。

トリガーが設定されました。

送信

ReferenceError発生

ReferenceError:「itemResponse」が定義されていません。

どうやら変数名が違っていたようなので、書き換えます。

失敗。

このままでは、変数itemResponsesのgetItemが見つからないようです・・・。ループのタイミングで、ひとつずつ取得して格納してあげる必要がありそうです。

itemResponsesを配列にしてみます。

//質問を取得します
question = itemResponses[i].getItem().getTitle();
//回答を取得します
answer = itemResponses[i].getResponse();

こんな感じにして、ループのタイミングで配列の値を取得してみます。

送信成功!

送信成功しました!\(^o^)/

ログも「ItemResponse」がループ分、取れているようです。

という感じで、無事にGoogleフォームの回答をメール本文に入れることが出来ました!!

まとめ

あとは「LockService.getPublicLock()」などで同時送信に備えて排他制御を加えておくと尚良いかなーと思います!!
ご参考下さい\(^o^)/

URLをコピーしました!