Nodemailer将base64数据URI作为附件发送。怎么样?

时间:2014-06-11 14:23:09

标签: node.js nodemailer

基本上我有一个使用Canvas创建的图像,它在base64编码的数据URI中。然后将此数据URI附加到电子邮件中。

...,
 attachments:[{
 fileName: "cat.jpg",
 contents: new Buffer(cat, 'base64')
}],

收到电子邮件但附件无法查看。在linux中运行$ file cat.jpg返回:

cat.jpg: ASCII text, with very long lines, with no line terminators

为什么这个ASCII?我已经提到过base64了。我该如何解决这个问题? 谢谢。

4 个答案:

答案 0 :(得分:3)

变量cat可能包含'数据: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.

您甚至可以找回有效的缓冲区。缓冲区是一个损坏的图像(或者说,它不是以图像标题开头)。

您必须自己剥离数据URI的第一部分:

var buffer = new Buffer(pixel.split("base64,")[1], "base64");

答案 1 :(得分:2)

不需要缓冲区。您可以将字符串从base64编码前缀后面开始放入其中:

var cat = "...base64 encoded image...";
var mailOptions = {
  ...
  attachments: [
    {   // encoded string as an attachment
      filename: 'cat.jpg',
      content: cat.split("base64,")[1],
      encoding: 'base64'
    }
  ]
};

您可以在此处找到更多详细信息:https://github.com/nodemailer/nodemailer#attachments

答案 2 :(得分:2)

您只需使用包nodemailer-base64-to-s3

安装包:

npm install -s nodemailer-base64-to-s3

使用nodemailer配置它:

var base64ToS3 = require('nodemailer-base64-to-s3');
var nodemailer = require('nodemailer');

var transport = nodemailer.createTransport({});
transport.use('compile', base64ToS3(opts));

https://github.com/ladjs/nodemailer-base64-to-s3

答案 3 :(得分:2)

您可以直接使用dataStream1.union(dataStream2),而无需任何其他操作:

path

在此链接到相关的documentation