为啥nodemailer在这里给出错误|| UnhandledPromiseRejectionWarning ||未定义收件人

Posted

技术标签:

【中文标题】为啥nodemailer在这里给出错误|| UnhandledPromiseRejectionWarning ||未定义收件人【英文标题】:why nodemailer giving error here || UnhandledPromiseRejectionWarning || No recipients defined为什么nodemailer在这里给出错误|| UnhandledPromiseRejectionWarning ||未定义收件人 【发布时间】:2021-11-09 22:37:18 【问题描述】:

我是 js 和开发新手,制作 node mailer 来发送电子邮件 将有效负载推送到数据库后。

错误 (node:8244) UnhandledPromiseRejectionWarning: 错误 [ERR_HTTP_HEADERS_SENT]: 发送到客户端后无法设置标头

错误:未定义收件人

我的装箱产品后控制器

const mailer = require("../config/nodemailer");
module.exports.create = async (req, res) => 

  try 
  let product = new Product(
    name: req.body.name,
    description: req.body.description,
    isFeatured: req.body.isFeatured,
  );

    // await product.save();
    await mailer.contact(req, res); // node mailer
    // console.log("productCreated ==>>", product);
    // res.status(200).json(product);

    return res.send("Dummy :product created");
   catch (error) 
    console.log("******Error While inserting data******", error);
    res.status(500).json( message: error.message );
  
;

节点邮件控制器

const nodemailer = require("nodemailer");

exports.contact = async (req, res) => 
//   var name = req.body.name;
//   var from = req.body.from;
//   var message = req.body.message;
//   var to = "jn";
  try 
    let transporter = nodemailer.createTransport(
      service: "gmail",
      host: "smtp.gmail.com",
      port: 587,
      secure: false, // true for 465, false for other ports
      auth: 
        user: "**********@gmail.com", 
        pass: "password",
      ,
    );
    //
    var mailoptions = 
      from: "**********@gmail.com",
      to:"**********@gmail.com",
      subject: "Sending Email using Node.js",
      text: "That was easy!",
    ;
    await transporter.sendMail(
      mailoptions,
      function(err, res) 
        if (err) 
          return res.status(200).json(
            message: err.message,
          );
        
        return res.status(200).json( message: "success" );
      ,
    );
   catch (error) 
    console.log(error);
    return res.json( message: message );
  
;

【问题讨论】:

【参考方案1】:

Nodemailer 需要一个数组或逗号分隔的列表,您使用的是纯字符串

to - 将出现在 To: 字段中的逗号分隔列表或收件人电子邮件地址数组

取自官方文档 https://nodemailer.com/message/

【讨论】:

谢谢,“to”的问题已解决,但第一个问题仍然存在:UnhandledPromiseRejectionWarning: E​​rror: Invalid login: 535-5.7.8 Username and Password not accepted________正确的电子邮件和密码 这可能看起来很愚蠢,但您是否设置了正确的凭据? 是的,所有的凭据都是正确的......没有找到失败的地方!!! nodemailer 中有一个明确的部分供 gmail 使用,您是否启用了 2FA? nodemailer.com/usage/using-gmail【参考方案2】:

兄弟,先导入nodemailer

const nodemailer = require("nodemailer");

var transporter = nodemailer.createTransport(
  service: 'gmail',
  auth: 
    user: 'youremail@gmail.com',
    pass: 'yourpassword'
  
);

var mailOptions = 
  from: 'youremail@gmail.com',
  to: 'friend@yahoo.com',
  subject: 'Your subject',
  text: 'Your message!'
;

transporter.sendMail(mailOptions, function(error, info)
  if (error) 
    console.log(error);
   else 
    console.log('Email sent: ' + info.response);
  
);

按照上述步骤,确保您的发送邮件 ID 没有启用两步验证。

【讨论】:

以上是关于为啥nodemailer在这里给出错误|| UnhandledPromiseRejectionWarning ||未定义收件人的主要内容,如果未能解决你的问题,请参考以下文章

为啥我收到错误“无法生成令牌。使用 Nodemailer 时检查您的身份验证选项?

使用 Nodemailer 从 Zohomail 发送邮件时出现连接超时错误

NodeMailer:getaddrinfo错误

防病毒软件正在阻止 nodemailer - 错误:证书链中的自签名证书

为啥 google_mobile_ads 和 flutter_native_admob 给出错误

为啥 array_diff() 给出数组到字符串的转换错误?