期望的行为
使用Gmail
,OAuth2
和Nodemailer
从服务器端node.js
文件发送电子邮件。
我尝试过的事情
相关文档
https://nodemailer.com/smtp/oauth2
https://nodemailer.com/usage/using-gmail
https://developers.google.com/gmail/api/auth/web-server
相关问题
send emails from MY gmail account with OAuth2 and nodemailer
How do I authorise an app (web or installed) without user intervention?
https://stackoverflow.com/a/47936349
https://stackoverflow.com/a/22572776
以上资源的说明中存在空白,并且一些信息已过时,因此下面的答案是我的最终实施方案,似乎可行。
我正在发布此解决方案以确认这是最佳做法,如果可以的话,可以节省其他时间。
答案 0 :(得分:4)
以下内容对我有用,分为两个部分:
01) app.js
02) Google
和OAuth2
设置
app.js
var nodemailer = require("nodemailer");
var transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
type: 'OAuth2',
user: local_settings.my_gmail_username,
clientId: local_settings.my_oauth_client_id,
clientSecret: local_settings.my_oauth_client_secret,
refreshToken: local_settings.my_oauth_refresh_token,
accessToken: local_settings.my_oauth_access_token
}
});
var mail = {
from: "John Smith <me@mydomain.com>",
to: "user@userdomain.com",
subject: "Registration successful",
text: "You successfully registered an account at www.mydomain.com",
html: "<p>You successfully registered an account at www.mydomain.com</p>"
}
transporter.sendMail(mail, function(err, info) {
if (err) {
console.log(err);
} else {
// see https://nodemailer.com/usage
console.log("info.messageId: " + info.messageId);
console.log("info.envelope: " + info.envelope);
console.log("info.accepted: " + info.accepted);
console.log("info.rejected: " + info.rejected);
console.log("info.pending: " + info.pending);
console.log("info.response: " + info.response);
}
transporter.close();
});
Google和OAuth设置
上面的代码需要进行以下设置:
01)
转到https://console.developers.google.com
02)
如果您没有项目,系统将提示您创建一个项目
03)
单击Create Project
04)
单击Create
06)
选择Gmail API
07)
单击Enable
08)
单击Create Credentials
09)
输入所需的设置
10)
为OAuth客户端命名,并确保将https://developers.google.com/oauthplayground
添加为redirect URI
,以便稍后生成refresh
和access
令牌>
12)
单击I'll do this later
和Done
13)
单击Edit
图标,以查看您的Client ID
和Client Secret
14)
要生成access
和refresh
令牌,请转到https://developers.google.com/oauthplayground
15)
单击右上角的cog
图标,选中Use your own OAuth credentials
并输入Client ID
和Client Secret
16)
在左列中,选择Gmail API v1
并单击Authorise APIs
17)
如果您登录了多个帐户,则在系统提示时选择相关帐户
18)
单击Allow
19)
单击Exchange authorisation code for tokens
答案 1 :(得分:2)
您绝对正确地了解了差距和过时的信息,并且在记录将Gmail与OAuth和nodemailer结合使用所需的步骤方面,您做得非常出色! 不过,我认为值得一提的是,在“凭据”页面中还有另外一步: OAuth同意屏幕标签。
它包含类似于Google Play应用程序提交的表单,该表单需要Google进行验证,如果您选择不通过验证的应用程序,则之前最多只能调用100个调用它们的敏感范围被要求提交。
我仍然不清楚这100个通话配额是否会被使用,即使您没有选择使用敏感范围的其他权限(默认权限是电子邮件,个人资料,openid)也是如此。我希望不会,因为OAuth同意屏幕会询问诸如应用程序主页链接和授权域之类的内容,如果您使用的是后端应用程序,则可能不需要这些内容。
我认为整个过程确实很慢,而且毫无用处,因为大多数人都执行所有这些步骤,只是使用nodemailer从他们的应用程序发送电子邮件...