• 締切済み

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>

みんなの回答

回答No.1

そもそも「doGet()」はどこから呼んでいるのでしょうか? その中の「message」はどうやって参照するのでしょうか? また body変数に改行が有りますが波括弧が無いので 一まとまりに成っていないと思います。 また、メール送信で「完了」を確認していますが、 これはどこで前もって記入されるのでしょうか。

pipipi03652
質問者

補足

見てくれてありがとうございます! 下の方に書かせていただいたメール.htmlから、HtmlService.createTemplateFromFile('メール');で呼べないかなと思っておりますが、やはり、やりかたが違っておりますでしょうか?? メール送信の完了はスプレッドシートで確認しており、それは問題なく動いたので大丈夫かなと思っております。

関連するQ&A

  • 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 テスト・テスト・テスト

  • GAS

    GASについてです。 現在、実行するとExcelのシートにあるセル範囲を指定してその範囲内に記載されている文字や時間がGメール本文に反映され送信できる、というツールを作成しています。 しかし、実行しても時間表示が中々上手くできません… シート内に記載されている09:00というように本文にも反映させたくて編集を繰り返し、何度実行しても Sat Dec 30 1899 09:00:00 GMT+0900 (日本標準時) と表示されてしまいます。 この表示ではなく09:00と表示をさせたいのですがどこを直せば良いでしょうか? アドバイスよろしくお願いします。 function sendOrderMail() {    var ss = SpreadsheetApp.getActiveSpreadsheet();    var sheet = ss.getSheets()[0];    var range = sheet.getRange('A14:G68')    var values = range.getValues();    // 行ごとの値を格納する変数を初期化    var row = "";    //その2次元配列の行の数だけループを回す  for (var i = 0; i <values.length; i++) {    //改行     row += ("\n");    // その2次元配列の列の数だけループを回す  for (var j = 0; j <values[i].length; j++) {        //values[i][j]の中身が空ではない場合    if (values[i][j]!=="") {         //rowの中身を作る処理     row += values[i][j];         //if(values[i][j]!==の中身が日付じゃない場 合){     if(values[i][j]!== "date"){             //values[i][j]の中身をそのままrowにくっ つける処理        values[i][j] +=row;             //全部の条件に一致しないとき下の処理を 行う    }else{       //values[i][j]の中身を○○時○○分の表示に変換して、       //変数dateに代入      var date = Utilities.formatDate(date, "JST", "HH:mm");        //rowにdateをくっつける処理          row += date; }     }  }  }       MailApp.sendEmail("***@gmail.cam","【勤怠報告】"row);     } ※最後のメアドは仮です。

  • 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" のような分岐も加えたいのですがどうにもやり方が分かりません。 知恵を貸していただければと思います。 よろしくお願いいたします。

  • 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
  • Googleドライヴのスクリプト実行

    Googleドライヴの「承認が必要です」で困っています。 さて今回なのですが、Googleドライヴに関する件なのですが Googleドライヴにあるエクセルのシートなのですが(本当はgsheet) 月替わりに消し込みのスクリプトを実行しています、シートの上部の「ツール」から「スクリプトエディタ」で スクリプトの実行(▶)をクリックで実行していましたが、最近「承認が必要です」と出ます先々月まではアカウントのクリックで「詳細を表示」で「安全では無いページ」クリックで実行していたのですが最近テキストを入力画面が出て、何を入力したら良いのか分からずスクリプトが実行出来ません。 できれば「承認が必要です」を出なくする方法が知りたいです、難しい場合は、テキストを入力画面で何を入力すればスクリプトが実行されるか教えて下さい。 宜しくお願い致します。 ちなみにスクリプトは以下です。 function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('Sheet01'); sheet.getRange('F5:F32').clearContent(); sheet.getRange('H5:H32').clearContent(); sheet.getRange('J5:J32').clearContent(); sheet.getRange('L5:L32').clearContent(); sheet.getRange('N5:N32').clearContent(); sheet.getRange('P5:P32').clearContent(); sheet.getRange('R5:R32').clearContent(); sheet.getRange('T5:T32').clearContent(); sheet.getRange('V5:V32').clearContent(); sheet.getRange('X5:X32').clearContent(); sheet.getRange('Z5:Z32').clearContent(); sheet.getRange('AB5:AB32').clearContent(); sheet.getRange('AD5:AD32').clearContent(); sheet.getRange('AF5:AF32').clearContent(); sheet.getRange('AH5:AH32').clearContent(); sheet.getRange('AJ5:AJ32').clearContent(); sheet.getRange('AL5:AL32').clearContent(); sheet.getRange('AN5:AN32').clearContent(); sheet.getRange('AP5:AP32').clearContent(); sheet.getRange('AR5:AR32').clearContent(); sheet.getRange('AT5:AT32').clearContent(); sheet.getRange('AV5:AV32').clearContent(); sheet.getRange('AX5:AX32').clearContent(); sheet.getRange('AZ5:AZ32').clearContent(); sheet.getRange('BB5:BB32').clearContent(); }

  • Google Scriptの別シートの参照

    現在、アクティブなスプレッドシートと同じシート名で、 別のスプレッドシートの同じシート名を 参照したいのですが、 getRangeで、リファレンスエラーになります。 var mySS = SpreadsheetApp.getActiveSpreadsheet(); mySS.getSheets()[j].activate(); var ss_copyFr = SpreadsheetApp.openById(GetID); var ss_copyTo = SpreadsheetApp.getActiveSpreadsheet(); var sheet_copyFr = ss_copyFr.getSheetByName(name); var sheet_copyTo = ss_copyTo.getSheetByName(name); var d = sheet_copyFr.getRange('A1').getValues();              ~~~~~~~~~~~~~~~~~~~~~~~~~~ 何か、 よい解決策は、ありますでしょうか? よろしくお願いします。

  • スプレッドシートでシートをまたいで計算したい

    Googleスプレッドシートで日報を作っています。1シート1日とし、最初の1シート目にそれまでの合計(例えば18日だったら1日~18日までの合計)が計算されるようにしたいと考えています 合計(1シート目)現在の日までの合計表示 1日(2シート目)1日目の数値 2日(3シート目)2日目の数値と1日目と2日目の数値の合計 3日(4シート目)3日目の数値と1日目~3日目の数値の合計 4日(5シート目)4日目の数値と1日目~4日目の数値の合計 . . といった感じです。上の説明で4日目の「1日目~4日目の数値の合計」などの計算させるとき各シートの該当セルを一つづつ呼び出せば表示されますが、30日目の「1日目~30日目の合計」となるととてつもなく面倒になってしまいました。項目は固定で「売上・利益・交通費・人件費」などになります。 function sumSkicount(cell_no, start_name, end_name) { var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); var sum = 0; var add_flag = false; for(var i = 0; i < sheets.length;i++) { if(sheets[i].getName() == start_name){add_flag = true;} if(add_flag){ if(isNaN(sheets[i].getRange(cell_no).getValue())){ value = 0; }else{ value = parseInt(sheets[i].getRange(cell_no).getValue()); } sum = parseInt(sum) + value; } if(sheets[i].getName() == end_name){break;} } return sum; } のコードを書き「1日目~4日目の数値の合計」などを計算させたいセルにsumSkicount(cell_no, start_name, end_name) を入れ計算させましたが、うまく動きませんでした。 cell_no→計算させたいセル start_name→始まりのシート end_name→終わりのシート どなたかご指摘アドバイスいただけると非常にありがたいです。よろしくお願いいたします。

  • 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,

  • phpで携帯へのメルマガ配送について

    データベースから特定メアドを引き出しループで送信処理をしています。 ドメイン許可してもDocomoあてが届かない現象があり なにかうまい配送方法はないでしょうか? コードは以下です。 $sql = "select * from master where mailpermission = '$mp'"; $rs = mysql_query($sql,$con); while($row=mysql_fetch_array($rs)) { $toad =$row[7]; $name=$row[2]; $kanrino=$row[0]; //メール送信 $to .= $toad; $subject = $kenmei; $sendman = $postadjpn; $header .= 'From:'. mb_encode_mimeheader($sendman). " <".$postad.">\n"; $header .= "Return-Path:".$postad."\n"; $header .= "Date:"; $header .= date("D, d M Y H:i:s O"); $body .= "\n"; $body .= $name; $body .= "様"; $body .= "\n"; $body .= "\n"; $body .= $postnaiyou; $body .= "\n"; mb_internal_encoding("ISO-2022-JP"); ini_set("mbstring.internal_encoding","UTF-8"); mb_language("uni"); mb_send_mail($to,$subject,$body,$header); $to = ""; $subject = ""; $sendman = ""; $header = ""; $body = ""; } mysql_close($con);

    • 締切済み
    • 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などの様に記述したいと思っています。 初心者で至らない点ありますが、よろしくお願いいたします。

専門家に質問してみよう