如何在我的电子邮件,nodemailer和把手中添加图像?

时间:2019-05-01 14:59:54

标签: javascript node.js express handlebars.js nodemailer

我在节点项目中使用nodemailer和把手。电子邮件工作正常,但是我无法将图像附加在车把创建的html模板中。我尝试直接在html中的img src标签中给它,但仍然无法正常工作。我所拥有的是图像是svg格式,并且在项目的我的资产文件夹中。

我还在官方的nodemailer网站上尝试了该示例,但效果不佳。请帮帮我!

https://nodemailer.com/message/embedded-images/

这是我的功能,当我从客户端收到请求时将调用该功能。

sendEmail.js

var nodemailer = require("nodemailer");
const emailConfig = require("../readEmailConfigFile");

//reading username and password from json file
let fromemail = emailConfig.readFromEmail();
let password = emailConfig.readFromPassword();
var handlebars = require("handlebars");
var fs = require("fs");

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

/* Method for sending Email */
const sendEmail = (details) => {
  var transporter = nodemailer.createTransport({
    service: "gmail",
    auth: {
      user: fromemail,
      pass: password
    }
  });

  readHTMLFile(
    __dirname + "/../emailTemplates/EmailTemplate.html",
    function(err, html) {
      var template = handlebars.compile(html);

      var replacements = {
        firstName: details.firstName,
        lastName: details.lastName,
        address: details.address,
      };

      var htmlToSend = template(replacements);
      var mailOptions = {
        from: fromemail,
        to: details.email,
        subject: "ABC",
        html: htmlToSend
      };
      transporter.sendMail(mailOptions, function(error, info) {
        if (error) {
          console.log(error);
          callback(error);
        } else {
          console.log("Email Sent : " + info.response);
        }
      });
    }
  );
};

这是我的html模板文件

EmailTemplate.html

<html>
  <head>
    <title> </title>
  </head>
  <body>
    <p>
      Dear {{{firstName}}} {{{lastName}}}, your address is {{{address}}}</span
      >
    </p>
  </body>
</html>

我想在此html中嵌入svg图像!

1 个答案:

答案 0 :(得分:0)

只需将附件参数添加到您的mailoptions对象中即可:

    var mailOptions = {
    from: fromemail,
    to: details.email,
    subject: "ABC",
    attachments: [{
        filename: 'imagename.svg',
          path: __dirname +'/assets/imagename.svg',
         cid: 'imagename'
  }],
    html: htmlToSend
  };

然后将img标签添加到HTML <img src="cid:imagename">