我正在关注 这篇有用的文章 使用 AWS SES(原始电子邮件)发送附件。
它正在工作!只有一个问题...电子邮件同时提供 html 和纯文本。纯文本显示在 html 的正下方。
如果我不包括纯文本,它会进入 gmail 垃圾邮件。
关于如何防止纯文本显示在 html 下方的任何建议?
var mimemessage = require('mimemessage');
const sendAWSEmailWithAttachment = (emailDetails) => {
AWS.config.update({
accessKeyId: process.env.AWS_ACCESS_KEY,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
region: process.env.AWS_REGION
})
const ses = new AWS.SES({ apiVersion: "2010-12-01" });
var mailContent = mimemessage.factory({contentType: 'multipart/mixed',body: []});
mailContent.header('From', 'Ticketglen <[email protected]>');
mailContent.header('To', emailDetails.emailAddress);
mailContent.header('Subject', emailDetails.subject);
var alternateEntity = mimemessage.factory({
contentType: 'multipart/alternate',
body: []
});
var htmlEntity = mimemessage.factory({
contentType: 'text/html;charset=utf-8',
body: emailDetails.content
});
var plainEntity = mimemessage.factory({
body: emailDetails.plainText
});
alternateEntity.body.push(htmlEntity);
alternateEntity.body.push(plainEntity);
mailContent.body.push(alternateEntity);
var data = fs.readFileSync(emailDetails.pathToAttachment);
var attachmentEntity = mimemessage.factory({
contentType: 'text/plain',
contentTransferEncoding: 'base64',
body: data.toString('base64').replace(/([^\0]{76})/g, "$1\n")
});
attachmentEntity.header('Content-Disposition', `attachment ;filename=${emailDetails.fileName}`);
mailContent.body.push(attachmentEntity);
ses.sendRawEmail({
RawMessage: { Data: mailContent.toString() }
}, (err, sesdata, res) => {
console.log('err', err)
console.log('sesdata', sesdata)
console.log('res', res)
});
}
你只需要评论这句话:
// alternateEntity.body.push(plainEntity);
我用你的代码测试过。我每次都将正确的电子邮件发送到我的 gmail 收件箱,一次是在 html 文本后发送纯文本,一次是仅发送 html 文本。
您注意到gmail将其发送到垃圾邮件的原因可能更多地与接收方的Gmail设置有关。这可能是收件人定义的规则或他们过去将某些电子邮件标记为不重要或垃圾邮件的行为导致 Gmail 将此电子邮件也识别为垃圾邮件。您的电子邮件的内容(HTML 和 Plan TexT)被用户特定设置过滤并被发送到垃圾邮件。但这对您所有的电子邮件收件人来说可能并不相同。
尝试将“多部分/替代”更改为“多部分/替代”