NodeMailer - 没有收件人定义的错误

时间:2017-07-11 17:14:11

标签: node.js mongodb email mongoose nodemailer

我正在尝试使用Node mailer发送电子邮件。我的设置如下。收件人来自Mongoose模型。在Model Rentals.createdbyemail中包含用户的电子邮件地址。我已经仔细检查以确保电子邮件地址包含在Rentals.createdbyemail中,并且确实如此。

由于某些原因,当此代码运行时,我收到错误:

Error: No recipients defined

如何更改代码以更正此错误?谢谢你的帮助!
注意:如果我只输入“收件人”字段的电子邮件地址,则此功能正常。

 var smtpTrans = nodemailer.createTransport({
       service: 'Gmail',
        auth: {
            user: 'myemail@gmail.com',
            pass: 'password'
        }
      });
      var mailOptions = {
        to: Rentals.createdbyemail,
        from: 'email',
        subject: 'subject',
        text: 'This is the email content'
      };
      smtpTrans.sendMail(mailOptions, function(err) {
        console.log('email sent')

        if (err){
        console.log(err)
        }
      });

收件人来自猫鼬模型:

var rentalsSchema = new mongoose.Schema({
   reserved: {type: Boolean, default: false},
   createdby: String,
   createdbyemail: String,
   reservedby: String,
   reservedemail: String,
   author: {
      id:{
       type: mongoose.Schema.Types.ObjectId,
       ref: "User"
      },
       username: String,
       email: String
   },

module.exports = mongoose.model("Rentals", rentalsSchema);

1 个答案:

答案 0 :(得分:1)

在您的代码中缺少分配收件人电子邮件,因为您使用了Rentals.createdbyemail这不是一种有效的分配方式。因此,您应该从数据库中检索createdbyemail,然后使用检索电子邮件。

我不知道您要从哪里发送电子邮件(表示从哪个功能或如何从数据库中检索)。所以我正在展示如何检索和发送电子邮件

像:

Rentals

中检索电子邮件
// {field: value} to get specific Rental
Rentals.findOne({field: value}, function(err, rental) {
 if(rental) {
   var smtpTrans = nodemailer.createTransport({
       service: 'Gmail',
        auth: {
            user: 'myemail@gmail.com',
            pass: 'password'
        }
      });
      var mailOptions = {
        to: rental.createdbyemail,
        from: 'email',
        subject: 'subject',
        text: 'This is the email content'
      };
      smtpTrans.sendMail(mailOptions, function(err) {
        console.log('email sent')

        if (err){
        console.log(err)
        } else {
           return from here 
        }
      });
 }
});