如何使用nodemailer发送html文件

时间:2019-03-26 12:57:44

标签: node.js express nodemailer

我正在使用nodemailer发送电子邮件,但我想知道如何从目录发送静态HTML文件。

  let transporter = nodemailer.createTransport({
      host: auth.host,
      port: auth.port,
      secure: auth.secure,
      auth: {
          type: auth.type,
          user: auth.user,
          clientId: auth.clientId,
          clientSecret: auth.clientSecret,
          refreshToken: auth.refreshToken,
          accessToken: auth.accessToken,
          expires: auth.expires
      }
  });

  let mailOptions = {
    from: '"xxxxx',
    to: 'xxxx',
    subject: "xxxx",
    text: `xxxx`,
    html: email.html
  };

2 个答案:

答案 0 :(得分:2)

您可以使用 fs 读取模板文件,并使用 handlebars 替换模板中的值。

这里有一个例子:

const nodemailer = require('nodemailer');
const smtpTransport = require('nodemailer-smtp-transport');
const handlebars = require('handlebars');
const { promisify } = require('util');
const fs = require('fs');

const readFile = promisify(fs.readFile);

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

const sendMail = async () => {
    let html = await readFile('/path/to/file', 'utf8');
    let template = handlebars.compile(html);
    let data = {
        username: "Toto"
    };
    let htmlToSend = template(data);
    let mailOptions = {
        from: 'from@toto.com',
        to : 'to@toto.com',
        subject : 'test',
        html : htmlToSend
    };
    smtpTransport.sendMail(mailOptions, (error, info) => {
        if (error) console.log(error);
    });
});

答案 1 :(得分:0)

您将必须使用fs模块读取文件。

const fs = require('fs');

const { promisify } = require('util');

const readFile = promisify(fs.readFile);

async function sendMail() {
    let transporter = nodemailer.createTransport({
      host: auth.host,
      port: auth.port,
      secure: auth.secure,
      auth: {
          type: auth.type,
          user: auth.user,
          clientId: auth.clientId,
          clientSecret: auth.clientSecret,
          refreshToken: auth.refreshToken,
          accessToken: auth.accessToken,
          expires: auth.expires
      }
  });

  let mailOptions = {
    from: '"xxxxx',
    to: 'xxxx',
    subject: "xxxx",
    text: `xxxx`,
    html: await readFile('/path/to/file', 'utf8')
  };

  // send mail
}

如果文件不会更改,则可以缓存内容。