AWS SES, вложение электронной почты отправляет строку base64 вместо преобразования в формат DOCX - PullRequest
0 голосов
/ 17 января 2019

Требование

Я пытаюсь сделать следующее: сначала я скачаю документ из S3 Bucket, затем отправлю этот документ через SES, метод sendRawEmail в виде вложения с файлом, загруженным из S3.

Что я делал до сих пор

Я скачал файл с S3, могу отправить письмо с вложением. Он достигает пункта назначения, как и ожидалось (form.docx)

Error

Когда я отправляю вложение, я должен добавить строку base64 (которая является вложением) в форму данных. Я прилагаю строку. Но когда я скачаю вложение. Там я вижу, что внутри form.docx есть конвертированная строка base64 внутри вложения. Это не так, как ожидалось. Я должен видеть столы и некоторые заполнять пробелы. Но здесь это очень большая строка base64

код

const AWS = require('aws-sdk');
const S3= new AWS.S3();
let ses = new AWS.SES();
exports.hello = async (event, context) => {
  try {
    const valueFromBucket = await S3.getObject({Bucket: '*******', Key: 'form.docx'}).promise();
    var buffer = valueFromBucket.Body.toString('base64');
    var message = '<html><body ><div> This is a test Message</div></body></html>';
    var fromEmail = '******@gmail.com';
    var toEmail = '*******@gmail.com';
    var ses_mail = "From: 'Email' <" + fromEmail + ">\n";
    ses_mail = ses_mail + "To: " + toEmail + "\n";
    ses_mail = ses_mail + "Subject: Subject Email\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=iso-8859-1\n\n";
    ses_mail = ses_mail + message+"\n";
    ses_mail = ses_mail + "--NextPart\n";
    ses_mail = ses_mail + "Content-Type: application/msword\n";
    ses_mail = ses_mail + "Content-Disposition: attachment; filename=\"form.docx\"\n\n";
    ses_mail = ses_mail + "Content-Transfer-Encoding: base64\n\n"
    ses_mail = ses_mail + buffer + "\n";
    ses_mail = ses_mail + "--NextPart--";

    var params = {
        RawMessage: { Data: new Buffer(ses_mail)},
        Destinations: [ "*******@gmail.com" ],
        Source: "'AWS Tutorial Series' <" + fromEmail + ">'"
    };
    const sendPromise = await new AWS.SES({ apiVersion: "2010-12-01" })
    .sendRawEmail(params)
    .promise();
    return{
      statusCode: 200,
      body: JSON.stringify(sendPromise)
    }
  }
  catch (err) {
    return {
      statusCode: err.statusCode || 400,
      body: err.message || JSON.stringify(err.message)
    }
  }
}

Любая помощь или предложения высоко ценится

Заранее спасибо

1 Ответ

0 голосов
/ 18 января 2019

Проблема в том, что в вашем коде есть две строки для одного из заголовков разделов.

Изменить эту строку кода:

ses_mail = ses_mail + "Content-Type: multipart/mixed; boundary=\"NextPart\"\n\n";

к этому:

ses_mail = ses_mail + "Content-Type: multipart/mixed; boundary=\"NextPart\"\n";
...