NodeJs发送动态内容html邮件的简单实现

253 阅读2分钟

在 Node.js 中发送带有动态内容的 HTML 邮件可以通过使用 Nodemailer 和模板引擎(例如 EJS)来实现。以下是一个完整的示例,展示如何使用 EJS 模板引擎来填充变量,并通过 Nodemailer 发送邮件。

步骤

  1. 安装依赖

首先,确保你已经安装了 Nodemailer 和 EJS:

npm install nodemailer ejs
  1. 创建 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>
  1. 创建 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

解释

  1. 安装依赖:我们安装了 nodemailerejs
  2. 创建模板:在 templates/email.ejs 文件中,我们定义了一个简单的 HTML 模板,其中包含动态内容占位符 <%= title %><%= content %>
  3. 读取并渲染模板:我们在 sendEmail.js 中读取 EJS 模板文件,并使用 EJS 的 render 方法将变量 titlecontent 填充到模板中。
  4. 配置 Nodemailer:设置 SMTP 客户端配置,这里以 Gmail 为例。
  5. 发送邮件:使用 transporter.sendMail 方法发送邮件,邮件内容为渲染后的 HTML。

通过上述步骤,你可以在 Node.js 中发送带有动态内容的 HTML 邮件。如果你有其他需求或需要更多的配置选项,可以参考 Nodemailer 文档EJS 文档