我需要帮助来了解解决问题的确切途径。
我有一个gmail地址(我可以说这个gmail是由我的java应用程序使用的)每当有邮件到达这个gmail地址时,我希望我的应用程序知道并从我的gmail收件箱中获取电子邮件,并继续进行进一步的逻辑。
到目前为止,通过谷歌文档,我已经创建了一个主题和一个订阅了该主题的订阅,使用推送机制,我也能够调用我的端点时,一个消息从谷歌控制台手动发布到该主题。
现在,我想如果任何电子邮件来我的gmail地址,它应该通知我的端点后,我可以只是从gmail获取电子邮件,并继续进行逻辑。
在这里,因为我只有我的gmail地址,我将访问我不认为我需要去的Oauth2机制的gmail身份验证的目的。
我看过文档,其中说.我应该创建一个手表请求,然后也许如果任何gmail收件箱收到邮件,它会通知我的端点,然后我可以获取邮件,并进一步进行.但我不知道什么和如何确切地我应该继续我需要一个服务帐户,如果是的话我已经创建了一个服务帐户,并下载了我的私钥.
GoogleCredential.fromStream(new FileInputStream("file.json"))
.createScoped(Collections.singleton(GmailScopes.MAIL_GOOGLE_COM)).createDelegated("xxxxx.iam.gserviceaccount.com");
那么我调用watch request作为:
Gmail gm = new Gmail.Builder(GoogleNetHttpTransport.newTrustedTransport(), JSON_FACTORY, googleCredBuilder()).build();
WatchResponse res = gm.users().watch("me", request).execute();
我得到了这个错误。
POST https://www.googleapis.com/gmail/v1/users/me/watch
{
"code": 400,
"errors": [
{
"domain": "global",
"message": "Precondition check failed.",
"reason": "failedPrecondition"
}
],
"message": "Precondition check failed.",
"status": "FAILED_PRECONDITION"
}
有没有人能帮助我到底应该如何着手实现我的目标。谢谢。
1条答案
按热度按时间ghg1uchk1#
"先决条件检查失败。",
意味着您正在尝试使用具有标准google gmail地址的服务帐户。
服务帐户授权只适用于gmail api和google workspace帐户,一旦配置了域范围的授权。
你有两个选择
1.切换到使用谷歌工作区域帐户。
1.使用Oauth2,将应用程序设置为生产而非测试,以便刷新令牌不会过期。存储刷新令牌后授权应用程序,然后将其上载到服务器。它将能够在需要时使用刷新令牌请求新的访问令牌。