【发布时间】: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