LoginSignup
3
1

More than 1 year has passed since last update.

Formの質問と回答をメール送付する

Last updated at Posted at 2022-02-09

事前準備

事前準備として下記2点が必要です。

  1. トリガー設定でフォーム送信時にsubmitFormを実行させる設定 認証作業
  2. の認証作業を行うのに下記関数を実行してください。 一度実行したらこの関数は消して問題ないです。
function test() {
  FormApp.getActiveForm();
  GmailApp.getAliases();
}

メール送付が不要でしたらGmailAppの認証は通さなくて大丈夫です。

メールアドレスを取得する場合

下記コードの
e.response.getRespondentEmail()でメールアドレスを取得していますが、
取得するためにはフォームの設定でメールアドレスを取得するにチェックする必要があります。

c180d01c-0c4c-4fcf-b871-492a34a7e5d7-1920x937r.png

コード

全ての項目名と回答をセットで送る設定になっているので、
不要な項目がある場合はコードを修正する必要があります。


function submitForm(e){//フォームが送信されたら呼び出される,重複処理を避ける

  var lock = LockService.getScriptLock();//ロックサービスのオブジェクトを生成
  try{
    lock.waitLock(30000);//複数のフォーム送信がほぼ同時にあった時,遅い方に最大30秒待ってもらう
    Logger.log("コピー作業開始");
    main(e);
  }catch(err){
    Logger.log("発生したエラー:"+err);
  }finally{
    lock.releaseLock();//次の送信のためにロック解除
    Logger.log("コピー作業終了");
  } 

}


function main(e){

  // 回答一覧の取得
  const itemResponses = e.response.getItemResponses();

  // 質問一覧の取得
  const items = FormApp.getActiveForm().getItems();

  // メールアドレスの取得
  let text = e.response.getRespondentEmail();

  for(let i=0; i<items.length; i++){
    text += `\n\n${items[i].getTitle()}\n`; // 質問を順にテキストに追加
    text += itemResponses[i].getResponse(); // 回答を順にテキストに追加 
  }

  const recipient = '';
  GmailApp.sendEmail(recipient, '', text);

}
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1