gpt4 book ai didi

java - 如何通过 GMail API 使用 GSUITE 组 ID 发送电子邮件?

转载 作者:行者123 更新时间:2023-12-01 18:30:35 29 4
gpt4 key购买 nike

目前我正在处理一个请求,我需要使用 GMail API 从 GSuite 组 ID 发送电子邮件。我可以使用我的个人帐户发送电子邮件。我想避免使用别名并使用同一组电子邮件 ID 通过我的代码发送电子邮件。

final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

GoogleCredential credential1 = GoogleCredential.fromStream(new FileInputStream(CREDENTIALS_FILE_PATH));

GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(credential1.getServiceAccountId())
.setServiceAccountPrivateKey(credential1.getServiceAccountPrivateKey())
.setServiceAccountScopes(SCOPES)
.setServiceAccountUser("gsuitegroupemail@DOMAIN.COM")
.build();

Gmail service = new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY,credential).setApplicationName(APPLICATION_NAME).build();

MimeMessage mimeMessage = CreateMessage.createEmail("sourav.lion@DOMAIN.com",
"gsuitegroupemail@DOMAIN.COM", "TestGmailApi", "TestEmail");

App.sendMessage (service, "gsuitegroupemail@DOMAIN.COM", mimeMessage);

每当我尝试执行此操作时,我都会遇到“401 未经授权”错误。这是相同的堆栈跟踪。

Exception in thread "main" com.google.api.client.auth.oauth2.TokenResponseException: 401 Unauthorized
at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:394)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
at com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:217)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:868)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
at com.globalpayments.gmailapi.GMailApi.App.sendMessage(App.java:83)
at com.globalpayments.gmailapi.GMailApi.App.main(App.java:51)

最佳答案

401 Unauthorized 错误的问题在于它可能来自几个不同的来源。以下是更常见原因的概述。

第一步:

继续之前,请仔细检查您是否拥有 Gmail API [1] 在开发者控制台中启用 [2] 对于您正在使用的项目 - 它可能是为不同的项目启用的,甚至可能是在爬取设置时意外关闭的.

进入开发者控制台后,请从页面左上角 Google API 旁边的下拉列表中选择您的项目,然后检查 API 是否已启用。

调试401未经授权:

特定错误 TokenResponseException: 401 Unauthorized 也可能来自过期的访问 token 。虽然服务帐户的维护方式不必与用户帐户访问 API 的方式相同,但它确实是动态生成的,并且取决于您正在使用的凭据文件。

对于凭据,需要记住的重要一点是,您的服务帐户电子邮件地址和范围必须得到良好且完整的定义;也就是说,您正在使用的范围使您的应用程序能够访问它尝试访问的服务。对于 Gmail Users.messages:发送 [3] 方法,您将需要以下范围之一:

注意:确保您希望使用的应用程序中的其他方法具有可用的范围也很重要。查看特定于方法的页面以获取此信息。

另请查看 Google 的 API 管理页面,其中详细介绍了如何使用 Java 中的服务帐户进行身份验证 [4] 了解更多信息。

服务帐户和域范围委派:

根据 Google 文档,为您用来访问用户数据的服务帐户提供域范围内的授权非常重要 [5] 。引用#5 中提供了这些步骤,但概要如下:

To enable G Suite domain-wide delegation, follow these steps:

  1. Locate the newly-created service account in the table. Under Actions, click then Edit.
  2. In the service account details, click ˅ Show domain-wide delegation, then ensure the Enable G Suite Domain-wide Delegation checkbox is checked.
  3. If you haven't yet configured your app's OAuth consent screen, you must do so before you can enable domain-wide delegation. Follow the on-screen instructions to configure the OAuth consent screen, then repeat the above steps and re-check the checkbox.
  4. Click Save to update the service account, and return to the table of service accounts. A new column, Domain-wide delegation, can be seen. Click View Client ID, to obtain and make a note of the client ID.

401 中获取更多信息:

还可以通过从 HTTP 响应中提取数据来获取有关 401 的详细信息:

try {
App.sendMessage (service, "gsuitegroupemail@DOMAIN.COM", mimeMessage);
} catch (GoogleJsonResponseException e) {
// log your errors and error messages
}

引用文献:

  1. Gmail API v4
  2. Google Developer's Console
  3. Gmail API - Users.messages: send Method
  4. Authenticating with a service account
  5. Perform G Suite Domain-Wide Delegation of Authority

关于java - 如何通过 GMail API 使用 GSUITE 组 ID 发送电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60176491/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com