GASを使った自動返信メールの作成方法とは?

このQ&Aのポイント
  • Google フォーム を使ってお問い合わせフォームに対する自動返信メールを作成する方法について紹介します。
  • お客様のお名前やメールアドレスを非表示にする方法も解説します。
  • また、Google Apps Script を利用してメール送信のコードを作成する手順も説明します。
回答を見る
  • ベストアンサー

GASを使った自動返信メールの作成について

Google フォーム を使って、下記Aのお客様からのお問い合わせフォームに対する自動返信メールを作成したいのですが、Bのような結果になってしまいます。Bに記載された4行を非表示にするにはどのようにすれば良いのでしょうか。また、Google フォーム を使った自動返信のお問い合わせメールを作成するためのGoogle Apps Script について理解するための良書などありましたら、ご紹介頂ければ幸いです。よろしくお願い致します。 A(得たい結果) _______________________________________________________________________________ 山田 太郎 様 お問い合わせありがとうございます。 ------------------------------------------------------------ 【お問い合わせ内容】 テスト・テスト・テスト ------------------------------------------------------------ 後ほど担当者よりご連絡させていただきます。 B(思わしくない結果) _______________________________________________________________________________ 山田 太郎 様 お問い合わせありがとうございます。 ------------------------------------------------------------ 【お名前】 (←非表示にしたい) 山田 太郎 (←非表示にしたい) 【メールアドレス】 (←非表示にしたい) ***@***.ocn.ne.jp (←非表示にしたい) 【お問い合わせ内容】 テスト・テスト・テスト ------------------------------------------------------------ 後ほど担当者よりご連絡させていただきます。 [Apps Script に記述したコード(参考サイト:https://liapoc.com/new-google-form.html)] function sendMailGoogleForm() { Logger.log('sendMailGoogleForm() debug start'); //------------------------------------------------------------ // 設定エリアここから //------------------------------------------------------------ // 件名、本文、フッター var subject = "[お問い合わせありがとうございます。]"; var body = "お問い合わせありがとうございます。\n\n" +"------------------------------------------------------------\n"; var footer = "------------------------------------------------------------\n\n" +"後ほど担当者よりご連絡させていただきます。"; // 入力カラム名の指定 var NAME_COL_NAME = 'お名前'; var MAIL_COL_NAME = 'メールアドレス'; // メール送信先 var admin = "***@gmail.com"; // 管理者(必須) var sendername = "web担当者備忘録";//送信者名(必須) var cc = ""; // Cc: var bcc = admin; // Bcc: var reply = admin; // Reply-To: var to = ""; // To: (入力者のアドレスが自動で入ります) //------------------------------------------------------------ // 設定エリアここまで //------------------------------------------------------------ try{ // スプレッドシートの操作 var sheet = SpreadsheetApp.getActiveSheet(); var rows = sheet.getLastRow(); var cols = sheet.getLastColumn(); var rg = sheet.getDataRange(); Logger.log("rows="+rows+" cols="+cols); // メール件名・本文作成と送信先メールアドレス取得 for (var i = 1; i <= cols; i++ ) { var col_name = rg.getCell(1, i).getValue(); // カラム名 var col_value = rg.getCell(rows, i).getValue(); // 入力値 if (col_name === "タイムスタンプ"){ continue; } body += "【"+col_name+"】\n"; body += col_value + "\n\n"; if ( col_name === NAME_COL_NAME ) { body = col_value+" 様\n\n"+body; } if ( col_name === MAIL_COL_NAME ) { to = col_value; } } body += footer; // 送信先オプション var options = {name: sendername}; if ( cc ) options.cc = cc; if ( bcc ) options.bcc = bcc; if ( reply ) options.replyTo = reply; // メール送信 if ( to ) { MailApp.sendEmail(to, subject, body, options); }else{ MailApp.sendEmail(admin, "【失敗】Googleフォームにメールアドレスが指定されていません", body); } }catch(e){ MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message); } } [スプレッドシート] A B C   D タイムスタンプ    お名前   メールアドレス   お問い合わせ内容 2022/09/11 18:47:12  山田 太郎 ***@***.ocn.ne.jp テスト・テスト・テスト

質問者が選んだベストアンサー

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6637/9404)
回答No.1

プログラム内容を見ると、「項目名:内容」と言う配列の内容を、全てメール本文に出力しています。 そこで、特定の項目名はメール本文に出力しない(スキップ)と言うように組めばよいでしょう。 実は、既にそうなっている項目があります。「タイムスタンプ」です。 ですので、それを真似して >// メール件名・本文作成と送信先メールアドレス取得 エリアの > if (col_name === "タイムスタンプ"){ > continue; >} この下に、 if (col_name === "お名前"){continue;} if (col_name === "メールアドレス"){continue;} という2行を追加してみてください。

Nonresistance
質問者

お礼

プログラムの内容についてご説明頂いたうえ、更に具体的にご回答頂きましたこと、心より感謝申し上げます。

その他の回答 (1)

  • asciiz
  • ベストアンサー率70% (6637/9404)
回答No.2

すみません! 回答No.1の修正では、相手にメールが届かない、と言う不具合が出ていないでしょうか…。 引用したエリアのコメント通り、送信先アドレスもそのエリアで取得していました。 そうすると、動作するように修正するには、"メールアドレス"項目でスキップする際にそれを記録しなければいけません。 if (col_name === "メールアドレス"){ to = col_value; continue; } こんな風にしなければいけなかったと思います。 あるいは、そのエリア全体を以下のように直した方が良かったと思います。 // メール件名・本文作成と送信先メールアドレス取得 for (var i = 1; i <= cols; i++ ) { var col_name = rg.getCell(1, i).getValue(); // カラム名 var col_value = rg.getCell(rows, i).getValue(); // 入力値 if (col_name === "タイムスタンプ"){ Continue; } if ( col_name === NAME_COL_NAME ) { body = col_value+" 様\n\n"+body; Continue; } if ( col_name === MAIL_COL_NAME ) { to = col_value; Continue; } body += "【"+col_name+"】\n"; body += col_value + "\n\n"; } body += footer; どうも失礼しました。

Nonresistance
質問者

お礼

asciiz 様 この度は、締め切り済みの質問にもかかわらず、OKWAVEサポートまでご連絡頂いたうえ、追加のご回答を頂きましたこと、心より感謝申し上げます。追加のご回答にお示し頂きました下記記述に書き換えましたところ、お客様にメールが届くようになり、おかげさまで、不具合を解消することができました。本当にありがとうございました。 if (col_name === "メールアドレス"){ to = col_value; continue; } この度の貴重な体験をきっかけに、GASなどについて楽しみながら学習していきたいと思うようになりました。今回、ここまでお力添えを頂きましたことに、只々感謝の念を捧げます。

関連するQ&A

  • Googleフォームのsendmailについて

    いつもお世話になっております。(知識がなく「カテゴリ」をPHPにしております。) 早速ではございますが,Googleフォームを使って申し込みサイトを設置しようかと思っております。申し込み頂いた方へは,その内容を保存しておいて頂くためのメールを自動的に送るようにしたいと考え,「Googleフォーム」「sendmail」で検索したところ,以下のサイトがヒットいたしました。 http://creazy.net/2011/03/google_form_mailsend.html これとまったく同じにGoogleフォームを作成し,スクリプトを設置したところ,私が考えているものが送られてきました。しかし,このスクリプトは,「お名前」「メールアドレス」「件名」となっており,私が実際に作成しているGoogleフォームの項目とは異なります。 私の作成している項目は以下の通りです(Googleフォーム上の質問項目と全く同じ)。 お名前 メールアドレス アドレスの再入力 所属(リストから選択)*6項目(リスト)ございます。 〇〇の会員ですか?(リストからの選択)*都合により〇〇と表示 これら以降もう少しございますが,省略いたします(テキスト入力あるいはリストからの選択のみです)。 返信用メール本文には,既存のスクリプトは最大限活用して,つぎのように示したいです。 ************************* ▲▲ 様 申し込みありがとうございます。(→これは該当の日本語を書き換えれば良いのかなと考えます) ------------------------------------------------------------ 【タイムスタンプ】 Tue Sep 01 2015 14:43:09 GMT+0900 (JST) 【お名前】 ▲▲ 【メールアドレス】 ××××@gmail.com 【アドレスの再入力】 ××××@gmail.com 【所属】 〇〇(リストの中から1つ表示される) 【〇〇の会員ですか?】 ◆◆(リストの中から1つ表示される) ------------------------------------------------------------ 後ほど担当者よりご連絡させていただきます。 ************************* 上記のサイトには以下のようなスクリプトが提示されておりますが,なにせ,私には全く知識がなく,下記をどのように修正すれば私のGoogleフォームで機能するのか皆目見当が付きません。 専門家の皆様,この内容の知識をお持ちの皆様,以下のスクリプトを私のフォームで動くように加筆修正頂けますでしょうか。ご多忙のところ申し訳ございませんが,ぜひお願いいたします。 function sendMailFromForm() { Logger.log('sendMailFromForm() debug start'); //------------------------------------------------------------ // 設定エリアここから //------------------------------------------------------------ // 件名、本文、フッター var subject = "[お問い合わせ]"; var body = "お問い合わせありがとうございます。\n\n" + "------------------------------------------------------------\n"; var footer = "------------------------------------------------------------\n\n" + "後ほど担当者よりご連絡させていただきます。"; // 入力カラム名の指定 var NAME_COL_NAME = 'お名前'; var MAIL_COL_NAME = 'メールアドレス'; var SUBJ_COL_NAME = '件名'; // メール送信先 var admin = "admin@example.com"; // 管理者(必須) var cc = ""; // Cc: var bcc = admin; // Bcc: var reply = admin; // Reply-To: var to = ""; // To: (入力者のアドレスが自動で入ります) //------------------------------------------------------------ // 設定エリアここまで //------------------------------------------------------------ try{ // スプレッドシートの操作 var sh = SpreadsheetApp.getActiveSheet(); var rows = sh.getLastRow(); var cols = sh.getLastColumn(); var rg = sh.getDataRange(); Logger.log("rows="+rows+" cols="+cols); // メール件名・本文作成と送信先メールアドレス取得 for (var j = 1; j <= cols; j++ ) { var col_name = rg.getCell(1, j).getValue(); // カラム名 var col_value = rg.getCell(rows, j).getValue(); // 入力値 body += "【"+col_name+"】\n"; body += col_value + "\n\n"; if ( col_name === NAME_COL_NAME ) { body = col_value+" 様\n\n"+body; } if ( col_name === MAIL_COL_NAME ) { to = col_value; } if ( col_name === SUBJ_COL_NAME ) { subject += col_value; } } body += footer; // 送信先オプション var options = {}; if ( cc ) options.cc = cc; if ( bcc ) options.bcc = bcc; if ( reply ) options.replyTo = reply; // メール送信 if ( to ) { MailApp.sendEmail(to, subject, body, options); }else{ MailApp.sendEmail(admin, "【失敗】Googleフォームにメールアドレスが指定されていません", body); } }catch(e){ MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message); } }

    • ベストアンサー
    • PHP
  • gasカードの変数をhtmlに反映させるには?

    スプレッドシートから引っ張ってきた情報を、htmlメールに反映させたいと考えています。 以下で書いてみたのですが、HTMIメールではmessageがそのままになってしまいます。 gasで書いた内容を反映させたいのですが、どうしたらいいのでしょうか? アドバイスお願いします。 function myFunction() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('作業用'); let row = sheet.getLastRow(); //店名 let name = sheet.getRange('c' + row).getValue(); //①商品 let name5= sheet.getRange('h' + row).getValue(); //個数 let name7= sheet.getRange('j' + row).getValue(); //受信日 let name101 = sheet.getRange('a' + row).getValue(); //了解者 let name100 = sheet.getRange('w' + row).getValue(); //メール.htmlを取得 var html = HtmlService.createHtmlOutputFromFile("メール").getContent(); function doGet() { var template = HtmlService.createTemplateFromFile('メール'); template.message = "\n" +        "了解者:" + name100 + "\n" +        "商品:" + name5 + " " + name6 + " " + name7 + "個" + "\n" +        "店名:" + name + "\n" +        "本メールを了解書としてご利用ください。:" + "\n" +        "ご依頼送信日時:" + name101 + "\n"; return template.evaluate(); } var recipient = sheet.getRange('b' + row).getValue();//送信先のアドレス var subject = "了解書"; var body = '了解書' + "\n" + "\n" + "了解者:" + name100 + "\n" + "商品:" + name5 + " " + name6 + " " + name7 + "冊" + "\n" + "店名:" + name + "\n" + "\n" + "本メールを了解書としてご利用ください。:" + "\n" + "ご依頼送信日時:" + name101 + "\n"; var options = { "name": "test", //送信元の名前を指定 "htmlBody": html //メール本文をhtmlファイルに指定 }; //メール送信 if (sheet.getRange('w' + row).getValue() === '') { }else if (!sheet.getRange('x' + row).getValue() === '完了') { return false; } else {  GmailApp.sendEmail(recipient, subject, body, options);  } } <!DOCTYPE html> <html> <head> <base target="_top"> </head>  <body> <h1>了解書</h1> <p>拝啓 格別のお引立てを賜り厚くお礼申し上げます。<br> 下記の商品の返品を承ります。</p>   <h3><?=message?></h3></p>  </body> </html>

  • GASに関して(教えてください)

    Googleフォームの回答をメール送信させるGASを作って運用しています(下記参照)。 ================ function SendMail(e){ // 件名、本文 var subject = "ここにはメールのタイトルが入ります"; var body = ""; // メール送信先 var to = "アドレスX"; var itemResponses = e.response.getItemResponses(); for (var i = 0; i < itemResponses.length; i++) { var itemResponse = itemResponses[i]; var title = itemResponse.getItem().getTitle(); var ans = itemResponse.getResponse(); body += '\n'+title+':'; body += ans; if (title==="依頼内容") { if (ans==="A") { to = "アドレスA"; } else if (ans==="B") { to = "アドレスB"; } } } MailApp.sendEmail({to:to,subject:subject, body:body}); } ================ ここに、 ・"依頼内容" が "A" だったらメールのタイトルは"A" ・"依頼内容" が "B" だったらメールのタイトルは"B" のような分岐も加えたいのですがどうにもやり方が分かりません。 知恵を貸していただければと思います。 よろしくお願いいたします。

  • [GAS]PDFを添付してメールを送信したい

    Google Apps ScriptでSpreadSheetをPDFで添付してメールを送りたいです。 フォームからの入力時にPDFを添付した自動応答メールを送りたいと考えています。 そこで、Scriptを書いたのですが、ファイルを添付して送付する部分で失敗しているように見えます。 下記のScriptについてアドバイスを欲しいです。 実行時エラーはこちらです:『現在サーバーを使用できません。しばらくしてからもう一度試してください。 』 (※attchmentを外すと正常に動作します) Scriptは、該当のシートをpdfとして取得する部分~送信までです var Document = SpreadsheetApp.openById('xxxx'); var pdf = Document.getAs('application/pdf').getBytes(); var attachment = {fileName:'xxx.pdf',mimeType:'application/pdf',content:pdf}; // 送信先オプション var options = {}; if ( cc ) options.cc = cc; if ( attachment ) options.attachments = attachment; // メール送信 MailApp.sendEmail(to, subject, body, options); まだまだ未熟なので読みづらいかとは思いますが、 アドバイス頂けますと幸いです

  • セレクトメニューの値をメール送信できません

    PHPの勉強がてらにお問い合わせフォームを作ってみたのですが、 セレクトメニューを追加したところ、エラーが出てしまいうまく出来ません。 調べても原因が分からないので、間違っている箇所があれば ご指摘お願いします。 test.html <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>メールフォーム</title> </head> <body> <form action="test.php" method="post"> <select name="test"> <option value="テストA">テストA</option> <option value="テストB">テストB</option> <option value="テストC">テストC</option> </select> <dl> <dt>お名前</dt> <dd><input name="name" type="text" id="name" size="50" maxlength="225" /></dd> <dt>メールアドレス</dt> <dd><input name="email" type="text" id="email" size="50" maxlength="225" /></dd> <dt>お問い合わせ</dt> <dd> <textarea name="message" id="message" cols="50" rows="10"></textarea> </dd> </dl> <input type="submit" value="送信する" /> </form> </body> </html> test.php <?php mb_language("japanese"); mb_internal_encoding("UTF-8"); $to = 'xxx@xxx'; if (isset($_POST['name'])) { $name = $_POST['name']; $body = $_POST['message']; $email = $_POST['email']; $test = $_POST['test']; $succese = mb_send_mail($to,$name,$body,$email,$test); } ?> <?php if($succese){ print('送信しました。'); } else{ print ('送信に失敗しました。'); } ?>

    • ベストアンサー
    • PHP
  • GASについて

    こんばんは今現在GASを使ってお客様へのメールを月報やメルマガ的に自動で送れないかを調べており、以下のサイトを参考に進めたのですがエラーがでてしまい編集ができません。サイト主はGsuiteらしいのですが僕のは通常のGmailになっています。 もし僕の作ったコードに誤りがありましたらご教授いただける方いらっしゃったら幸いです。 よろしくお願いいたします 参考URL https://katoh-tax.com/2019/08/22/gas-gmail-automatic/ function automail() { var subject = '●●●●広告のご案内'; var body = ''; body += '●●●様\n'; body += '\n'; body += '日頃大変お世話になっております'; body += '表題の件についてご案内をいたします'; body += '\n'; body += '広告出稿確認日'; body += '●月●●日'; body += '\n'; body += '広告受付締め切り日'; body += '●月●●日'; body += '\n'; body += 'よろしくご検討のほどお願いいたします'; body += '\n'; body += 'ありがとうございます'; body += '\n'; body += '●●●●(名前)'; body += '●●●(名前英字)'; body += '●●電話番号'; body += '●●電話番号'; body += '●●E-mail'; GmailApp.sendEmail( '●●', Subject, body,

  • Google フォーム自動送信メールの設定について

    Googleフォーム自動送信メールの設定を行いたいのですが、 下記のメッセージが出て、先に進みません。 ご指導宜しくお願い致します。 ※メールアドレスは伏せさせて頂いています。 ステートメントの前に ; がありません。(行 63、ファイル「コード」) //宛名=address、件名=title、本文=bodyで、メールを送る GmailApp.sendEmail(address,title,body); { from:' ●●@yahoo.co.jp',name:'事務局' }); }

  • メール送信の設定について

    PHPでメール送信をしようとしています。 mb_internal_encoding("utf-8"); mb_language("japanese"); $from = "admin@testsv.com"; $reply_to = "reply@exp.co.jp"; $to = "custom@hoge.co.jp"; $cc = "test@foo.co.jp"; $bcc = "test2@bar.co.jp"; $subject = "例の件です"; $header = "From:".$from."\n"; $header .= "Cc: ".$cc."\n"; $header .= "Bcc: ".$bcc; $header .= "Reply-To: ".$reply_to."\n"; $header .= "X-Mailer: myphpMail ". phpversion(). "\n"; $contents = "氏名 :".$name."\n"; $contents .= "お問い合わせ内容 :".$inquiry."\n"; mb_send_mail($to,$subject,$contents,$header); としています。 ところが、ヘッダーのX-Amavis-Alert:の項目でBAD HEADER, Duplicate header field: "To"と表示されています。 toが複数あるわけではないのに表示されていて原因が分かりません。 教えてください。 お願いします。

    • ベストアンサー
    • PHP
  • メール送信プログラム

    いつもお世話になっております。 今まで動いていたメール送信のプログラムが正常に動かなくなりました。メールは送信されるのですが、ボディーの箇所とヘッダーの箇所の変数部分にあたるところが空白になってしまいます。 今までは正常に動いていたんです、SJISからUTF-8に移行したからなんでしょうか? 本番環境(SJIS)(サーバー:ロリポップ)のほうもなぜかいじっていないのにちゃんと動作しなくなっています。 以下、ロジックです(UTF-8にしたもの)。 <?php mb_language("Ja"); mb_internal_encoding("UTF-8"); $to = "test@test.com"; $title = "お問い合わせ"; $body = "■名前\n$contact_name\n ■メールアドレス\n$contact_email\n ■お問い合わせ内容\n$contact_naiyou\n"; $headers = "From:$contact_name<$contact_email>"; if(mb_send_mail($to, $title, $body, $headers)) { print "お問い合わせありがとうございます。"; } else { print "送信出来ませんでした。"; } ?> 推測されること等ありましたら、ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • Google Apps Scriptの記述

    フォームに入力したら、フォームに基づいてメールを送れるようにしたいと考えています。 そこで次のScriptを記述しました。しかし、フォームに入力し終わってもメールが送信されません。 Google Apps Scriptの参考サイトも無い事と、Googleも仕様を次々新しくしているので持っている書籍があまり参考になりません。 トリガーは次の通りです。 現在のプロジェクトのトリガーで、実行 mySendhokoku イベントスプレッドシートからフォーム送信時 としています。 scriptは function mySendhokoku(e) { var mail_to=e.nameValues["送信先"]; var datetime= new Date(); var hokoku=e.nameValues["報告種類"]; var kaisi=e.nameValues["開始時間"]; var shuryo=e.nameValues["終了時間"]; var kyukei=e.nameValues["休憩時間"]; var biko=e.nameValues["本文備考"]; var today=formatDate(datetime,"MM/dd"); var subject=hokoku+"連絡"+today+"名前"; var body="名前"+"\n\n"; var body=body+"開始時刻"+kaisi+"\n\n"; var body=body+"終了時刻"+shuryo+"\n\n"; var body=body+"休憩時間"+kyukei+"\n\n"; var body=body+biko+"\n\n"; MailApp.sendEmail(mail_to,subject,body); } ちなみに”名前”と言うところは実際は私の名前が入っています。読み替えてください。 日付は5/5などの様に記述したいと思っています。 初心者で至らない点ありますが、よろしくお願いいたします。