我正在尝试使用
nodemailer
节点模块发送邮件并按如下方式配置。
... config.js ...
smtp: {
host: "smtp.gmail.com",
port: 465,
secure: true,
auth: {
user: "***@gmail.com",
pass: "****"
}
}
... mail.js ...
const config = require("../config");
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport(config.smtp);
const sendEmail = async (data, res) => {
// if(!data.to || !data.subject)
// return false;
data = { ...data, from: config.smtp.auth.user };
console.log(data)
transporter.sendMail(data, (error, info) => {
console.log(error);
res.send(error);
});
res.send(true)
}
module.exports = sendEmail;
... controller ...
router.get('/testEmail', async (req, res) => {
let emailData = {
to: "***@gmail.com",
subject: "Welcome to Musical World",
text: "test test"
};
let result = sendEmail(emailData, res);
console.log(result)
// res.send(result);
})
当我尝试发送电子邮件时,它返回
{"code":"EAUTH","response":"535-5.7.8 Username and Password not accepted. Learn more at\n535 5.7.8 https://support.google.com/mail/?p=BadCredentials p25-20020a056638217900b0033c14d2386bsm898629jak.75 - gsmtp","responseCode":535,"command":"AUTH PLAIN"}
所以我进行了谷歌搜索,发现这就是为什么我没有在我的谷歌帐户中打开不太安全的应用程序。 但当我去那里时,谷歌说
我尝试打开
less secure apps
,但 Gless secure apps
功能不可用。
那我该怎么办?
我终于自己解决了!.
Google 从 2022 年 5 月 20 日起不再支持
less secure app
功能。
它将帮助其他遇到此问题的开发人员。
所以我们无法仅使用
emal and password
访问gmail。
相反,我们必须使用 OAuth2
来访问 gmail。
... config.js ...
smtp: {
service: "gmail",
auth: {
type: "OAuth2",
user: "*****@gmail.com",
pass: "******",
clientId: "********",
clientSecret: "***********",
refreshToken: "************"
}
}
为此,您的谷歌云控制台中必须有 OAuth2 客户端。 这里有完整的详细信息,您可以参考。
https://www.freecodecamp.org/news/use-nodemailer-to-send-emails-from-your-node-js-server/
注意:如果尚未启用两因素身份验证,则需要启用。
安全性较低的应用程序 (https://myaccount.google.com/u/0/lesssecureapps) 选项已禁用。
请通过以下链接使用应用程序密码。
https://myaccount.google.com/u/0/apppasswords
使用 google 提供的 16 位代码代替密码,就可以了。