使用私人电子邮件 smtp 服务器的 Nodemailer 身份验证失败

问题描述 投票:0回答:3

我正在使用私人电子邮件 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 + '.');
});

有什么想法吗?

node.js smtp nodemailer
3个回答
2
投票

您可以通过将以下参数添加到您的nodemailer createTransport函数来调试nodemailer:

  debug: true, // show debug output
  logger: true // log information in console

这样做时,我发现用户名和密码环境变量的字符串中包含引号和分号。解决方案是设置密码和用户名如下,不带引号或分号:

EMAIL_USERNAME = no-reply@****.com
EMAIL_PASSWORD = password

2
投票

我认为你必须通过

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 + '.');
});

0
投票

你必须添加 tls: {rejectUnauthorized: false } 属性 删除 auth 对象

nodemailer.createTransport({ 

  host: 'smtp1.mailserver.com',

  port: 25,

  tls: { rejectUnauthorized: false} 

});
© www.soinside.com 2019 - 2024. All rights reserved.