You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Nodemailer发送HTML邮件模板?MERN栈报错求助

解决Nodemailer中HTML模板的SyntaxError问题

错误原因

你的代码报错核心有两个问题:

  • JavaScript对象的属性值如果是字符串,必须用引号(单引号、双引号或反引号)包裹,直接写<div>...</div>会让Node.js把<识别为非法语法符号,抛出SyntaxError。
  • 直接在字符串中写{name}不会自动解析为变量值,需要用ES6模板字符串的${变量名}语法才能实现动态变量插入。

可行的实现方法

方法1:使用ES6模板字符串(推荐)

用反引号(`)包裹HTML内容,同时用${变量名}插入动态值,写法简洁易读:

const {name, email, phone, message} = req.body;

const mailOptions = {
    from: process.env.AUTH_EMAIL,
    to: 'vs61@queensu.ca',
    subject: 'Community Partnership Project Contact Form Inquiry',
    html: `<div>Name: ${name}<br/>Email: ${email}<br/>Phone: ${phone}<br/>Message: ${message}</div>`
}

方法2:普通字符串拼接(兼容旧环境)

如果项目不支持ES6语法,可以用+拼接字符串和变量:

const {name, email, phone, message} = req.body;

const mailOptions = {
    from: process.env.AUTH_EMAIL,
    to: 'vs61@queensu.ca',
    subject: 'Community Partnership Project Contact Form Inquiry',
    html: '<div>Name: ' + name + '<br/>Email: ' + email + '<br/>Phone: ' + phone + '<br/>Message: ' + message + '</div>'
}

方法3:使用外部HTML模板文件(适合复杂模板)

如果邮件模板内容较多、结构复杂,可以把模板单独存为HTML文件,再读取并替换变量:

  1. 创建email-template.html文件:
<div>
    Name: {{name}}<br/>
    Email: {{email}}<br/>
    Phone: {{phone}}<br/>
    Message: {{message}}
</div>
  1. 后端读取并替换模板占位符:
const fs = require('fs');
const path = require('path');

const {name, email, phone, message} = req.body;

// 读取模板文件
const templatePath = path.join(__dirname, 'email-template.html');
let htmlContent = fs.readFileSync(templatePath, 'utf8');

// 替换模板中的变量占位符
htmlContent = htmlContent
    .replace('{{name}}', name)
    .replace('{{email}}', email)
    .replace('{{phone}}', phone)
    .replace('{{message}}', message);

const mailOptions = {
    from: process.env.AUTH_EMAIL,
    to: 'vs61@queensu.ca',
    subject: 'Community Partnership Project Contact Form Inquiry',
    html: htmlContent
}

内容的提问来源于stack exchange,提问作者Soccerball123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:18:28