错误 4000 前提条件检查失败 - Google Gmail API 服务帐户

Error 4000 Precondition Check Failed - Google Gmail Api Service Account

提问人:Harmandeep Dubb 提问时间:11/14/2023 更新时间:11/15/2023 访问量:34

问:

当我尝试使用服务帐户实现与 gmail api 的连接并收到错误时,我遇到了一个问题:

Error 400: Precondition check failed., failedPrecondition

以下是正在执行的代码:

func connectToGmail() error {
err := godotenv.Load()
if err != nil {
    return err
}
gmailService, err := gmail.NewService(context.Background(), option.WithScopes(gmail.GmailReadonlyScope))
if err != nil {
    return err
}

resp, err := gmailService.Users.Messages.List("me").Do()
if err != nil {
    return err
}

fmt.Println(resp)

return nil

}

从我的研究中,没有什么能让我相信我的代码有什么问题,所有的研究和错误代码都让我相信我的设置是错误的。

我已经完成了两次服务帐户的设置过程(我将在下面描述),但没有任何成功,如以下链接所示:

https://developers.google.com/workspace/guides/create-credentials#google-cloud-console

  1. 已创建服务帐户

  2. 已将组管理员角色分配给帐户

  3. 为帐户创建密钥

  4. 下载了制作的 Json 并将其重命名为 credentials.json 并将其放入我的编码目录中

  5. 将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为凭据文件的绝对路径。

  6. 设置域范围的委派。复制客户端 ID 并转到 APi 控件,并添加客户端 ID 以及以下范围:https://www.googleapis.com/auth/gmail.readonlyhttps://www.googleapis.com/auth/gmail.modify https://mail.google.com/

  7. 已运行代码。

选择这些范围的原因是因为我只想自动阅读我帐户中的电子邮件,添加了修改和 mail.google 的电子邮件,因为我认为只读是限制性的,是我错误的原因。我的应用程序的目的是能够在事件发生后阅读收件箱中的电子邮件,并验证电子邮件是否已收到。

如果需要更多信息,请告诉我。

非常感谢任何指导。

谷歌 gmail-api 服务-帐户

评论


答:

0赞 Linda Lawton - DaImTo 11/14/2023 #1

预构建失败正常意味着您使用的是 Gmail 服务帐号,而未配置网域范围的 delig

检查代码模拟的 deligation 和 user

config, err := google.JWTConfigFromJSON(serviceAccountJSON,
        "https://mail.google.com/", "https://www.googleapis.com/auth/cloud-platform",
    )

config.Subject = "[email protected]"

评论

0赞 Harmandeep Dubb 11/15/2023
我已经配置了域范围的委派。据我了解,我可以使用模拟或带有服务帐户的密钥。这是不正确的吗?
0赞 Linda Lawton - DaImTo 11/15/2023
我看不出您在哪里添加要冒充的主题。