如何修复node.js网站中的nodemailer“对象对象”错误?

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

我正在为一个企业创建一个node.js网站,并希望每次有人申请时都能通过电子邮件通知。我每次提交工作申请表时都使用nodemailer和mailgun发送电子邮件。电子邮件正在发送,但是,它不包含我创建的申请人对象的键值对。任何帮助将不胜感激!

这是我在提交和申请enter image description here时收到的电子邮件的图片

这是我正在运行的nodemailer代码

const nodemailer = require('nodemailer');
const mailgun = require('nodemailer-mailgun-transport');
const debug = require('debug')('app:mail');

const auth = {
    auth: {
       api_key: '**************',
       domain: '***************' 
    }
};

const transporter = nodemailer.createTransport(mailgun(auth));

function sendOrderEmail(applicant) {
  let html = '<ul>';

  Object.entries(applicant).forEach(([key, value]) => {
    html += `<li>${key}: ${value}</li>`;
  });

  html += '</ul>';

  const mailOptions = {
    from: '*************',
    to: '*********, *************',
    subject: '*****************',
    html
  };

  transporter.sendMail(mailOptions, (err, info) => {
    if (err) {
      debug(`Error: ${err}`);
    } else {
      debug(`Info: ${info}`);
    }
  });
}

module.exports = sendOrderEmail;

这是我创建申请人对象的邮寄路线

app.post('/employment', function(req, res){

    var firstName = req.body.firstName;
    var middleInitial = req.body.middleInitial;
    var lastName = req.body.lastName;
    var address = req.body.address;
    var city = req.body.city;
    var state = req.body.state;
    var zipCode = req.body.zipCode;
    var phoneNumber = req.body.phoneNumber;
    var doYouRecieveText = req.body.doYouRecieveText;

    var newApplicant = {
        firstName: firstName,
        middleInitial: middleInitial,
        lastName: lastName,
        address: address,
        city: city,
        state: state,
        zipCode: zipCode,
        phoneNumber: phoneNumber,
        doYouRecieveText: doYouRecieveText
    };

    Applicant.create(newApplicant, function(err, newlyCreated){
        if(err) {
            console.log(err);
        } else {
            console.log(newlyCreated);
            sendOrderEmail(newlyCreated);
            res.redirect('/');
        }
    });
});
javascript node.js mailgun nodemailer
2个回答
1
投票

看起来你试图在你的html中插入的value是一个Object,但是html期望一个String类型的值。

尝试将value字符串化,然后再将其插入html中。

html += `<li>${key}: ${ typeof value === 'string' ? value : JSON.stringify(value)}</li>`;

0
投票

当我应该通过newApplicant变量时,我正在将newlyCreated参数传递给sendOrderEmail函数

Applicant.create(newApplicant, function(err, newlyCreated){
    if(err) {
        console.log(err);
    } else {
        console.log(newlyCreated);
        sendOrderEmail(newApplicant);
        res.redirect('/');
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.