如何在有安全限制的情况下通过Gmail(机器2机器)发送服务电子邮件



如何发送服务电子邮件

  • 从我的后端使用smtp.google.comGmail API,同时确保
  • 存储在后端服务器上的秘密只能用于发送特定发件人的电子邮件

目标

  • 从我的后端发送用户帐户激活电子邮件
  • 使用smtp.google.comGmail API(即没有自己的SMTP服务器(
  • 使用OAuth2.0进行身份验证(即,不要启用"不太安全的应用程序"(

当前状态

  • 实现了电子邮件发送部分
  • 为了进行测试,我创建了一个noreply@**.**Google Suite帐户
  • 为了进行测试,我通过OAuth2 Playground生成了一个accessToken
  • 使用accessToken,我可以通过smtp.googl.com发送电子邮件

问题

  • 谷歌建议使用service account
  • 但要从no-reply@x.y发送电子邮件,我必须启用域范围委派
  • 域范围委派允许模拟每个域帐户
  • 存储在后端的秘密应该只允许从no-reply@**.**发送邮件

让我们从send user account activation emails from my server开始,我假设您有一个web应用程序。此web应用程序允许用户向您的系统注册。现在,当用户在您的系统中注册时,您希望自动向他们发送一封创建帐户的电子邮件。你的想法是使用谷歌,而不是建立自己的smtp服务器并从自己的系统发送这些电子邮件。真是个不错的主意。

让我们思考一下,电子邮件需要自动发送,所以你需要某种服务来发送它们。为此,您需要使用服务帐户。同样,这是一个使用预授权服务帐户的好主意,您不需要有用户来授权应用程序。

唯一的问题是服务帐户不能与普通的gmail帐户一起使用。要使用带有Gmail api的服务帐户,您需要使用谷歌工作区域帐户。然后,工作区域管理员将能够向服务帐户添加权限,让它像域上的用户一样工作。在这种情况下,你的想法没有答复。

因此,您的工作区域帐户将有一个名为no reply的用户。然后,域管理员将配置对服务帐户的域范围委派,允许它假装自己是被呼叫无应答的用户。无论出于何种目的,服务帐户都是无回复用户。它将能够发送邮件,就好像它们来自那个用户一样。

要使所有这些工作正常进行,您需要该用户的工作区帐户。

看看下面的链接,它实际上是谷歌的一个更好的例子,它展示了如何设立代表团。

执行谷歌工作区域授权

在这里,您创建了一个带有凭据的服务帐户,允许该帐户模拟其他用户(例如no-reply用户(,仅使用Gmail API,仅用于发送电子邮件。

  • 文档有点过时,您可以跳过步骤Grant users access to this service account,然后通过服务帐户编辑功能创建service account keyManage keys
  • 在步骤Domain wide delegation中,您需要Google Admin,而不是上一步中的Google Cloud Platform管理控制台

只记得换掉关于的行

https://www.googleapis.com/auth/admin.directory.user,
https://www.googleapis.com/auth/admin.directory.group

并使用

https://www.googleapis.com/auth/gmail.send

相反,因为你想访问Gmail API,并且只允许服务帐户发送(而不是阅读(电子邮件

尖端

在该链接中的示例代码中

.setServiceAccountUser(userEmail)

userEmail是在这种情况下要模拟的用户的电子邮件地址no-reply@x.y

所以我想我想说的是,你想做的事情肯定是可能的,然而,只需设置自己的SMTP服务器可能会更容易。

相关内容

  • 没有找到相关文章

最新更新