如何使用Google Apps脚本读取Gmail中的所有电子邮件 [英] How to read all emails in gmail using google apps script

查看:176
本文介绍了如何使用Google Apps脚本读取Gmail中的所有电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试读取我的gmail帐户中的所有电子邮件-收件箱,已发送,草稿,垃圾箱,带有标签的电子邮件,存档等等.

(下面的所有示例都使用try {} catch {}来避免带有空标签等的错误.)

我尝试过

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显示5478).如果我从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个结果

is:read = 1,037个结果

is:read或is:unread = 599个结果

他们都没有给出正确的数字,甚至没有给出正确的数字,而且顺便说一句,如果我直接在gmail中尝试使用这些搜索字词,我得到的结果将完全不同,甚至更高-数千或很多".

我认为这与解决方案

尝试一下:

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[j].getMessageCount();
      //Logger.log('thread message count: ' + threads[j].getMessageCount());
      // You could do something with threads[j] here like
      // threads[j].moveToTrash();
      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());
}

I'm trying to read ALL email in my gmail account - inbox, sent, draft, trash, emails with labels, archive, etc. I could live without the junk but I want everything else.

(all examples below use try {} catch {} to avoid errors with empty labels etc.)

I've tried

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;
}

That gives me everything in the labels (I think) but not the other stuff.

I tried other things, to get the inbox (to combine with the above) or all of the emails

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

but I only get about 549 results (GMail shows 5,478). If I add in the results from getPriorityInboxThreads I get 1,829 results.

I tried

// 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;

I get 598 results. I tried different search terms in the code directly above, eg:

is:unread = 528 results

is:read = 1,037 results

is:read OR is:unread = 599 results

None of them gave the right number, or even close, and incidentally if I try those search terms directly in gmail I get a totally different, and much higher, result for each - several thousand, or 'many'.

I don't think this is related to How to use Google App Scripts to retrieve Gmail emails in a customised way? as the numbers returned are not round numbers (eg 500).

I'm assuming that I can use getSpamThreads, getStarredThreads, getTrashThreads, getDraftMessages to get the relevant folders but until I understand why I'm only getting some emails from the inbox I don't trust those to give me everything.

Can anyone help?

解决方案

Try this:

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[j].getMessageCount();
      //Logger.log('thread message count: ' + threads[j].getMessageCount());
      // You could do something with threads[j] here like
      // threads[j].moveToTrash();
      theCount = theCount + msgCount;
    };
  };
  //Logger.log('theCount: ' + theCount);
};

It first gets all the labels, then the threads, then the message count in each thread, and keeps a running count. You'll also need to get the messages in the inbox, that code doesn't include them. This is the sample code from the documentation that shows the basic concept:

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

这篇关于如何使用Google Apps脚本读取Gmail中的所有电子邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆