【问题标题】:AWS SES, email attachment sends base64 string instead converting into DOCX formatAWS SES,电子邮件附件发送 base64 字符串而不是转换为 DOCX 格式
【发布时间】:2019-01-19 01:54:56
【问题描述】:

要求

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

到目前为止我做了什么

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

错误

当我发送附件时,我必须在 formdata 中附加 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) 不要在boundary 中使用简单的字符串。 2) 两个换行符(去掉一个)"Content-Disposition: attachment; filename=\"form.docx\"\n\n";
  • @JohnHanley 哦,伙计,非常感谢。
  • 请将其作为答案发布
  • @JohnHanley 你能否也看看这个问题stackoverflow.com/questions/54635500/… ,它很相似,但我想不通。非常感谢任何帮助
  • 一个小的改进 - new Buffer(string) 现在已弃用,因此使用它的代码可以替换为 Buffer.from(string)

标签: amazon-web-services amazon-ses serverless-framework serverless aws-serverless


【解决方案1】:

问题是您的代码有两个换行符用于您的部分部分标题之一。

更改这行代码:

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

到这里:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2019-12-07
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    相关资源
    最近更新 更多