email - SES.sendRawEmail 仅使用 Gmail 中的第一个附件(Nodejs)
问题描述
我正在尝试使用 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, function (err, 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 在第一个附件之后删除后续附件的预期行为吗?我只是做错了吗?
谢谢!
解决方案
推荐阅读
- javascript - window.open 在函数开始时有效,但在结束时无效
- react-select - React-select:虚拟化选项列表
- html - CSS 网格自动填充和全宽单元格 - 空列
- php - 为什么 Wordpress Redux 框架中的 AddField 方法不起作用?
- java - 如何使用 android 应用程序代码加密在 php 中创建的托管 URL (API)
- nuxt.js - Nuxtjs Auth 模块在中间件中不起作用
- php - Wordpress:自定义搜索结果页面抛出 404
- c - C 编程 - 通过迭代方法反转链接链接
- snowflake-cloud-data-platform - 雪花警报长时间运行的查询
- python-3.x - 检索字符串正则表达式模式匹配