我正在尝试使用AWS SES和nodejs发送带有多个附件的电子邮件。
我的js脚本这样调用ses.sendRawEmail:
const params = {
RawMessage: {
Data: rawMailBody
},Destinations: [],Source: 'testemail@gmail.com'
};
ses.sendRawEmail(params,function (err,data) {
if (err) console.log("Error: " + err);
else {
// console.log("Success call: ",JSON.stringify(data));
console.log("Success.");
return data
}
});
这是我创建“ rawMailBody”对象的方式:
const BUCKET = 'my-bucket';
var rawMailBody = "From: testemail@gmail.com\n";
rawMailBody = rawMailBody + "To: testemail@gmail.com\n";
rawMailBody = rawMailBody + "Subject: Test Subject\n";
rawMailBody = rawMailBody + ``
rawMailBody = rawMailBody + "MIME-Version: 1.0\n";
rawMailBody = rawMailBody + "Content-Type: multipart/mixed; boundary=\"NextPart\"\n\n";
rawMailBody = rawMailBody + "--NextPart\n";
rawMailBody = rawMailBody + "Content-Type: text/html; charset=iso-8859-1\n";
rawMailBody = rawMailBody + "\n";
rawMailBody = rawMailBody + htmlData;
rawMailBody = rawMailBody + "--NextPart\n";
console.log('attaching attachments')
const attachmentFilename = 'Evaluates2-Old-Logo.pdf';
const attachmentFilename2 = '2019-W-4.pdf';
console.log('adding attachment',attachmentFilename)
rawMailBody = rawMailBody + "Content-Type: application/octet-stream\n";
rawMailBody = rawMailBody + "Content-ID: random1565323918273545letters\n";
rawMailBody = rawMailBody + 'Content-Disposition: attachment; name="Evaluates2-Old-Logo.pdf"; filename="Evaluates2-Old-Logo.pdf";\n';
rawMailBody = rawMailBody + "Content-Transfer-Encoding: base64\n";
rawMailBody = rawMailBody + await getImgDataBuffer('Evaluates2-Old-Logo.pdf',BUCKET); + "\n\n";
rawMailBody = rawMailBody + "--NextPart\n";
console.log('adding attachment',attachmentFilename2)
rawMailBody = rawMailBody + "Content-Type: application/octet-stream\n";
rawMailBody = rawMailBody + "Content-ID: random1565323443423794letters\n";
rawMailBody = rawMailBody + "Content-Transfer-Encoding: base64\n";
rawMailBody = rawMailBody + 'Content-Disposition: attachment; name="2019-W-4.pdf"; filename="2019-W-4.pdf";\n';
// rawMailBody = rawMailBody + "Content-ID random3965323447923784letters\n";
rawMailBody = rawMailBody + await getImgDataBuffer('2019-W-4.pdf',BUCKET); + "\n\n";
rawMailBody = rawMailBody + "--NextPart\n";
rawMailBody = rawMailBody + "--NextPart--\n";
我正在像这样获取图像数据库base64缓冲区:
const getImgDataBuffer = (imageFilename,bucket) => {
return new Promise((resolve,reject) => {
var params = { Bucket: bucket,Key: imageFilename };
s3.getObject(params,data) {
if (err) {
console.log(err,err.stack); // an error occurred
reject(err)
}
else {
console.log(data.ContentLength);
console.log(data.ContentType);
console.log(data.Body);
console.log('got ',imageFilename)
resolve(data.Body.toString('base64'))
}
})
})
}
我在gmail中收到非常奇怪的行为-它仅需要发送的第一个pdf文件。第一个pdf完全通过,但第二个完全不通过。当我交换将附件添加到rawMailBody对象的顺序时,它仍然仅呈现第一个。
当我在gmail中选择“显示原始邮件”时,我可以看到第二个附件的整个MIME块完全丢失了...
这是gmail删除第一个附件之后的后续附件的预期行为吗?我只是做错了吗?
谢谢!