在电子邮件 nodemailer node.js 中发送 html 页面

sending html page inside email nodemailer node.js

我想使用 node.js nodemailer 在电子邮件中发送付款表格。

我的电子邮件已成功发送,但是当我添加我创建的 html 文件时,电子邮件出现错误。

const fs = require("fs");
const { promisify } = require("util");
const readFile = promisify(fs.readFile);

let transporter = nodemailer.createTransport({
  service: "gmail",
  auth: {
    user: "mymail",
    pass: "mypass",
  },
});

let mailOptions = {
          from: "testeamil@gmail.com",
          to: invoice.customeremail,
          subject: "Payment forServices",
          text: "Please pay to Recieve the order ",
          html: readFile("C://Users//admin//task//payment.html", "utf8"),
        };

        transporter.sendMail(mailOptions, function (err, data) {
          if (err) {
            console.log("error", err);
          } else {
            console.log("email sent!");
          }
        });

我希望 html 文件显示在我的电子邮件中...有什么办法吗?

根据我的说法,使用节点邮件程序发送 html 标记的正确方法可以通过将 mailOptionstransporter.sendMail() 函数包装到 fs.readFile() 中来实现,如下所示:

首先,我们将使用 fs 正确读取 html 文件,当我们在 html 变量的回调函数中获得该文件时,我们可以将其与电子邮件一起发送。

var nodemailer = require('nodemailer');
var fs = require('fs');

var transporter = nodemailer.createTransport({
 service: 'gmail',
 auth: {
   user: 'youremail@gmail.com',
   pass: 'yourpassword'
 }
});

fs.readFile('Path here', {encoding: 'utf-8'}, function (err, html) {
 if (err) {
   console.log(err);
 } else {
   let mailOptions = {
     from: 'youremail@gmail.com',
     to: 'myfriend@gmail.com',
     subject: 'Sending Html in node mailer',
     html: html
   };

   transporter.sendMail(mailOptions, function(error, info) {
    if (error) {
     console.log(error);
    } else {
     console.log('Email has been sent: ' + info.response);
    }
  });
 }
});

我对 Mohammad Basit 的 回答进行了一些修改,以允许我将修改后的 link 传递到电子邮件中。

在我的 html 文件的一行中,我创建了一个 link,如下所示:

<a href="mySite.herokuapp.com/resetPassword/#replaceWithLink#">Reset Password</a>

然后我使用 JavaScript 的 String replace() 方法在文件加载 fs.readFile 后用我想要的任何内容替换 #replaceWithLink# 文本 fs.readFile.

这是我的 app.js 节点文件中的一个片段:

//Sends password reset email
const sendPassResetEmail = function(emailAddress){
  //email host information
  const transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 465,
    secure: true,
    auth:{
      user: process.env.gmailUsr,
      pass: process.env.gmailPass
    }
  });

  fs.readFile('./emails/passwordReset.html', {encoding: 'utf-8'}, (err, data)=>{
    let htmlFile = data;
    htmlFile = htmlFile.replace("#replaceWithLink#", "myOtherLinkTest")

    if(err){
      console.warn("Error getting password reset template: " + err);
    }else{
      transporter.sendMail({
        from:'"TedCounter :)"<EMAIL-ADDRESS-HERE>',
        to: emailAddress,
        subject:"Ted Counter",
        html: htmlFile
      });
    }
  });
}

结果是 #replaceWithLink# 在电子邮件中被替换为 myOtherLinkTest