我有一个节点应用程序使用nodemailer成功发送电子邮件。我正在发送带有类似代码的电子邮件:
const emailRequest = {
from: { name: "Sender name", address: "sender@example.com" },
to: [/* recipients */],
subject: "Email subject",
text: "Some email text",
html: '<p>Some email text</p><p><img src="data:image/png;base64,{base64_image_content}">',
} as SendMailOptions;
const ses = new SES();
const transporter = nodemailer.createTransport({
SES: ses,
sendingRate: MAX_SEND_RATE,
});
transporter.sendMail(emailRequest, sendMailResponseHandler);
问题是有时电子邮件正文包含格式如下的内联图像,包含图像{base64_image_content}
的实际数据在哪里:
<img src="data:image/png;base64,{base64_image_content}">
而且Gmail 不支持内嵌图片数据。当我在 Gmail 中选择“显示原件”时,电子邮件发送并显示图像数据,但图像未出现在 Gmail 网络客户端中,并且在 Gmail 移动客户端中显示为损坏的图像。
我无法控制内联图像,所以我希望找到一种方法来提取内联图像数据并将其作为附件添加到电子邮件中,并使用 cid 来引用电子邮件正文中的那些附件我打电话transporter.sendMail
。
我想从这里更改 HTML:
<p>Some email text</p><p><img src="data:image/png;base64,{base64_image_content}">
对此:
<p>Some email text</p><p><img src="cid:myImageCid">
并将图像添加为附件:
const emailRequest = {
// other things
attachments: [{ cid: "myImageCid", content: base64_image_content }]
} as SendMailOptions;
我需要帮助的部分是从原始电子邮件 HTML 中提取图像数据并将其替换为 cid 参考。有没有办法我可以做到这一点?