Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Gmail API获取邮件的限制_Javascript_Email_Google Api_Gmail_Gmail Api - Fatal编程技术网

Javascript Gmail API获取邮件的限制

Javascript Gmail API获取邮件的限制,javascript,email,google-api,gmail,gmail-api,Javascript,Email,Google Api,Gmail,Gmail Api,据我所知,目前google的API每秒向其API()提供10个请求,这远远不足以满足处理邮件的需要。我需要得到所有电子邮件的标题(或至少发件人和收件人)。还有什么比等待numberOfMails/10秒更好的吗 我目前正在从客户端JavaScript应用程序访问API,我正在考虑在多台机器/应用程序上为同一用户分发API调用,但还不清楚它们的限制是否适用于gmail用户或注册的应用程序 不管怎样,希望能对它有一些想法,因为目前的配额完全不可用。您可以使用批处理请求一起发送多个请求。这周我花了一整

据我所知,目前google的API每秒向其API()提供10个请求,这远远不足以满足处理邮件的需要。我需要得到所有电子邮件的标题(或至少发件人和收件人)。还有什么比等待
numberOfMails/10
秒更好的吗

我目前正在从客户端JavaScript应用程序访问API,我正在考虑在多台机器/应用程序上为同一用户分发API调用,但还不清楚它们的限制是否适用于gmail用户或注册的应用程序


不管怎样,希望能对它有一些想法,因为目前的配额完全不可用。

您可以使用批处理请求一起发送多个请求。这周我花了一整天的时间来弄明白这一点。java代码如下所示:

BatchRequest batchRequest = service.batch();
//callback function. (Can also define different callbacks for each request, as required)
JsonBatchCallback<Thread> callback = new JsonBatchCallback<Thread>() {

    @Override
    public void onSuccess(Thread t, HttpHeaders responseHeaders)
        throws IOException {
        System.out.println(t.getMessages().get(0).getPayload().getBody().getData());
    }

    @Override
    public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders)
        throws IOException {

    }
};

// queuing requests on the batch request
for (Thread thread : threads) {
    service.users().threads().get("me", threads.getId()).queue(batchRequest, callback);
 }


batchRequest.execute();
BatchRequest BatchRequest=service.batch();
//回调函数。(还可以根据需要为每个请求定义不同的回调)
JsonBatchCallback callback=新的JsonBatchCallback(){
@凌驾
成功时公共无效(线程t、HttpHeaders和responseHeaders)
抛出IOException{
System.out.println(t.getMessages().get(0.getPayload().getBody().getData());
}
@凌驾
失败时公开作废(Google JSonerror e、HttpHeaders负责人)
抛出IOException{
}
};
//在批处理请求上对请求进行排队
用于(线程:线程){
service.users().threads().get(“me”,threads.getId()).queue(批处理请求,回调);
}
batchRequest.execute();

由问题作者添加:针对同样有此问题的人:和。尽管RpcBatch已被弃用,但它现在可以正常工作,并且每批的请求限制为1000个。

您引用的10个请求/秒/用户限制不是以1秒的粒度强制执行的,而是一个更长的移动窗口。你应该能够超过该限制(即明显超过)数秒,然后再被推回。它是有意编写的,以允许用户进行短期突发,等等

批处理将有助于提高吞吐量,但不允许您在很长的时间内超过此限制(批处理中的100个请求仍视为100个请求)。我不会批量发送超过50或100个请求,否则您肯定会注意到其中一些请求被限制(429)


是的,项目范围内的限制比每秒10个请求的限制要慷慨得多。

您链接到的页面非常清楚地说明了使用限制:所有应用程序请求每天1000000000配额单位,每个gmail用户每秒有10个请求。@Frxstrem有什么比一个接一个地收到电子邮件更好的吗?@ArtemVolkhin我回答了这个问题。也许你也有同样的问题:@gitter看起来不错,我来试试try@gitter它可以工作(每批限制1000个请求)--添加它作为答案,我会接受它谢谢!0),每批最多可包含1000条消息。为什么是50或100,429是什么?我还注意到,批处理中每增加100个请求,完成响应时间就会降低大约1秒。1) 您对使用批处理可以获得多少消息有什么估计吗?2) 平行发送多个批次,而不是等待第一个发送的请求完成,这有意义吗?(0)没有说你不能发送1000个,这是允许的,说我不会(推荐)。“429”是限制HTTP响应,当您超出限制并且您的客户机预计将实现某种类型的指数退避时,就会发生这种情况。(1) 是的,50或100是目前最理想的。(2) 不,您可能仍然会遇到429个错误。你想做什么,一次发送50或100个请求是不够的?我想做一个分析应用程序。例如,我想让所有发件人显示前10位最频繁的发件人。我找不到比下载所有邮件并解析邮件头更好的解决方案。看起来这个API对于我的任务来说是一个错误的工具,IMAP会工作得更快,你怎么看?@EricDeFriez不管它值多少钱,我也发现50-100个请求是一个不幸的限制。如果您的程序处理用户收件箱中的每封电子邮件,并且用户在再次打开您的程序之前离开几天,那么由于请求的限制,将导致非平凡的处理时间。