Spring Boot 我想从Java应用程序读取我的服务器Gmail帐户电子邮件

mgdq6dx1  于 2023-01-09  发布在  Spring
关注(0)|答案(1)|浏览(225)

我需要帮助来了解解决问题的确切途径。
我有一个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"
}

有没有人能帮助我到底应该如何着手实现我的目标。谢谢。

ghg1uchk

ghg1uchk1#

"先决条件检查失败。",
意味着您正在尝试使用具有标准google gmail地址的服务帐户。
服务帐户授权只适用于gmail api和google workspace帐户,一旦配置了域范围的授权。
你有两个选择
1.切换到使用谷歌工作区域帐户。
1.使用Oauth2,将应用程序设置为生产而非测试,以便刷新令牌不会过期。存储刷新令牌后授权应用程序,然后将其上载到服务器。它将能够在需要时使用刷新令牌请求新的访问令牌。

相关问题