使用node.js中的sendgrid在电子邮件中发送嵌入式图像

时间:2018-07-12 05:36:18

标签: node.js image sendmail sendgrid

我想使用sendgrid从节点js发送带有嵌入式图像的电子邮件。我使用以下代码

var base64Img = require('base64-img');
const sgMail = require('@sendgrid/mail');
var base64str = base64_encode("logo.png");

function base64_encode(file) {
  var bitmap = fs.readFileSync(file);
  return new Buffer(bitmap).toString("base64");
}
sendMail(["example1@gmail.com"],base64str);
function sendMail(emails,data)
{
sendgrid.send({
      to: emails[0],
      from: 'example2@gmail.com',
      subject: 'Test Mail',
      attachments: [
       {
        filename: "logo.png",
        type : "image/png",
        content: data,
        content_id: "myimagecid",
        disposition : "inline"
       }
     ],
       html:"Please look on the image <img src='content_id:myimagecid'  alt='no image found'/>",

  }, function (err) {
    if (err) {
      response.json({ message: 'Selected but Mail not sended and Error is'+err });
      console.log("Mail error",err);

    } else {
      console.log("Success Mail sended ");
      response.json({ message: 'Selected and Mail sended' });
    }
  });

}

在这里,我使用了 disposition:“ inline” ,但图像仍作为附件发送。谁能帮我吗?

2 个答案:

答案 0 :(得分:0)

您正在将文件定义为附件,因此最终就是那样。 相反,您需要将其定义为文件,然后在html代码中调用它。

如果您通读了这篇文章...

https://sendgrid.com/blog/embedding-images-emails-facts/

...您会发现这实际上不是推荐的方法。相反,您可能希望将base64的图像直接嵌入到html中。

答案 1 :(得分:0)

如果您没有很多图片,则可以使用type

Inline Embedding