从Gmail API批量获取电子邮件发件人,发送超过10,000封电子邮件

时间:2018-03-16 07:00:13

标签: javascript google-chrome-extension google-api gmail-api

我正在制作与Gmail API互动的Chrome扩展程序。 基本上,它需要从与某些关键字匹配的电子邮件中提取电子邮件发件人。 问题是,有时会有超过10K的电子邮件与此关键字匹配。 我使用gapi.client.gmail.users.messages.get来获取与输入的关键字匹配的所有电子邮件,但这只返回电子邮件和线程ID,因此我需要为从messages.list检索到的每个电子邮件ID调用ERR_INSUFFICIENT_RESOURCES。 因此,对Gmail API的请求超过10K,我在Chrome中遇到messages.get错误。为了防止出现此错误,我在调用chromeOptions.add_experimental_option("prefs",prefs) chromeOptions.add_argument('--test-type') chromeOptions.add_argument("--disable-infobars") driver = webdriver.Chrome(driver_path, chrome_options=chromeOptions) 之间设置了一些超时,但是这需要很长时间才能完成......

是否有一些推荐的方式从Gmail API获取此类电子邮件?

2 个答案:

答案 0 :(得分:1)

根据documentation,提高性能的一种方法是批量处理请求。目前,每批次的限制为100个,但请求数量仍然少100倍。

编辑:您还可以在查询中使用fields参数从邮件中请求您想要的字段,因为messages.listmessages.get都可以返回整个users.messages Resource

例如:

var xhr = new XMLHttpRequest;
xhr.onload = () => {
    var resp = JSON.parse(xhr.response);
    var wholeFirstMessage = atob(resp.messages[0].raw);
    console.log(wholeFirstMessage);
};
xhr.open("GET", "https://www.googleapis.com/gmail/v1/users/userId/messages?fields=messages(id,threadId,raw)");
xhr.send();

注意:上面的代码示例忽略了XHR参数中的pageTokenmaxResults以简化'清酒。一长串消息需要这些参数。

答案 1 :(得分:0)

很遗憾,这是Gmail api的工作方式。

如果您想获得有关该消息的更多详细信息,则必须执行messages.list后跟message.get

对于api请求的速度有一个限制,如果你收到错误,你只需要减慢速度。 Flooding错误消息用于确保我们都使用api,并且一个人不会通过发出许多请求来过载。