2015-05-19 5 views
2

Я пытаюсь прочитать ВСЕ электронную почту в моей учетной записи gmail - входящие, отправленные, черновики, корзины, электронные письма с ярлыками, архив и т. Д. Я мог бы жить без мусора, но Я хочу все остальное.Как читать все письма в gmail с помощью скрипта Google Apps

(все приведенные ниже примеры использования попытки {} поймать {}, чтобы избежать ошибок с пустыми этикетки и т.д.)

Я пытался

for (var i=StartLabel; i<=EndLabel; i++) 
{ 
    var label = labels[i].getName(); 

    // get all messages, then join them into a single dimension array 
    var messages = GmailApp.getMessagesForThreads(GmailApp.search("label:" + label)) 
        .reduce(function(a, b) {return a.concat(b);}); 
    CountByLabels += messages.length; 
} 

Это дает мне все, что в ярлыках (я думаю) но не другие.

Я попробовал другие вещи, чтобы получить почтовый ящик (в сочетании с выше) или все электронные письма

var messages = GmailApp.getMessagesForThreads(GmailApp.getInboxThreads()).reduce(function(a, b) {return a.concat(b);}); 
CountInbox += messages.length; 

, но я только получить около 549 результатов (GMail показывает 5,478). Если я добавлю результаты из getPriorityInboxThreads, я получу 1,829 результатов.

Я попытался

// get all messages, then join them into a single dimension array 
var messages = GmailApp.getMessagesForThreads(GmailApp.search("(is:unread OR is:read) in:anywhere")).reduce(function(a, b) {return a.concat(b);}); 
CountByLabels += messages.length; 

Я получаю 598 результатов. Я пробовал различные условия поиска в коде непосредственно выше, например:

является: непрочитанные = 528 результатами

является: прочитать = 1,037 результатов

является: читать или это: непрочитанные = 599 результатов

Ни один из них не дал правильный номер или даже закрыл, и, кстати, если я попробую эти поисковые термины непосредственно в gmail, я получаю совершенно другой и намного более высокий результат для каждого - несколько тысяч или «много».

Я не думаю, что это связано с How to use Google App Scripts to retrieve Gmail emails in a customised way?, поскольку возвращаемые числа не являются круглыми числами (например, 500).

Я предполагаю, что я могу использовать getSpamThreads, getStarredThreads, getTrashThreads, getDraftMessages, чтобы получить соответствующие папки, но пока не понял, почему я получаю только электронные письма из папки «Входящие», я не доверяю этим, чтобы дать мне все.

Может ли кто-нибудь помочь?

+0

быть ясным: Хотя примеры показывают подсчет количества сообщений (чека реальности я использую для остальной части вопроса), это НЕ то, что мне нужно - как сказано, я пытаюсь ПРОЧИТАТЬ их - я хочу получить доступ к различным данным о них один за другим. –

+0

Я должен добавить, что я планирую перейти к методу getInboxThreads (начало, максимальный) коллекции сообщений (для getInboxThreads, search и т. Д.), Как только я получу это для правильной работы. –

ответ

2

Попробуйте это:

function allEmailsInLabels() { 
    var allLabels,i,j,L,L2,msgCount,theCount,threads,thisLabel; 

    msgCount = 0; 
    theCount = 0; 

    allLabels = GmailApp.getUserLabels(); 
    L = allLabels.length; 

    for (i = 0; i < L; i++) { 
    Logger.log("label: " + allLabels[i].getName()); 
    thisLabel = allLabels[i]; 
    threads = thisLabel.getThreads(); 
    //Logger.log('threads: ' + threads); 

    L2 = threads.length; 

    for (j = 0; j < L2; j++) { 
     msgCount = threads[i].getMessageCount(); 
     //Logger.log('thread message count: ' + threads[j].getMessageCount()); 
     theCount = theCount + msgCount; 
    }; 
    }; 
    //Logger.log('theCount: ' + theCount); 
}; 

Это первый получает все метки, то нитки, то количество сообщений в каждом потоке, и сохраняет текущий счет. Вам также нужно будет получать сообщения в папке «Входящие», этот код их не включает. Это пример код из документации, которая показывает основную концепцию:

// Log the subject lines of your Inbox 
var threads = GmailApp.getInboxThreads(); 
for (var i = 0; i < threads.length; i++) { 
    Logger.log(threads[i].getFirstMessageSubject()); 
} 
+0

Интересно, может ли электронная почта не иметь ярлыков? –

+0

Если он находится в папке «Входящие», я думаю, что у него нет ярлыка. –

+0

, так что не получится? (havent попробовал извините) –

0

Это не ответ на проблему (но, вероятно, одна из причин, возвратившиеся ваши Итоговые результаты не согласен с тем, что вы видите в почтовом ящике gmail), но выделяет одну из проблем, с которыми я столкнулся при вызове getPriorityInboxThreads(), в том, что он игнорирует любой поток, который не помечен как «важный» в первичных входящих.

//returns 10 threads and 1st message for each thread 
function getThreads(){ 
    var ret = ''; 
    var threads = GmailApp.getPriorityInboxThreads(0, 10); 
    for (var i = 0 ; i < threads.length; i++) { 
    var id = threads[i].getId(); 
    var message = GmailApp.getMessageById(id); 
    ret += "subject: " + message.getSubject() +'\n'; 
    Logger.log("subject: " + message.getSubject()); 

    /*Edited this out as it doesn't return anything 
    //check for labels on this thread 
    var labels = threads[i].getLabels(); 
    for (var j = 0; j < labels.length; j++) { 
     Logger.log(labels[j].getName()); 
    } */ 
    } 

return ret; 
} 

«Важно» классифицируются как флаг системы и getPriorityInboxThreads() игнорирует любые темы, не помеченные важно ....

Я хочу выбрать все темы в "Первичном" почтовом ящике, независимо от того, чтобы быть помечены как "важные".

Чтобы проверить, просто изменить любой поток в почтовом ящике для важных или нет и т.д.