2

List-Unsubsribe : <mailto:abc@cdf.com>使用 Amazon SES(简单电子邮件服务)时,如何在外发电子邮件中添加标头?我正在使用 AWS 的 JavaScript 开发工具包。

以下是我查看过但未能成功找到答案的各种文档链接:Link1Link2Link3Link4

我已经尝试使用 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
      });
    });
4

2 回答 2

2

根据 AWS 文档,您只能使用 SendRawEmail API 指定自定义标头:

SendRawEmail API 通过指定标头、MIME 部分和内容类型,让您可以灵活地格式化和发送您自己的原始电子邮件消息。SendRawEmail 通常由高级用户使用。您需要提供在 Internet 消息格式规范 (RFC 5322) 中指定的消息正文和所有标头字段。有关更多信息,请参阅使用 Amazon SES API 发送原始电子邮件。

这解释了为什么您的第一个示例不起作用。凉爽的。


这就是为什么您的第二个示例(实际上是使用 SendRawEmail API)不起作用的原因。

不幸的是,为了在发送电子邮件时指定自定义标题,您必须在原始消息的正文中内联指定它们。在制作此原始消息时,您必须遵循一些非常严格的格式要求,否则您的传递可能会失败/输出不正确。尽管它会非常有用,但没有任何 api 方法可以让您使用键/值对来指定标头。

此限制可能是由于 AWS 必须解码您的 base64 编码的原始消息(可以是任何类型的 Buffer、blob、类型化数组、字符串),希望您正确格式化您的消息,并将您的标头插入正确的位置。毫无疑问,这将对 API 的最终用户有所帮助,但对于他们必须做的所有验证和错误处理来说,这绝对像是一场噩梦。

以下是使用 SendRawEmail API 发送电子邮件的详细要求:

RawMessage —(地图)消息的原始文本。客户有责任确保以下事项:

消息必须包含标题和正文,以空行分隔。必须存在所有必需的标头字段。多部分 MIME 消息的每个部分都必须正确格式化。MIME 内容类型必须属于 Amazon SES 支持的内容类型。有关更多信息,请访问 Amazon SES 开发人员指南。必须是 base64 编码的。根据 RFC 5321,包括 在内的每行文本的最大长度不得超过 1,000 个字符。数据 — 必需 —(缓冲区、类型化数组、Blob、字符串)消息的原始数据。如果您直接通过 HTTPS 接口访问 Amazon SES,则此数据需要进行 base64 编码。如果您使用 AWS 开发工具包访问 Amazon SES,则该开发工具包会为您处理基本 64 位编码。在所有情况下,

原始消息中的 To:、CC: 和 BCC: 标头可以包含组列表。

如果您使用具有发送授权的 SendRawEmail,您可以在原始邮件中包含 X-headers 以指定“Source”、“From”和“Return-Path”地址。有关详细信息,请参阅 SendRawEmail 的文档。

不要在 DKIM 签名中包含这些 X 标头,因为它们会在发送电子邮件之前被 Amazon SES 删除。有关更多信息,请访问 Amazon SES 开发人员指南。


我的两分钱

这似乎非常不方便。我建议使用像 Sendgrid 这样的服务,它内置了订阅管理(订阅/取消订阅)、模板管理等功能,以及现代专用电子邮件服务应该具备的一大堆功能。但是,如果您别无选择,那么您可能会陶醉于 SendRawEmail API 为您提供了很多自定义功能,但代价是有点乏味。

您可以从AWS SES Javascript API 文档访问此信息及更多信息:

于 2018-03-12T18:08:53.970 回答
0

第二个示例中的问题是,您将标头添加到对亚马逊的请求中,而不是向电子邮件本身添加标头

请尝试使用以下代码示例:

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
  });
});
于 2018-03-19T13:06:29.050 回答