如何发送服务电子邮件
- 从我的后端使用
smtp.google.com
或Gmail API
,同时确保 - 存储在后端服务器上的秘密只能用于发送特定发件人的电子邮件
目标
- 从我的后端发送用户帐户激活电子邮件
- 使用
smtp.google.com
或Gmail 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 key
:Manage 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服务器可能会更容易。