2014-03-26 173 views
1

我想知道是否有人可以幫我弄清楚爲什麼從某個標籤獲取電子郵件的腳本無法正常工作。我對腳本相當陌生,並且在這裏和其他地方搜索了類似的帖子,但找不到任何內容。將電子郵件發送到電子表格中

這裏的腳本,因爲它現在是:

var threads = GmailApp.getUserLabelByName("Test").getThreads(); 
    for (var i = 0; i < threads.length; i++) { 
    var messages = GmailApp.getMessagesForThread(threads[i]); 
    for (var j = 0; j < messages.length; j++) { 
     var emails = messages[j].getPlainBody(); 

     Logger.log(messages[j].getPlainBody()); 
     sheet.getRange(j+1, 1).setValue(messages[j].getPlainBody()); 

我添加了記錄儀在那裏看到無論是獲得正確的信息,似乎它的作用:它得到25個消息出來,共40件(以總共15個線程),然後寫入:「記錄輸出太大,截斷輸出。」 (電子郵件很長)。但順序是正確的,從最後一條消息到第25條(涵蓋15條中的9條)。

當我然後setValue()電子郵件到電子表格中的列A時,它的行爲非常奇怪。它只能發送9條消息。爲什麼選擇9?它看起來完全是任意的:它獲得第一個線程,然後跳過2個線程並在第4個線程中顯示第二條消息,然後它跳到下一個線程,但跳過2條消息,然後它不再跳過,並添加以下內容6條消息。並在那裏停止,因爲沒有明顯的原因。

在這個唯一的(也許)非任意的事情是,它以第一條消息按時間順序開始,並停止在9條消息的線程的最後一條消息。但爲什麼要在那裏停下爲什麼跳過消息和線程?

任何想法?

謝謝

+0

只用另一個標籤名稱試了一下,它只有28條消息,一條消息有27條消息,一條消息帶有一條消息。 Logger獲取所有這些消息,setValue()任意跳過一條消息(看起來像),這是前一條消息,這是27條消息的第一條消息。 – GimelG

+0

我終於明白了。 P ... 問題是與範圍setValue() - 我沒有意識到循環是在整個語句上完成,而不僅僅是爲了提取值,結果它不斷地去j + 1並覆蓋以前的條目。將範圍內的行更改爲sheet.getLastRow()+ 1修復了它。 – GimelG

回答

0

我在應用程序中有相同的代碼,它的工作原理完美。

var mailLabel = GmailApp.getUserLabelByName(MAIL_LABEL); 
var threads = mailLabel.getThreads(); 

for(var i = 0; i < threads.length; i++) { 
    var messages = threads[i].getMessages(); 
    for(var j= 0; j < messages.length; j++) { 
    var data = messages[j].getPlainBody(); 
    } 
} 

在另一個標籤上用較少的電子郵件測試它,並在messages.length上做一個記錄器來闡明。

您應該將處理後的郵件移動到另一個嵌套標籤以減少工作流程。