我正在尝试使用 AWS SES 以及适用于 Node.JS 的 AWS 开发工具包 v3 发送原始电子邮件。
但是,我发送的电子邮件出现在接收端,原始正文包含在 HTML 容器中,包括标头。因此,它们不是被解析为标头,而是只是作为正文的一部分而结束。
据我所知,我按照电子邮件 RFC 包含了所有必需的标头,我用空行分隔标头和正文等。但是,整个原始消息最终还是被解释为纯文本正文,而不是 MIME 原始消息。
const msg = `
From: "No-Reply" <[email protected]>
To: [email protected]
Date: Wed, 4 Sep 2024 19:02:29 +0000
Subject: Test
Content-Type: text/plain
MIME-Version: 1.0
Hello, world!
`;
const ses = new SES({region: 'eu-west-1'});
const result = await ses.sendRawEmail({
Destinations: ["[email protected]"],
RawMessage: {
Data: Buffer.from(msg)
},
Source: 'No-Reply <[email protected]>'
});
收到的这封电子邮件正文中包含整个
msg
字符串,并且没有主题、收件人或日期字段,因为标题未被识别为标题。
我错过了什么?
AWS SDK 接受
RawMessage.Data
形式的 UInt8Array
,因此传递 Buffer
应该可以。文档说内容不必进行 base64 编码,因为 SDK 会处理该内容(据说这就是您传递 Buffer 而不是字符串的原因)。我的观点是,我不认为字符串编码是问题所在?
好吧,似乎最初的换行符是这里的罪魁祸首,这意味着这解决了问题:
const msg = `From: "No-Reply" <[email protected]>
To: [email protected]
Date: Wed, 4 Sep 2024 19:02:29 +0000
Subject: Test
Content-Type: text/plain
MIME-Version: 1.0
Hello, world!
`