Иль*_*нин 4 node.js nodemailer
基本上,我有一个使用Canvas创建的图像,它使用base64编码的数据URI。然后将此数据URI附加到电子邮件。
...,
attachments:[{
fileName: "cat.jpg",
contents: new Buffer(cat, 'base64')
}],
Run Code Online (Sandbox Code Playgroud)
电子邮件已收到,但附件不可见。$ file cat.jpg在linux中运行会返回:
cat.jpg: ASCII text, with very long lines, with no line terminators
Run Code Online (Sandbox Code Playgroud)
为什么使用ASCII?我已经提到过base64。我该如何解决这个问题?谢谢。
小智 11
不需要缓冲区。您可以将字符串从 base64 编码前缀后面开始放入其中:
var cat = "...base64 encoded image...";
var mailOptions = {
...
attachments: [
{ // encoded string as an attachment
filename: 'cat.jpg',
content: cat.split("base64,")[1],
encoding: 'base64'
}
]
};
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到更多详细信息:https : //github.com/nodemailer/nodemailer#attachments
该变量cat可能包含“ data:image / jpeg; base64”部分。您不应该将该位传递给Buffer构造函数。
看来,如果您传递无效数据,new Buffer()就不会抱怨:
var pixel = "data:image/gif;base64,"
+ "R0lGODlhAQABAIABAP///wAAACH5"
+ "BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
var buffer = new Buffer(pixel, "base64"); // does not throw an error.
Run Code Online (Sandbox Code Playgroud)
您甚至可以获取有效的缓冲区。缓冲区是损坏的图像(或者,它不是以图像头开始的)。
您必须自己剥离数据URI的第一部分:
var buffer = new Buffer(pixel.split("base64,")[1], "base64");
Run Code Online (Sandbox Code Playgroud)