使用Amazon SES(简单电子邮件服务)时,如何在外发电子邮件中添加List-Unsubsribe : <mailto:abc@cdf.com>
标头?我正在使用AWS&#39; JavaScript SDK。
以下是我查看但未能找到答案的各种文档链接:Link1,Link2,Link3,Link4。
我尝试过使用SendMail和SendRawEmail API。
使用SendMail API
let params={
Source: auth.host,
Destination: { ToAddresses: [email] },
Headers:{ListUnsubscribe :'<mailto:abc@def.com>'}, //error unexpected key Headers
Message: {Subject:{Data: subject },Body:{Text: {Data: mail}}}
}
ses.sendEmail(params,(err, data)=>{
if(err){
console.error(err);
}else{
console.log('Email sent: ');
console.log(data);
}
});
使用SendRawEmail API
var mailOptions = {
from: auth.host,
subject: subject,
text: mail,
to: email,
};
var mail = mailcomposer(mailOptions);
mail.build(function (err, message){
var req = ses.sendRawEmail({RawMessage: {Data: message}});
req.on('build', function() {
req.httpRequest.headers["List-Unsubscribe"] = "<mailto:abc@abc.com>";
});
req.send(function (err, data) {
if(err) //code
else //code
});
});
答案 0 :(得分:2)
根据AWS文档,您只能使用SendRawEmail API指定自定义标头:
SendRawEmail API为您提供格式化和发送的灵活性 您自己的原始电子邮件,通过指定标题,MIME部分和 内容类型。 SendRawEmail通常由高级用户使用。您 需要提供消息正文和所有标题字段 在Internet邮件格式规范中按要求指定 (RFC 5322)。有关更多信息,请参阅使用“发送原始电子邮件” 亚马逊SES API。
这解释了为什么你的第一个例子不起作用。凉。
这就是为什么第二个实际使用SendRawEmail API的示例无效。
不幸的是,为了在发送电子邮件时指定自定义标头,您必须在原始邮件的正文中内联指定它们。在制作此原始邮件时,您必须遵循一些非常严格的格式要求,否则您的投放可能会失败/输出错误。虽然它会非常有用,但是没有api方法可以让你使用键/值对来指定标题。
这个限制可能是因为AWS必须解码你的base64编码的原始消息(可以是Buffer,blob,typed数组,字符串中的任何一种),希望你正确格式化你的消息,并插入你的标题位于正确的位置。毫无疑问,这会对API的最终用户有所帮助,但绝对看起来像是他们必须要做的所有验证和错误处理的噩梦。
以下是使用SendRawEmail API发送电子邮件的详细要求:
RawMessage - (map)消息的原始文本。客户是 负责确保以下内容:
邮件必须包含标题和正文,用空行分隔。 必须存在所有必需的标题字段。多部分的每个部分 MIME邮件必须格式正确。 MIME内容类型必须是 亚马逊SES支持的那些。有关更多信息,请转到 Amazon SES开发人员指南。必须是base64编码的。根据RFC 5321, 每行文本的最大长度,包括,不得 超过1,000个字符。数据 - 必需 - (缓冲区,类型数组,Blob, 字符串)消息的原始数据。此数据需要base64编码 如果您通过HTTPS界面直接访问Amazon SES。 如果您使用AWS SDK访问Amazon SES,则SDK会照顾 你的64位编码。在所有情况下,客户必须确保 消息格式符合Internet电子邮件标准 关于电子邮件标题字段,MIME类型和MIME编码。
原始邮件中的收件人:,CC:和BCC:标头可以包含一个组 列表。
如果您使用SendRawEmail发送授权,则可以 在原始邮件中包含X-header以指定“来源”,“来自” 和“返回路径”地址。有关更多信息,请参阅 SendRawEmail的文档。
不要在DKIM签名中包含这些X-header,因为它们是 在发送电子邮件之前由Amazon SES删除。欲获得更多信息, 转到Amazon SES开发人员指南。
我的两分钱
这看起来非常不方便。我建议使用像Sendgrid这样的服务,它内置了诸如订阅管理(订阅/取消订阅),模板管理以及现代专用电子邮件服务应具备的一大堆功能。但是,如果您没有选择,那么可能会对SendRawEmail API为您提供大量自定义这一事实感到高兴,但这会让您感到有点单调乏味。
访问此信息以及更多信息答案 1 :(得分:0)
您的第二个示例中的问题是您向amazon添加了标头,而不是向自己发送电子邮件
请尝试使用以下代码示例:
var mailOptions = {
from: auth.host,
subject: subject,
text: mail,
to: email,
headers: {
'List-Unsubscribe': "<mailto:abc@abc.com>"
}
};
var mail = mailcomposer(mailOptions);
mail.build(function (err, message){
var req = ses.sendRawEmail({RawMessage: {Data: message}});
req.send(function (err, data) {
if(err) //code
else //code
});
});