Node.js 使用PrivateMail smtp服务器的NodeEmailer身份验证失败

Node.js 使用PrivateMail smtp服务器的NodeEmailer身份验证失败,node.js,smtp,nodemailer,Node.js,Smtp,Nodemailer,我正在使用私有电子邮件SMTP服务器向用户发送密码重置。他们的网站指示使用端口465,并在NodeEmailer中将安全设置为true。我似乎连接良好,但我无法验证。我已经仔细检查了我的用户名和密码,因此我知道问题出在我的NodeEmailer配置上: var transporter = nodemailer.createTransport({ host: 'mail.privateemail.com', port: 465, secure: true, auth: {

我正在使用私有电子邮件SMTP服务器向用户发送密码重置。他们的网站指示使用端口465,并在NodeEmailer中将安全设置为true。我似乎连接良好,但我无法验证。我已经仔细检查了我的用户名和密码,因此我知道问题出在我的NodeEmailer配置上:

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

有什么想法吗?

您可以通过向NodeEmailr createTransport函数添加以下参数来调试NodeEmailr:

  debug: true, // show debug output
  logger: true // log information in console
在这样做时,我发现username和password环境变量的字符串中有引号和分号。解决方案是按如下方式设置密码和用户名,不带引号或分号:

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

我认为您必须通过
secureConnection:true
而不是
secure:true
此外,端口是587而不是465请检查此处 这是修改后的代码

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