我已按照 nodemailer 网站上的说明进行操作,但用于 google 服务帐户的 OAuth2 根本不适合我。
将“主机”设置为 mail.google.com 时出现 ECONN 超时,或者在使用 smtp.gmail.com 作为主机时出现“401,不接受用户/密码,无法创建访问令牌”错误。
- 我用这个作为我的模板: http: //nodemailer.com/smtp/oauth2/#example-4
- 我已经设置了一个服务帐户:https ://developers.google.com/identity/protocols/OAuth2ServiceAccount
- 我已经启用了 gmail api。
- 我创建了验证令牌: https ://www.googleapis.com/oauth2/v1/tokeninfo
- 我也试过 xoauth2 npm 包来生成令牌,但失败了......
- 我也尝试了这个问题的答案,但仍然没有运气......
对于 3LO,似乎有无穷无尽的答案,但我没有为 2LO 尝试过这样的工作。现在,说了这么多。
var nodemailer = require("nodemailer");
var { google } = require("googleapis");
var accessToken;
var expires;
var key = require(“path/to/secrets.json");
var privateKey = key.private_key;
var jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, ["https://mail.google.com/"], null);
jwtClient.authorize(function(err, tokens) {
if (err) {
return;
} else {
token = tokens
accessToken = tokens.access_token //this **IS** a valid token
expires = tokens.expiry_date
}
var transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true,
auth: {
type: "OAuth2",
user: key.client_email, //I've also used my email here
serviceClient: key.client_id,
privateKey: privateKey,
accessToken: accessToken,
expires: expires,
},
});
var mailOptions = {
from: “me@here.com”
to: “me@there.com",
subject: "Ready",
text: “Really Ready"
}
transporter.sendMail(mailOptions, function(error, info) {
if (error) {
return;
}
console.log("Message %s sent: %s", info.messageId, info.response);
});
});
这产生了错误:
535-5.7.8 用户名和密码不被接受。但正如我所提到的,我尝试了不同的配置和设置,并得到了同样多的不同错误......
所以...有没有人成功地使用 nodemailer 为 2LO 使用服务帐户?
我正在使用节点 9.5.0 和 nodemailer ^4.6.0