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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

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

Gmail

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

Google Apps Script

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Google

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

Q&A

解決済

1回答

2515閲覧

未読のGmailのみスプレッドシートに転記させたい

yuki0137

総合スコア5

Google スプレッドシート

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

Gmail

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

Google Apps Script

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Google

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

0グッド

1クリップ

投稿2020/09/17 00:49

前提・実現したいこと

部署内で共有して使用しているアカウントに来た特定のGmailを、スプレッドシートに転記するスクリプトを作成しました。

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

未読メールがある日付に受信したもの全てを転記するようになっています。
例)
9/16受信分の中に未読があると、既読・未読に関わらず9/16に受信したもの全てを転記してしまう。
転記するのは未読だけでいいのですが、is:unreadだけでは不十分なのでしょうか。

該当のソースコード

function GmailToSpreadSheet() { //書き込むシートを取得 var sheet = SpreadsheetApp.getActive().getSheetByName('シート名'); //未読のメールの中から件名に問い合わせを含むものを条件で抽出 var threads = GmailApp.search('subject:メールの件名 is:unread'); // 最終行を取得 var row = sheet.getRange(sheet.getMaxRows(), 1).getNextDataCell(SpreadsheetApp.Direction.UP).getRow()+1; for(var n in threads){ var thread = threads[n]; var msgs = thread.getMessages(); for(m in msgs){ var msg = msgs[m]; //日時を取得 var date = msg.getDate();    //本文を取得 var body = msg.getBody();    //日時を転記 sheet.getRange(row,1).setValue(date);    //本文を転記 sheet.getRange(row,2).setValue(body); row++; } //抽出したメールを既読にする threads[n].markRead(); } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

GmailApp.search()の返り値はスレッドなので、「未読のメッセージを含むスレッド」が得られます。
提示されたコードは、スレッド内のメッセージをすべて処理していますから、既読のメッセージが含まれていると、それもスプレッドシートに転記されてしまうことになります。

対策としては、各メッセージを処理するforループの中で、「そのメッセージが未読かどうか」をisUnread()で確かめればいいでしょう。未読でないなら、以降の転記処理をスキップします。

Diff

1 for (m in msgs) { 2 var msg = msgs[m]; 3+ if (!msg.isUnread()) { 4+ continue; 5+ } 6 var date = msg.getDate(); 7 (以下略) 8 }

投稿2020/09/17 01:33

Daregada

総合スコア11990

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

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

yuki0137

2020/09/18 02:36

確認が遅れてしまい失礼いたしました。回答いただきありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問