【GAS】Googleフォーム回答者にメールを送信する

GAS業務効率

Googleフォームだとアンケートを簡単に実施できますが、回答者にサンクスメールを送信しようとしても簡単にはカスタマイズできません。そこで、Google Apps Script(GAS)を利用することで任意のメールを送信可能になります。

Googleフォームを作る

Googleドライブにアクセスして、「新規」→「Googleフォーム」と選択して作成します。

GoogleドライブからGoogleフォームを作成

Googleフォームでは、質問名(①)、回答形式(②)、回答(③)を設定する必要がありますが、メール送信で重要になるのは、①の質問名になります。できるだけ分かりやすく短い言葉にすると良いでしょう。

Googleフォームの例

※ Sampleフォームは見た目だけ作成しております。セキュリティ上、動作しません。

Google Apps Script(GAS)を書く

Googleフォームを作ったら、右上に●が3つ並んだ設定ボタンをクリックして、「スクリプトエディタ」を選択します。

Googleフォームからスクリプトエディタを呼び出す

次にGASのスクリプトファイルを3つ作成し、次のファイル名にしてください。

GSファイル名概要
onSubmitFormフォームが送信されたら、フォームの値を取得するスクリプト
sendMailUser回答者向けにメールを送信するスクリプト
sendMailRemainder質問者(主催者)向けにメールを送信するスクリプト
GASスクリプトエディタでファイルを作る

フォームの値を取得するスクリプト

まず、「onSubmitForm.gs」ファイルに下記のコードを記述します。赤字部分青字部分は、Googleフォームの内容によってカスタマイズが必要になります。

赤字部分は、自分で何の値なのか分かりやすい名称にしてください。青字部分は、前述したGoogleフォームの①の質問名を入れてください。

// バインドされているフォームを取得
FormApp.getActiveForm()
function onSubmitForm(e){ 
  
  // フォーム回答を配列に保存
  var itemResponses = e.response.getItemResponses(); 
  // 回答保存用の連想配列生成
  var inputData = {
    course : "",
    buyDate : "",
    name : "",
    mail : "",
    age : "",
    sex : ""
  };
  
  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];
    var question = itemResponse.getItem().getTitle();
    var answer = itemResponse.getResponse();
    
    switch (question){
      case '応募コース':
        inputData['course'] = answer;
        break;
      case '購入日':
        inputData['buyDate'] = Utilities.formatDate(new Date(answer), "Asia/Tokyo" , "yyyy年MM月dd日");;
        break;
      case 'お名前':
        inputData['name'] = answer;
        break; 
      case 'メールアドレス':
        inputData['mail'] = answer;
        break; 
      case '年齢':
        inputData['age'] = answer;
        break; 
      case '性別':
        inputData['sex'] = answer;
        break; 
    }
  }

  sendMailUser( inputData );
  sendMailRemainder( inputData );
}

回答者にメールを送信する

次に「sendMailUser」ファイルに下記のコードを記述します。Googleフォームの内容によって、ある程度カスタマイズが必要です。青字部分は、必ず変更が必要になります。

function sendMailUser(inputData){
  
  var strTo = inputData['mail'];
  var strSubject = '応募を受付ました';
  var strFrom = 'noreply@kantan.blog';
  var strSender = '送信者名テスト';
  var strBody = inputData['name'] + ' 様\n\n'
  + 'この度はご回答いただきありがとうございます。\n'
  + '以下内容にて、応募を受け付け致しました。\n\n'
  + '---------------------------------------------------------------------\n'
  + '【応募コース】\n'
  + ' ' + inputData['course'] + '\n\n' 
  + '【購入日】\n'
  + ' ' + inputData['buyDate'] + '\n\n'
  + '【お客様情報】\n'
  + ' ▼お名前\n'
  + '  ' + inputData['name'] + '\n'
  + ' ▼年齢\n'
  + '  ' + inputData['age'] + '\n'
  + ' ▼性別\n'
  + '  ' + inputData['sex'] + '\n'
  + ' ▼メールアドレス\n'
  + '  ' + inputData['mail'] + '\n\n'
  + '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
  + ' ご注意\n'
  + '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
  + '※ 本メールは自動送信ですので、返信いただいてもご回答できません\n'
  + '※ 本メールは大切に保管してください\n'
  + '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
  + '運 営: 株式会社●●●●●●\n'
  + '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━';

  /* メールを送信 */
  GmailApp.sendEmail(
    strTo,
    strSubject,
    strBody, //通常の本文
    {
      from: strFrom,
      name: strSender,
    }
  ); 
}
変数名概要
strTo送信先アドレスです
strSubjectメールタイトルです
strFrom送信元アドレスです
strSender送信元の表示名です
strBody本文です

存在しないメールアドレスを送信元にしようとするとエラーになります。また、別のアドレスやエイリアスからメールを送信する場合は、Gmailで[他のメール アドレスを追加]の設定を行って、スクリプトを作成したGoogleとメールアドレスを関連づける必要があります。

質問者に向けにメールを送信する

回答を受け付けたことを知らせるメールを受信したい場合に必要になります。こちらもGoogleフォームの内容によって、ある程度カスタマイズが必要です。青字部分は、必ず変更が必要になります。

function sendMailRemainder(inputData){
  
  var strTo = 'xxxxx@kantan.blog';
  var strSubject = 'アンケートの回答がありました';
  var strFrom = 'noreply@kantan.blog';
  var strSender = '自動リマインダー';
  var strBody = '以下内容にて、受け付けました。\n'
  + '----------------------------------------------------\n\n'
  + '【応募コース】\n'
  + ' ' + inputData['course'] + '\n\n' 
  + '【購入日】\n'
  + ' ' + inputData['buyDate'] + '\n\n'
  + '【お客様情報】\n'
  + ' ▼お名前\n'
  + '  ' + inputData['name'] + '\n'
  + ' ▼年齢\n'
  + '  ' + inputData['age'] + '\n'
  + ' ▼性別\n'
  + '  ' + inputData['sex'] + '\n'
  + ' ▼メールアドレス\n'
  + '  ' + inputData['mail'] + '\n\n'
  + '----------------------------------------------------\n\n';

  /* メールを送信 */
  GmailApp.sendEmail(
    strTo,
    strSubject,
    strBody, //通常の本文
    {
      from: strFrom,
      noReply: true,
      name: strSender,
    }
  ); 
}
変数名概要
strTo送信先アドレスです
strSubjectメールタイトルです
strFrom送信元アドレスです
strSender送信元の表示名です
strBody本文です

トリガーを設定する

GASスクリプトを書いただけでは、動きません。どのタイミングでスクリプトを実行させるのかを指定する必要があります。これを引き金の意味で、「トリガー」と呼びます。

スクリプトエディタのメニューから「トリガー」を選択しましょう。

メニュー上のトリガー

トリガーの一覧が表示されます。まだトリガーが設定されていなければ、「トリガーを追加」を選択します。

トリガー一覧

トリガーの設定画面が表示されるので下記のように設定して「保存」してください

トリガーの設定画面
  1. 実行する関数:作成した「onSubmitFrom」関数を選択します。
  2. 実行するデプロイ:HEADのままでOKです。HEADとは、今現在のスクリプトコードを実行する選択支です。
  3. イベントのソースを選択:「フォームから」を選択します。
  4. イベントの種類:「フォーム送信時」を選択します。

これにより、フォーム送信時に「onSubmitFrom」関数が呼び出されます

Googleアカウントへのアクセス権を承認する

トリガーを保存すると、次の画面が表示されるケースがあります(ポップアップで表示されるため、ポップアップを許可しておく必要があります)。下記の「このアプリ」とは、今回作成したスクリプトコードのことです。「Googleアカウント側で『安全性に問題ないか』承認してください」という趣旨になります。

詳細」をクリックして「(安全ではないページ)に移動」をクリックします。安全ではないというのは、「スクリプトがあなたのGmailを操作しようとしていますよ」ということです。

スクリプトの安全性が確認されていないためのアラート

作成したスクリプトが、GmailやGoogleフォームにアクセスしようとしてますが、許可しますか?と質問してくるので、「許可」を押してください。

GASがGmailとGoogleフォームにアクセスするのを許可

無事、トリガーが設定されました!これで完了です!閉じてGoogleフォームで回答してみましょう!

トリガーが追加されたイメージ

タイトルとURLをコピーしました