2017-07-11 16 views
1

私は特定の1つのテーマにしたがって昨日の電子メールを取得しようとしていません。 通常、1時の深夜に何をするのですか?特定の件名のメールを数え、Googleスクリプトでメールを送信します。 3時には、前日のメールの削除を開始する1つの削除トリガをトリガします。 これにより、前日のメールがないことを保証します。私は上記の対象とGmailの電子メールをチェックすると、私は8のみ取得が、私のスクリプトは25通のメールを返している機能の下GmailApp.search()が正しいデータに失敗しているようです

function getEmailCount(query) { 
    var threads = GmailApp.search(query, 0, 500); 
    Logger.log(threads); 
    var total = 0; 

    for (var i = 0; i < threads.length; i++) { 
    var messagesInThread = threads[i].getMessageCount(); 
    var msg = threads[i].getMessages()[0].getSubject() 
    total = total + messagesInThread; 
    } 
    Logger.log(msg) 
    Logger.log("Query %s", query); 
    Logger.log("No. Of Threads %s", threads.length); 
    Logger.log("No. Of Emails %s", total); 
    return total; 
} 

を書かれているメールのノーをカウントする

var yesterday = "2017/7/10"; 
    var today = "2017/7/11"; 
var query = "after:"+yesterday+" before:"+today+" subject: abcd"; 

。どんな援助も高く評価されます。

+0

GMailは25個のメッセージを含む8つのスレッドを返しますか? 'threads.length'は何を解決するのですか? – Jonathon

+0

スレッドではなく8つの電子メールを返す –

+0

'threads.length'が返すのは何ですか? 25? – Jonathon

答えて

1

興味深いことに、GMailAppは、検索パラメータの外でGmailウェブアプリではないスレッド内のメールを返信します。私は、これが私が見ていた特定の電子メールの性質上、タイムゾーンに関連するものであるという疑いがあります。

コードにいくつかの変更を加えると、未処理の結果とWebアプリケーションが自由にスローしたUXのいくつかを区別することができます。さらに、これは検索基準に厳密に従うスレッドとメッセージをフィルタリングします。

function getEmailCount(query) { 
    var yesterday = "2017/06/07", 
     today = "2017/06/08", 
     yesterdayDate = new Date(yesterday), 
     todayDate = new Date(today); 

    query = query || "after:" + yesterday + " before:" + today + ""; 

    var threads = GmailApp.search(query).reduce(function(validThreads, thread, idx) { 

    var messages = thread.getMessages().reduce(function(messages, message, idx) { 
     var isChat = message.isInChats(), 
      isDeleted = message.isInTrash(), 
      sent = message.getDate(); 

     if (!isDeleted && !isChat && sent < todayDate && sent > yesterdayDate) { 
     messages.push(message.getSubject()); 
     }  

     return messages; 
    }, []); 

    if (messages.length > 0) { validThreads[idx] = messages; } 

    return validThreads; 
    }, {}); 

    var totalMessages = Object.keys(threads).reduce(function(count, thread) { 
    return count += threads[thread].length; 
    }, 0); 

    Logger.log("Query: %s", query); 
    Logger.log("No. Of Threads: %s", Object.keys(threads).length); 
    Logger.log("No. Of Emails: %s", totalMessages); 

    return totalMessages; 
} 
+0

タイムゾーンに問題がありました。私の日付をエポック形式に変換したところ、うまくいきました。 –

+0

削除した電子メールを除外するチェックのためにここにコードを残します。 – Jonathon

関連する問題