実現したいこと
- Googleフォーム回答後の自動返信メールを、SendGrid経由で送信する。
- 理解の及ぶ範囲での改善が望ましいため、現行のコードはなるべく大きく書き換えずに上項を解決したい。
前提
■経緯
➀Googleフォームで応募フォームを作成し、自動返信にて「応募時の入力内容」「受付番号」「こちらで設定した本文」以上の内容を送信するコードを、別サイトなどを参考にしながら作成。
しかし、1日100通(GAS自動返信数の上限)を超えることが予想されるため、SendGridの登録をして問題解決を図ったが、うまく連結させられなかった。
ひいては、下記の自動返信のコードを大きく変えることなく、SendGridの連携を行いたい。
■現状
・当方プログラミング等のノウハウが無く、専門用語に疎い。
・上記の理由から、「検索したものを自分なりにアレンジ」などが難しく、「GAS自動返信 SendGrid経由」等の検索で出てくるサイトは参考にしたが解決は困難であった。
・SendGridを利用しない、通常のGASの自動返信は下記のもので実現できている。
・SendGridのAPIキーの取得まではできている。
付け焼刃でなんとかかんとかやっている状態で、初歩的なミスがあったり説明が理解できない場合があったりするかもしれません。
丁寧に教えていただけると嬉しいです。
該当のソースコード
function for_users() { //自動返信メールの件名 var title = "申込完了通知"; //自動返信メールの本文 var body = "本文\n" + "本文\n" + "本文\n" + "----------------------------------------\n\n" var body2 = "----------------------------------------\n" + "【注意事項】\n" + "・注意1\n\n" + "・注意2\n\n" + "ーー*ーーー*ーーー*ーー\n" + " 連絡先\n" + "ーー*ーーー*ーーー*ーー\n\n"; //変数を設定 var name = '名前'; //フォームの項目名と同じにする,「様」を付けるための定義として必要 var mail = 'メールアドレス'; //フォームの項目名と同じにする, var address = ""; var sheet = SpreadsheetApp.getActiveSheet();//アクティブシートを取得 var row = sheet.getLastRow();//最終行を取得 var column = sheet.getLastColumn();//最後の入力情報を取得 var range = sheet.getDataRange();//範囲指定はなく全て var TIMESTAMP_LABEL = 'タイムスタンプ';//「タイムスタンプ」の項目を左辺と定義 var BIRTHDAY = '生年月日'; for (var i = 1; i <= column; i++ ) { //スプレッドシートの入力項目名 var item = range.getCell(1, i).getValue(); //スプレッドシートの入力値 var value = range.getCell(row, i).getValue(); for ( var n = 1; n <= row; n++){ //受付番号+教室毎の識別文字 var number ='受付番号(抽選結果確認時に必要)'; if ( item === number ){ value = "Y1-"//教室を判別する頭文字 value += n-1 } } //「タイムスタンプ」を、メールに出力時「申し込み日時」と書き換え if ( item === TIMESTAMP_LABEL ) { item = '申し込み日時'; } // 日付フォーマットを変更 if ( item === '申し込み日時' ) { value = Utilities.formatDate(value, 'Asia/Tokyo', "YYYY'年'MM'月'dd'日'HH'時'mm'分'ss'秒'"); } //生年月日フォーマットを変更 if ( item === '生年月日' ){ value = Utilities.formatDate(value, "JST", "YYYY'年'MM'月'dd'日'"); } //本文(body)にフォームの入力項目を追加,箇条書きにするため■を頭に body += "■"+item+"\n"; //本文にフォームの入力内容を追加 body += value + "\n\n"; //フォームの入力項目が「お名前」の場合は、「様」をつけて、本文の前に追加 if ( item === name ) { body = value+" 様\n\n"+body; } //フォームの入力項目が「ご連絡先メールアドレス」の場合は、変数addressに入れる if ( item === mail ) { address = value; } } //本文1に本文2を追加 body += body2; //宛名=address、件名=title、本文=body、{}内=送信アドレスの指定&差出人名をしてメールを送る var options = {from: "myaddress@ne.jp",name: "当社名"} GmailApp.sendEmail(address,title,body,options); }
試したこと
➀以下のコードをGASの別プロジェクトにコピペ(参考サイト:https://qiita.com/erb_owl/items/c0ad0d60d93233afe02e)
SEND_GRID_ENDPOINT = "https://api.sendgrid.com/v3/mail/send"; SEND_GRID_API_KEY = "取得したAPI KEY"; function sendEmailBySendGrid(to,subject,from,from_name,body_text){ var body = { "personalizations": [ { "to": [ { "email": to } ], "bcc":[ { "email": from } ], "subject": subject } ], "from": { "email": from, "name" : from_name }, "content": [ { "type": "text/html", "value": body_text } ] } var payload = JSON.stringify(body); UrlFetchApp.fetch(SEND_GRID_ENDPOINT, { method: 'POST', headers: { "Content-Type": 'application/json', "Authorization": "Bearer "+SEND_GRID_API_KEY}, payload: payload }); }
その後、元の自動返信コードのうち、下記の部分を試行錯誤しながら書き換え。
//こちらは元コードのまま。 //宛名=address、件名=title、本文=body、{}内=送信アドレスの指定&差出人名をしてメールを送る var options = {from: "myaddress@ne.jp",name: "当社名"} GmailApp.sendEmail(address,title,body,options); }
GmailApp.sendEmail を sendGridApi に変更するなど。
補足情報(FW/ツールのバージョンなど)
詳しくなく、わかりません。必須情報であれば追記します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/03/19 05:27
2023/03/19 05:43
2023/03/19 05:56
2023/03/21 00:01