在 Node.js 中发送带有动态内容的 HTML 邮件可以通过使用 Nodemailer 和模板引擎(例如 EJS)来实现。以下是一个完整的示例,展示如何使用 EJS 模板引擎来填充变量,并通过 Nodemailer 发送邮件。
步骤
- 安装依赖
首先,确保你已经安装了 Nodemailer 和 EJS:
npm install nodemailer ejs
- 创建 EJS 模板
在项目目录中创建一个文件夹来存放你的模板文件,比如 templates。然后创建一个 email.ejs 文件:
templates/email.ejs:
html
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>邮件示例</title>
</head>
<body>
<h1><%= title %></h1>
<p><%= content %></p>
</body>
</html>
- 创建 Node.js 脚本
在你的项目根目录下创建一个 sendEmail.js 文件,并编写以下代码:
const nodemailer = require('nodemailer');
const ejs = require('ejs');
const fs = require('fs');
const path = require('path');
// 配置 SMTP 客户端
const transporter = nodemailer.createTransport({
host: 'smtp.gmail.com', // SMTP 服务器地址
port: 587, // 端口
secure: false, // true for 465, false for other ports
auth: {
user: 'your-email@gmail.com', // 你的邮箱地址
pass: 'your-app-password' // 你的邮箱密码或应用专用密码
}
});
// 读取 EJS 模板
const templatePath = path.join(__dirname, 'templates', 'email.ejs');
const template = fs.readFileSync(templatePath, 'utf8');
// 渲染 EJS 模板
const htmlContent = ejs.render(template, {
title: '这是动态标题',
content: '这是动态内容,通过 EJS 模板引擎填充的内容。'
});
// 邮件选项
const mailOptions = {
from: 'your-email@gmail.com', // 发送者地址
to: 'recipient-email@example.com', // 接收者地址
subject: 'HTML 邮件示例', // 邮件主题
html: htmlContent // 邮件内容,使用渲染后的 HTML
};
// 发送邮件
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log('邮件发送失败: ' + error);
}
console.log('邮件发送成功: ' + info.response);
});
运行脚本
确保你已经配置好了正确的 SMTP 设置和 EJS 模板文件。然后运行脚本:
node sendEmail.js
解释
- 安装依赖:我们安装了
nodemailer和ejs。 - 创建模板:在
templates/email.ejs文件中,我们定义了一个简单的 HTML 模板,其中包含动态内容占位符<%= title %>和<%= content %>。 - 读取并渲染模板:我们在
sendEmail.js中读取 EJS 模板文件,并使用 EJS 的render方法将变量title和content填充到模板中。 - 配置 Nodemailer:设置 SMTP 客户端配置,这里以 Gmail 为例。
- 发送邮件:使用
transporter.sendMail方法发送邮件,邮件内容为渲染后的 HTML。
通过上述步骤,你可以在 Node.js 中发送带有动态内容的 HTML 邮件。如果你有其他需求或需要更多的配置选项,可以参考 Nodemailer 文档 和 EJS 文档。