当前位置: 首页 > 知识库问答 >
问题:

如何使用Java通过GMAIL API使用服务账号发送邮件?

袁高明
2023-03-14

我正在尝试使用服务帐户通过GMAIL API从google compute实例发送电子邮件。我已经按照本文档的说明执行了所有步骤,但仍然收到一条错误消息,称“com . Google . API . client . auth . oauth 2 . tokenresponseexception:401 Unauthorized”。

下面是相同的代码片段。

public static void main( String[] args ) throws GeneralSecurityException, IOException, MessagingException
{
    final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
    GoogleCredential credentialFromJson = GoogleCredential
            .fromStream(new FileInputStream(
                    "/Users/souravc/Documents/MySpaceSRV6100/Java_Samples/EmailTest/mail-auth.json"))
            .createScoped(Collections.singletonList(GmailScopes.GMAIL_SEND));

    GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(HTTP_TRANSPORT)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId(credentialFromJson.getServiceAccountId())
            .setServiceAccountPrivateKey(credentialFromJson.getServiceAccountPrivateKey())
            .setServiceAccountScopes(SCOPES)
            .setServiceAccountUser("exampleemail").build();         

    //credential.refreshToken();

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

    String user = "me";
    Message123 obj = new Message123();
    obj.sendMessage(service, "me", obj.createEmail("exampleemail", "exampleemail",
            "Test", "Hi,\n\nTest Email\n\nThanks,\nSourav"));
}

在一个名为“消息123”的类中,我编写了发送消息()。下面是相同的代码。

public Message sendMessage(Gmail service, String userId, MimeMessage emailContent) throws MessagingException, IOException 
{
    Message message = createMessageWithEmail(emailContent);
    message = service.users().messages().send(userId, message).execute();
    System.out.println("Message id: " + message.getId());
    System.out.println(message.toPrettyString());
    return message;
}

注意:尚未向服务帐户授予委派全域性授权

你能帮忙做这件事吗?在这里,我想再问一个问题,即使我只是发送电子邮件,而不是读取/获取任何其他用户数据,我们是否需要向服务帐户分配全域授权?

提前感谢您的帮助

共有1个答案

高玮
2023-03-14

问题由此而来

注意:尚未向服务帐户授予委派全域性授权

在您的使用案例中,您希望服务帐户代表您发送电子邮件。它接近文档中提供的描述

例如,一个使用Google Calendar API向G Suite域中所有用户的日历添加事件的应用程序将使用一个服务帐户代表用户访问Google Calendar API

401错误意味着服务帐户已经被认证(或者你将有一个403 ),但是它没有被授权执行操作,代表你发送电子邮件

 类似资料:
  • 我想用Java从我的公司Outlook帐户发送邮件。但它说邮箱无法访问。我试过各种解决方案,比如更改主机名,但还是不行。错误保持不变。请对此提出任何解决方案。下面是我面临的错误片段。注意:我使用javax mail来实现这个目的。

  • 我试图发送电子邮件使用gmail smtp使用javax.mail.下面是我的代码 代码工作正常当我在本地服务器上运行它时,但当我尝试在Elastic beanstek上运行它时(我的服务器在AWS EBS上运行),身份验证失败异常即将到来注意:我已打开从Google A/c设置访问不太安全的应用程序,但我仍然收到此错误 javax.mail.身份验证失败异常:534-5.7.14请通过您的网络浏

  • 我正在使用JavaMail API在J中发送电子邮件。如果我在没有代理的情况下通过网络使用它,效果很好,但我们学院使用代理服务器,这就是为什么它在学院不起作用的原因。我认为我们的大学代理服务器只支持HTTP和HTTPS代理,不支持SOCKS代理。我用过 我还试着设置 但它仍然不起作用,出现了类似这样的错误 我知道JavaMail不支持通过web代理服务器访问邮件服务器。请告诉我如何重新爱上它?或者

  • 本文向大家介绍C#使用windows服务发送邮件,包括了C#使用windows服务发送邮件的使用技巧和注意事项,需要的朋友参考一下 最近做了一个使用 C# 写了一个发送邮件的windows 服务,在这里记录一下。 首先使用 Visual Studio 2015 创建一个 windows 服务项目。 然后在设计器上面右击添加安装程序。如下图。 安装好后,选择安装程序设计界面,选择服务和安装程序右击选

  • 本文向大家介绍PowerShell小技巧之使用Hotmail账号发送邮件,包括了PowerShell小技巧之使用Hotmail账号发送邮件的使用技巧和注意事项,需要的朋友参考一下 在低版本的PowerShell上发送邮件可以借助.NET的system.net.mail.smtpclient类。在高版本的PowerShell中可以借助现成的命令:Send-MailMessage 我在尝试使用Hotm

  • 我一直使用ZOHO SMTP服务器发送电子邮件。但是它在localhost服务器上工作,当将我的代码部署到AWS服务器上时,它就不能工作了,它给出了如下所示的异常… javax.mail.MessagingException:无法连接到SMTP主机:SMTP.zoho.com,端口:465;嵌套异常是:javax.net.ssl.sslhandShakeException:没有合适的协议(协议被禁