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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

1回答

1363閲覧

【Google Apps Script】全返信 自動送信

退会済みユーザー

退会済みユーザー

総合スコア0

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2020/07/14 09:36

前提・実現したいこと

スプレッドシートにまとめている表に記載している件名でGmailを検索し
最後の送信者が表に記載しているアドレス(担当者)ではない場合に
表に記載している定型文を最後のスレッドに全返信する。というプログラムを作成したいです。

表はF列に件名、D列に担当者のアドレス、G列に定型文が記載されています。

発生している問題・エラーメッセージ

エラーが発生していないのに、Gmailの返信が確認できない状況です。

該当のソースコード

function mailreplyAll() { //参照するシート var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getSheetByName("参照するシート名"); // シートの取得 //繰り返し用 var last_row = sheet.getLastRow(); //最後の行を取得 var begin_row = 2; // 処理を開始する行 //最後の送信者確認用 var threads = GmailApp.search(query); //条件に合致するメールのスレッドを取得 var messages = GmailApp.getMessagesForThreads(threads); //スレッド内のメールを取得。[スレッド番号][メッセージ番号]の2次元配列になる for(var i = begin_row; i <= last_row; i++) { //検索条件 var sell1 = "F"+i; var value1 = sheet.getRange(sell1).getValue();//件名を参照 var query = 'subject:' + value1; //検索条件 //最後の送信者がこのアドレス(自分)に合致していないものは未返信とする var sell3 = "D"+i; var value3 = sheet.getRange(sell3).getValue(); var myMailAddress = value3; //リマインド用の本文 var sell2 = "G"+i; var value2 = sheet.getRange(sell2).getValue(); var forwardBody = value2; //最後のスレッドの送信者を確認 for(var i=0; i < messages.length; i++) { var lastNum = messages[i].length-1; //スレッドの最後のメールのインデックスを取得(indexは0から始まるから-1する) Logger.log('やり取り数:'+ lastNum); var lastSender = messages[i][lastNum].getFrom(); //最後のメールの送信者を取得 Logger.log('最後の送信者:'+ lastSender); //未返信判定 if(lastSender.indexOf(myMailAddress) == -1) //indexOfは文字列に指定した文字が含まれていない場合は戻り値が-1となる //未返信の場合は全返信 var firstThread = GmailApp.getInboxThreads(0,1)[0]; firstThread.replyAll(forwardBody); } } }

試したこと

下記のコードでも返信を試みましたが、返信が確認できませんでした。

reply(body)    返信先アドレスを使用して、このメッセージの送信者に返信します。 reply(body, options) オプションの引数を指定した返信先アドレスを使用して、このメッセージの送信者に返信します。 replyAll(body)   このメッセージの返信先アドレスとすべての受信者を使用して送信者に返信します。 replyAll(body, options) オプションの引数を指定して、返信先アドレスとすべての受信者を使用して、このメッセージの送信者に返信します。

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

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

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

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

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

guest

回答1

0

var threads = GmailApp.search(query); //条件に合致するメールのスレッドを取得

この時点でqueryがないので、何も検索されてきていないだけです。

少なくとも

for(var i = begin_row; i <= last_row; i++) { //検索条件 var sell1 = "F"+i; var value1 = sheet.getRange(sell1).getValue();//件名を参照 var query = 'subject:' + value1; //検索条件 //最後の送信者確認用 var threads = GmailApp.search(query); //条件に合致するメールのスレッドを取得 var messages = GmailApp.getMessagesForThreads(threads); //スレッド内のメールを取得。[スレッド番号][メッセージ番号]の2次元配列になる /* 以下略 */ }

投稿2020/07/15 00:24

macaron_xxx

総合スコア3191

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

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

退会済みユーザー

退会済みユーザー

2020/07/15 10:20

ご回答ありがとうございます。 メールに返信はできるようになりました。 ただし、表に記載している件名とは異なるメールに全返信してしまい。。。 もしご教示いただける範囲内であれば、何が原因か分かりますでしょうか? 何卒よろしくお願い致します。
macaron_xxx

2020/07/15 23:16

//未返信の場合は全返信 var firstThread = GmailApp.getInboxThreads(0,1)[0]; firstThread.replyAll(forwardBody); ここじゃないですか? また新しく受信Boxからメッセージを取得しているようですし。
退会済みユーザー

退会済みユーザー

2020/07/16 02:42

ご返信ありがとうございます。 //未返信の場合は全返信 GmailApp.replyAll(forwardBody); こちらに修正すれば問題ないでしょうか?
macaron_xxx

2020/07/16 06:20

GmailAppにreplyAllなんてメソッドないですし… たぶんmessages[i][lastNum].replyAllじゃないですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問