質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Google+

Google+とは、Googleが提供するソーシャル・ネットワーキング・サービスです。情報を共有するユーザーの範囲を設定する「サークル」、Webカメラで複数名の相手と無料でビデオチャットできる「ハングアウト」などの機能があります。

SendGrid

SendGridは、米SendGrid社のクラウド型メール配信サービス。アカウントを作成するだけですぐに利用することが可能です。さらに到達率向上のための送信ドメイン認証対応や、柔軟性のあるスケーラビリティなど多くの機能を有します。

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

1563閲覧

Googleフォーム回答後のGASでの自動返信メールを、SendGrid経由で送信したい。

Mayutaros

総合スコア1

Google+

Google+とは、Googleが提供するソーシャル・ネットワーキング・サービスです。情報を共有するユーザーの範囲を設定する「サークル」、Webカメラで複数名の相手と無料でビデオチャットできる「ハングアウト」などの機能があります。

SendGrid

SendGridは、米SendGrid社のクラウド型メール配信サービス。アカウントを作成するだけですぐに利用することが可能です。さらに到達率向上のための送信ドメイン認証対応や、柔軟性のあるスケーラビリティなど多くの機能を有します。

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2023/03/19 02:38

実現したいこと

  • 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/ツールのバージョンなど)

詳しくなく、わかりません。必須情報であれば追記します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

まず、sendEmail関数を定義し、SendGrid APIを利用してメールを送信できるようにします。

function sendEmail(address, subject, body) {
var SENDGRID_API_KEY = 'your_sendgrid_api_key_here'; // ここにSendGrid APIキーを入力してください

var headers = {
'Authorization': 'Bearer ' + SENDGRID_API_KEY,
'Content-Type': 'application/json'
};

var emailData = {
'personalizations': [{'to': [{'email': address}]}],
'from': {'email': 'your_from_email_address_here', 'name': 'Your Name'}, // ここに差出人のメールアドレスと名前を入力してください
'subject': subject,
'content': [{'type': 'text/plain', 'value': body}]
};

var options = {
'method': 'post',
'headers': headers,
'payload': JSON.stringify(emailData)
};

var response = UrlFetchApp.fetch('https://api.sendgrid.com/v3/mail/send', options);

if (response.getResponseCode() == 202) {
Logger.log('Email sent successfully');
} else {
Logger.log('Error sending email: ' + response.getContentText());
}
}

次に、for_users()関数の最後にあるGmailApp.sendEmail(address,title,body,options);を、新しく定義したsendEmail関数を呼び出すように変更します。

sendEmail(address, title, body);

これで、Googleフォームの回答後にSendGrid経由で自動返信メールが送信されます。

注意: SendGrid APIキーと差出人のメールアドレスと名前を適切に設定してください。
また、SendGridでメールアドレスの認証やドメインの設定が完了していることを確認してください。

投稿2023/03/19 03:51

quiz

総合スコア258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mayutaros

2023/03/19 05:27

quiz様、コメントいただきありがとうございます。 貼っていただいたコードをコピペし、APIキー、差出人アドレス、名前を編集しました。 また、sendEmail(address, title, body);に書き換えも行いました。 しかし、おそらくまだSendGridを経由せずに送られているようです(自動返信はできたが、SendGrid経由等の文字が出てこない。) 試しに、APIキーをわざと間違えて入力したところエラーが出たので、連携自体は上手くいっていると思われます。認識が間違っていたらすみません。 こうなるとSendGrid側での設定に問題があるでしょうか。質問を重ねる形で申し訳ございませんが、よければ考えうる原因をご教授いただければとおもいます。
Mayutaros

2023/03/19 05:43

連投失礼します。 ただいまGmailの送信済みアイテムを確認したところ、テスト送信したメールがありませんでした。 これは即ちSendGridを経由して送信できているとみて大丈夫なのでしょうか。
quiz

2023/03/19 05:56

送信済みアイテムにメールがない場合、それはおそらくSendGrid経由で送信されたことを意味します。SendGridを使用すると、Gmailアプリケーションではなく、SendGridのAPIを介してメールが送信されるため、送信済みアイテムには表示されません。 SendGridのアカウントにログインし、ダッシュボードやActivity Feedページで送信履歴を確認できます。送信が成功していれば、ここに記録されているはずです。 これにより、SendGrid経由でメールが正常に送信されていることを確認できます。もし送信履歴に問題がある場合、エラーや失敗の原因を調べることができます。
Mayutaros

2023/03/21 00:01

ありがとうございます。 SendGridの方をきちんと確認したところ、配信したメールについての統計が確認できたため、うまくいっていました。こちらの勘違いでご迷惑をお掛けしました。 この度は、丁寧でわかりやすい回答を頂きありがとうございました。
guest

0

残念ながら、それは不可能です。
Googleのポリシーである、なりすましメール送信禁止とSendGridの売りのなりすましメール送信機能は相容れません。

投稿2023/03/19 02:44

編集2023/03/19 02:46
jmdajmw

総合スコア302

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mayutaros

2023/03/19 03:19

jmdajmw様、コメントありがとうございます。 「GASでは100通/日の上限だったものを、SendGridを利用することで12,000/月にすることができた」との情報を多数目にしたためSendGridの登録を行いましたが、自分が誤解している点や、どこか見落としている点はありますでしょうか。 また、jmdajmw様のコメントの根拠となる文面などはございますでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問