Below is the code from https://github.com/andrewpuch/aws-ses-node-js-examples where there is an example to send and email with attachment,
I have modified the code to fetch a image file from aws s3 and and send it with mail as attachment, when i did it for an text file it work perfectly, but when I have sent an image, in the mail I was not able to see the image since it is corrupted.
when I tried opening with apple photo app it has shown that meta data is missing, also I have added Content-Transfer-Encoding: base64 in the header of the mail, when I tried with utf8, utf-8 and UTF-8 in Content-Transfer-Encodingin the header I got the below response from aws
{ "message": "Unknown encoding: utf8", "code": "InvalidParameterValue", "time": "2017-03-14T08:42:43.571Z", "requestId": "2e220c33-0892-11e7-8a5a-1114bbc28c3e", "statusCode": 400, "retryable": false, "retryDelay": 29.798455792479217 }
My modified code to send an image attachment with mail, I even tried encoding the buffer to utf-8, base-64,wasted enough time on this, no clue why it is corrupted, if some one have done this before, help me
// Require objects. var express = require('express'); var app = express(); var aws = require('aws-sdk'); // Edit this with YOUR email address. var email = "*******@gmail.com"; // Load your AWS credentials and try to instantiate the object. aws.config.loadFromPath(__dirname + '/config.json'); // Instantiate SES. var ses = new aws.SES(); var s3 = new aws.S3(); // Verify email addresses. app.get('/verify', function (req, res) { var params = { EmailAddress: email }; ses.verifyEmailAddress(params, function (err, data) { if (err) { res.send(err); } else { res.send(data); } }); }); // Listing the verified email addresses. app.get('/list', function (req, res) { ses.listVerifiedEmailAddresses(function (err, data) { if (err) { res.send(err); } else { res.send(data); } }); }); // Deleting verified email addresses. app.get('/delete', function (req, res) { var params = { EmailAddress: email }; ses.deleteVerifiedEmailAddress(params, function (err, data) { if (err) { res.send(err); } else { res.send(data); } }); }); // Sending RAW email including an attachment. app.get('/send', function (req, res) { var params = { Bucket: 's3mailattachments', Key: 'aadhar.jpg' }; var attachmentData; s3.getObject(params, function (err, data) { if (err) console.log(err, err.stack); // an error occurred else { console.log(data.ContentLength); console.log(data.ContentType); console.log(data.Body); var ses_mail = "From: 'AWS Tutorial Series' <" + email + ">\n"; ses_mail = ses_mail + "To: " + email + "\n"; ses_mail = ses_mail + "Subject: AWS SES Attachment Example\n"; ses_mail = ses_mail + "MIME-Version: 1.0\n"; ses_mail = ses_mail + "Content-Type: multipart/mixed; boundary=\"NextPart\"\n\n"; ses_mail = ses_mail + "--NextPart\n"; ses_mail = ses_mail + "Content-Type: text/html; charset=us-ascii\n\n"; ses_mail = ses_mail + "This is the body of the email.\n\n"; ses_mail = ses_mail + "--NextPart\n"; ses_mail = ses_mail + "Content-Type: image/jpeg; \n"; ses_mail = ses_mail + "Content-Disposition: attachment; filename=\"aadhar.jpg\"\n"; ses_mail = ses_mail + "Content-Transfer-Encoding: base64\n\n" ses_mail = ses_mail + data.Body; ses_mail = ses_mail + "--NextPart"; var params = { RawMessage: { Data: new Buffer(ses_mail) }, Destinations: [email], Source: "'AWS Tutorial Series' <" + email + ">'" }; ses.sendRawEmail(params, function (err, data) { if (err) { res.send(err); } else { res.send(data); } }); } }); }); // Start server. var server = app.listen(3003, function () { var host = server.address().address; var port = server.address().port; console.log('AWS SES example app listening at http://%s:%s', host, port); });