使用Gmail API“500后端错误” - 可以安全重试吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Gmail API“500后端错误” - 可以安全重试吗?相关的知识,希望对你有一定的参考价值。

我正在通过Gmail API发送邮件。特别是,我试图在大约2秒内从同一个帐户向不同的用户(每个1个)发送5-7封电子邮件。

这些电子邮件中约有8%因此错误而失败:

&googleapi.Error{
    Code:500, 
    Message:"Backend Error", Body:`{
        "error": {
            "errors": [
            {
                "domain": "global",
                "reason": "backendError",
                "message": "Backend Error"
            }
            ],
            "code": 500,
            "message": "Backend Error"
        }
    }`, 
    Header:http.Header(nil),
    Errors:[]googleapi.ErrorItem{
        googleapi.ErrorItem{Reason:"backendError", Message:"Backend Error"}
    }
}

它似乎不是特定于特定帐户,因为6/7电子邮件可能会成功。

由于害怕向同一个人发送2封电子邮件,我对重试这一点犹豫不决。

有没有办法判断此消息是否可以重试?

答案

“code”:500,“message”:“后端错误”

基本上是Google服务器的问题。您正在进行的请求需要很长时间,或者预先形成请求的服务器正忙,请求再次花费很长时间。这听起来不像你正在做的应该导致问题。

不运行的提示:不要在你完成的时间内运行,每个设置了cron作业的人也不要在午夜(PDT)运行,因为这是重置配额的时候,你将再次与所有人一起完成吹掉了昨天的配额。

解:

正常的解决方案是等待几秒钟,然后再次发送相同的请求。 (实施Exponential Backoff

实现简单指数退避的流程如下。

  1. 向API发出请求
  2. 收到具有可重试错误代码的错误响应
  3. 等待1s + random_number毫秒秒
  4. 重试请求
  5. 收到具有可重试错误代码的错误响应
  6. 等待2s + random_number_milliseconds秒
  7. 重试请求
  8. 收到具有可重试错误代码的错误响应
  9. 等待4s + random_number毫秒秒
  10. 重试请求
  11. 收到具有可重试错误代码的错误响应
  12. 等待8s + random_number毫秒秒
  13. 重试请求
  14. 收到具有可重试错误代码的错误响应
  15. 等待16s + random_number_milliseconds秒
  16. 重试请求

如果仍然出现错误,请停止并记录错误。

另一答案

有时可以在发送之前发生,有时也可以在发送之后

我从五个不同的电子邮件尝试中记录了“收件人”和“发件人”,这些邮件都收到了500个后端错误。这些尝试都没有进入我的收件箱的“已发送”文件夹。我得出结论,他们从未被发送过,重试这些消息是安全的。但是,评论中的其他人(见下文)表明这些消息实际上已经发送到远程邮箱,并且重试是不安全的。

以上是关于使用Gmail API“500后端错误” - 可以安全重试吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用gmail api和c#从gmail中读取消息吗?

使用 GMail API,是不是可以将消息插入收件箱?

我们可以使用服务帐户访问 GMAIL API 吗?

作为发件人,使用 API 或标头,是不是可以检测电子邮件是不是使用 Gmail 的“计划发送”发送?

Gmail现在支持安排电子邮件,如何使用gmail rest api工作,还是api支持此功能?

退回 <nobody@gmail.com> Gmail API 发送失败