我想用html模板和nodemailer一起发送邮箱.在这个模板中,我需要动态地注入一些变量,但我真的做不到.我的代码:

var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');

smtpTransport = nodemailer.createTransport(smtpTransport({
    host: mailConfig.host,
    secure: mailConfig.secure,
    port: mailConfig.port,
    auth: {
        user: mailConfig.auth.user,
        pass: mailConfig.auth.pass
    }
}));
var mailOptions = {
    from: 'my@email.com',
    to : 'some@email.com',
    subject : 'test subject',
    html : { path: 'app/public/pages/emailWithPDF.html' }
};
smtpTransport.sendMail(mailOptions, function (error, response) {
    if (error) {
        console.log(error);
        callback(error);
    }
});

比如说我想用PDF发送邮箱.类似这样的html:

Hello {{username}}!

我发现了一些例子,smth在哪里是这样的:

...
html: '<p>Hello {{username}}</p>'
...

但我希望它在单独的html文件中.可能吗?

推荐答案

您可以使用 node 中的fs模块读取HTML文件,然后使用handlebars替换HTML字符串中需要更改的元素

var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');
var handlebars = require('handlebars');
var fs = require('fs');

var readHTMLFile = function(path, callback) {
    fs.readFile(path, {encoding: 'utf-8'}, function (err, html) {
        if (err) {
           callback(err); 
           throw err;
            
        }
        else {
            callback(null, html);
        }
    });
};

smtpTransport = nodemailer.createTransport(smtpTransport({
    host: mailConfig.host,
    secure: mailConfig.secure,
    port: mailConfig.port,
    auth: {
        user: mailConfig.auth.user,
        pass: mailConfig.auth.pass
    }
}));

readHTMLFile(__dirname + 'app/public/pages/emailWithPDF.html', function(err, html) {
    var template = handlebars.compile(html);
    var replacements = {
         username: "John Doe"
    };
    var htmlToSend = template(replacements);
    var mailOptions = {
        from: 'my@email.com',
        to : 'some@email.com',
        subject : 'test subject',
        html : htmlToSend
     };
    smtpTransport.sendMail(mailOptions, function (error, response) {
        if (error) {
            console.log(error);
            callback(error);
        }
    });
});

Node.js相关问答推荐

使用Vite和ReactJS时,在哪里设置NODE_OPTIONS?

NX无法使用缓存运行根级脚本

为什么我的表单数据在我的POST请求中作为应用程序/json发送,为什么它返回错误请求错误?

使用xml-crypto时出现NodeJS XPath解析错误

Node.js分页返回空数组

密码加密的最佳实践是什么?

express app.post的多个参数在Node.js中的定义是什么

yarn 安装失败,因为 node-gyp 正在寻找过时的 node 版本标头

使用 Nodejs 获取 Firebase 云消息传递历史记录

加速 sequelize ORM 中的查询

在系统启动时启动本地 node 服务器

try 运行迁移时的 Typeorm:缺少必需的参数:dataSource

在 Express-js 中使用路由

我应该在(Docker)容器中使用 forever/pm2 吗?

node/express:使用 Forever 连续运行脚本时设置 NODE_ENV

使用 MongoDB 更新嵌套数组

如何运行用 TypeScript 编写的 Mocha 测试?

如何在 node 中找到引用站点 URL?

- configuration.output.path:提供的值public不是绝对路径!使用 Webpack

yarn 和 npm 的主要区别是什么?