title: upload .jpg image attachment in mail using AWS SES from node.js
body: <p>Below is the code from <a href="http://github(How%20to%20use%20aws%20ses)" rel="nofollow noreferrer">https://github.com/andrewpuch/aws-ses-node-js-examples</a>   where there is an example to send and email with attachment,</p>
  
  <p>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.</p>
  
  <p>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 <strong>Content-Transfer-Encoding</strong>in the header I got the below response from aws</p>
  
  <pre><code>{
    "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
  }
  </code></pre>
  
  <p>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</p>
  
  <pre><code>// 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' &lt;" + email + "&gt;\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' &lt;" + email + "&gt;'"
              };
  
              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);
  });
  </code></pre>