AWS SES,电子邮件附件发送 base64 字符串而不是转换为 DOCX 格式

AWS SES, email attachment sends base64 string instead converting into DOCX format

要求

我想做的是,首先我将从 S3 Bucket 下载一个文档,然后通过 SES 发送该文档,sendRawEmail 方法作为从 S3 下载的文件的附件。

到目前为止我做了什么

我已经从S3下载了文件,我可以发送带附件的邮件。如期到达目的地(form.docx)

错误

发送附件时,我必须在表单数据中附加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)
    }
  }
}

非常感谢任何帮助或建议

提前致谢

问题是您的代码中的一个部分 headers 有两个换行符。

更改这行代码:

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

对此:

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