我使用ejs和emailjs混合在各种事件发生时在我的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;
}
这很有效,因为我能够将生成的字符串复制并粘贴到我的浏览器中并查看图像。但是,当我通过emailjs发送电子邮件时,Outlook会将+
转换为+
。当我"查看原文"在Gmail中,base64被拆分为' chunk'。每个块都在换行符上,每行以=
结束。如果我使用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}
]
})
模板看起来像这样(截断,因为其他位不重要):
<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>
任何提示?
编辑:我尝试在&#34;附件中设置标题&#34;财产,但没有运气
答案 0 :(得分:2)
Outlook使用Word呈现图像,而Word不支持嵌入的(src="data:image"
)图像。
您需要将图像作为文件附加,并将Content-ID MIME标头设置为与HTML正文中图像(<img src="cid:xyz">)
上的cid属性匹配的值。
答案 1 :(得分:1)
好吧,即使this answer来自2013年,似乎智慧仍然适用,因为base64图片支持在电子邮件客户端中很糟糕。
基本上,唯一仍然支持内联图片的邮件客户端可能是旧版(例如Office 2007)或Apple / Android的默认邮件应用程序。
虽然这有点令人失望,但它不是世界末日,因为电子邮件只会被与我的应用在同一网络上的人看到,所以我可以指向托管的图片在应用程序的Web部分。
但对于其他尝试此操作的人,请将您的图片托管在像Imgur这样的图像共享网站上或您自己的服务器上,然后使用常规版本。 <image>
标记以显示它。
对于自包含的电子邮件来说,对吧?