我正在使用私人电子邮件 SMTP 服务器向用户发送密码重置。他们的网站指示使用端口 465 并在 nodemailer 中将 secure 设置为 true。我似乎连接正常,但无法进行身份验证。我已经仔细检查了我的用户名和密码,所以我知道问题出在我的 nodemailer 配置上:
var transporter = nodemailer.createTransport({
host: 'mail.privateemail.com',
port: 465,
secure: true,
auth: {
user: process.env.SMTP_USERNAME,
pass: process.env.SMTP_PASSWORD
}
});
var mailOptions = {
from: 'no-reply@****.com',
to: user.email,
subject: 'Reset Password',
text: 'Hello,\n\n'
+ 'Please reset your password by clicking the link: \nhttp:\/\/'
+ req.headers.host + '\/confirmation\/' + token.token + '.\n'
};
transporter.sendMail(mailOptions, function (err) {
if (err) { return res.status(500).send({ msg: err.message }); }
res.status(200).send('A password reset email has been sent to ' + user.email + '.');
});
有什么想法吗?
您可以通过将以下参数添加到您的nodemailer createTransport函数来调试nodemailer:
debug: true, // show debug output
logger: true // log information in console
这样做时,我发现用户名和密码环境变量的字符串中包含引号和分号。解决方案是设置密码和用户名如下,不带引号或分号:
EMAIL_USERNAME = no-reply@****.com
EMAIL_PASSWORD = password
我认为你必须通过
secureConnection:true
而不是secure:true
端口也是 587 而不是 465,请查看此处 namecheap docs
这是你修改后的代码
var transporter = nodemailer.createTransport({
host: 'mail.privateemail.com',
port: 587,
secureConnection: true,
auth: {
user: process.env.SMTP_USERNAME,
pass: process.env.SMTP_PASSWORD
}
});
var mailOptions = {
from: 'no-reply@****.com',
to: user.email,
subject: 'Reset Password',
text: 'Hello,\n\n'
+ 'Please reset your password by clicking the link: \nhttp:\/\/'
+ req.headers.host + '\/confirmation\/' + token.token + '.\n'
};
transporter.sendMail(mailOptions, function (err) {
if (err) { return res.status(500).send({ msg: err.message }); }
res.status(200).send('A password reset email has been sent to ' + user.email + '.');
});
你必须添加 tls: {rejectUnauthorized: false } 属性 删除 auth 对象
nodemailer.createTransport({
host: 'smtp1.mailserver.com',
port: 25,
tls: { rejectUnauthorized: false}
});