繁体   English   中英

发送 html 内页 email nodemailer node.js

[英]sending html page inside email nodemailer node.js

我想使用 node.js nodemailer 在 email 中发送付款表格。

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

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 文件显示在我的 email 中。有什么办法吗?

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

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

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 的回答做了一些修改,以允许我将修改后的链接传递到 email。

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

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

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

这是我的 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
      });
    }
  });
}

结果是email中的#replaceWithLink#被替换为myOtherLinkTest

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM