使用 ejs + emailjs 时,base64 图像不显示在 Outlook 中

Gra*_*yda 0 email outlook ejs node.js

当各种事件发生时,我混合使用ejsemailjs在我的 Node.js 应用程序中发送电子邮件。我想在发送电子邮件时将 Base64 图像(一个小徽标)嵌入到电子邮件中,但 Outlook 和 Gmail(加上 Google 的 Inbox)都无法呈现该图像。

我使用这段代码来查找图像的 mime 类型并将 base64 字符串组合在一起:

MyApp.prototype.ImageToBase64 = function(image) {
  var mime = require("mime")
  file = fs.readFileSync(__dirname + "/images/" + image, { encoding: 'base64'})
  return 'data:' + mime.lookup(image) + ';base64,' + file;
}
Run Code Online (Sandbox Code Playgroud)

这非常有用,因为我可以将生成的字符串复制并粘贴到浏览器中并查看图像。但是当我通过 emailjs 发送电子邮件时,Outlook 将+s 转换为+. 当我在 Gmail 中“查看原始内容”时,base64 被分成“块”。每个块都位于换行符上,并且每行以 结尾=。如果我采用 Gmail 的版本并删除=换行符,然后将其粘贴到我的浏览器中,则整个图片可以完美加载,但它只是拒绝加载其他任何地方,无论用户是否在我的联系人列表中。

这是我用来发送电子邮件的代码:

// Host, username, password and SSL (false) all set above here
server.send({
    text: myTemplate,
    from: "me@example.com",
    to: "someone@example.com",
    subject: "Testing",
    attachment: [
     {data:myTemplate, alternative:true}
    ]
  })
Run Code Online (Sandbox Code Playgroud)

模板看起来像这样(被截断,因为其他位并不重要):

  <body>
    <p><img src="<%- ImageToBase64("logo.png") %>"></p>
    <h1><%= Name %> has been triggered</h1>
    <p><%= Name %> has been triggered. It was triggered on <%= TheDate %></p>
Run Code Online (Sandbox Code Playgroud)

有什么提示吗?

编辑:我尝试在“附件”属性中设置标题,但没有运气

Dmi*_*nko 5

Outlook 使用 Word 渲染图像,Word 不支持嵌入(src="data:image") 图像。

(<img src="cid:xyz">)您需要将图像作为文件附加,并将 Content-ID MIME 标头设置为与HTML 正文中图像的 cid 属性相匹配的值。