问题
Basically I have an image created using Canvas and it's in base64 encoded data URI. This data URI is then attached to email.
...,
attachments:[{
filename: "cat.jpg",
contents: new Buffer(cat, 'base64')
}],
The email is received but the attachment is not viewable. Running $ file cat.jpg
in linux returns:
cat.jpg: ASCII text, with very long lines, with no line terminators
Why is this ASCII? I had already mentioned base64. How may I fix this problem? Thank you.
回答1:
The variable cat
probably includes the 'data:image/jpeg;base64,' part. You shouldn't pass that bit to the Buffer
constructor.
It seems that if you pass in invalid data, new Buffer()
doesn't complain:
var pixel = "data:image/gif;base64,"
+ "R0lGODlhAQABAIABAP///wAAACH5"
+ "BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
var buffer = new Buffer(pixel, "base64"); // does not throw an error.
You even get back a valid Buffer. The buffer is a corrupt image (or rather, it doesn't begin with an image header).
You have to strip the first part of the data URI yourself:
var buffer = new Buffer(pixel.split("base64,")[1], "base64");
回答2:
A buffer is not needed. You can just put the string starting from behind the base64 encoding prefix into it:
var cat = "...base64 encoded image...";
var mailOptions = {
...
attachments: [
{ // encoded string as an attachment
filename: 'cat.jpg',
content: cat.split("base64,")[1],
encoding: 'base64'
}
]
};
More Details you find here: https://github.com/nodemailer/nodemailer#attachments
回答3:
You can simply use the package nodemailer-base64-to-s3
.
Install the package:
npm install -s nodemailer-base64-to-s3
Configure it with 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
回答4:
You can just use path
for that without any additional manipulations:
let attachments = [
{
filename: "image.gif",
path: "data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="
}
]
Here the link to the related documentation
来源:https://stackoverflow.com/questions/24165410/nodemailer-send-base64-data-uri-as-attachment-how