我正在努力解决 Gmail API 问题。需要开始的一些事情:
我的程序正在代表经过授权的用户发送电子邮件。几乎所有 Gmail API 功能都可以完美运行 - 我能够创建草稿、在不创建草稿的情况下发送电子邮件、对标签进行操作等。
此问题似乎仅在我尝试使用
users.drafts.send
方法发送草稿对象时才会发生:https://developers.google.com/gmail/api/reference/rest/v1/users.drafts/send
当我创建草稿消息,然后触发发送消息的请求时,我不一致地返回错误 400
Precondition check failed.
这是对端点的 POST 请求 https://gmail.googleapis.com/gmail/v1/users/me/drafts/send?uploadType=multipart
让我完全困惑的奇怪部分是,半秒后我可以使用相同的 OAuth 访问令牌针对不同的草稿消息 ID 发出相同的请求,并且效果完美。
此请求失败 - 时间戳 2022-01-04T19:43:50.278Z
Method:POST URL:https://gmail.googleapis.com/gmail/v1/users/me/drafts/send?uploadType=multipart Proto:HTTP/1.1 ProtoMajor:1 ProtoMinor:1 Header:map[Authorization:[Bearer ya29.a0ARrdaM9mREDACTED] Content-Type:[application/json]] Body:{Reader:0xc0004e7dd0} GetBody:0x7198e0 ContentLength:70 TransferEncoding:[] Close:false Host:gmail.googleapis.com Form:map[] PostForm:map[] MultipartForm:<nil> Trailer:map[] RemoteAddr: RequestURI: TLS:<nil> Cancel:<nil> Response:<nil> ctx:0xc000044060
身体对象:
{"id":"r155747228619414494","message":{"threadId":"17e269e7bb12bece"}}
此请求成功 - 时间戳 2022-01-04T19:43:50.230Z
Method:POST URL:https://gmail.googleapis.com/gmail/v1/users/me/drafts/send?uploadType=multipart Proto:HTTP/1.1 ProtoMajor:1 ProtoMinor:1 Header:map[Authorization:[Bearer ya29.a0ARrdaM9mREDACTED] Content-Type:[application/json]] Body:{Reader:0xc00061b920} GetBody:0x7198e0 ContentLength:70 TransferEncoding:[] Close:false Host:gmail.googleapis.com Form:map[] PostForm:map[] MultipartForm:<nil> Trailer:map[] RemoteAddr: RequestURI: TLS:<nil> Cancel:<nil> Response:<nil> ctx:0xc000044060
身体对象:
{"id":"r107084306592061046","message":{"threadId":"17e269e82b321030"}}
我正在捕获速率限制等场景的错误 - 所讨论的错误非常具体
Precondition check failed.
,到目前为止我只使用此特定端点看到了它。
我在网上找到的所有内容都表明此错误指向身份验证问题。我已经授权、未授权和重新授权,都没有区别。
我还返回到上面的开发人员页面,并使用 Gmail 测试工具发送相同的请求正文值,并且草稿发送成功,这表明这可能不是损坏的草稿消息。
所有这些背景都可以问两个问题:
谢谢!
我们最近开始收到
400
“前提条件检查失败。”不一致从
GET https://gmail.googleapis.com/gmail/v1/users/me/profile
这似乎与我们提出比平常更多的请求的日子一致,所以我目前的理论是,这是某种速率限制。然而,这也可能是谷歌端罕见的内部错误(如果我们更多地查询它们,这种情况也更有可能发生)。 根据评论,这似乎可能发生在几个不同的端点上,例如:
GET https://gmail.googleapis.com/gmail/v1/users/me/profile
GET https://gmail.googleapis.com/gmail/v1/users/{userId}/messages
POST https://gmail.googleapis.com/gmail/v1/users/me/drafts/send
如果这是速率限制,您可能想知道我们可以发送多少个请求。我们的“正常”查询量约为每小时 1000 个 API 请求,而在我们收到此错误的 3 天里,我们的查询量激增至每小时 3000 多个 API 请求。
看起来官方的速率限制在这里 https://developers.google.com/gmail/api/reference/quota 如果我没看错的话,我们的配额是每个用户每秒 250 个“getProfile”请求,我怀疑我们是否达到了这个配额。也许我们不知何故达到了不再指定的每日限额? https://stackoverflow.com/a/76965320/1877508