【问题标题】:List Unsubscribe in Aws-sdk nodejs在 Aws-sdk nodejs 中列出取消订阅
【发布时间】:2018-08-16 12:31:32
【问题描述】:

在使用 Amazon SES(简单电子邮件服务)时,如何在外发电子邮件中添加 List-Unsubsribe : <mailto:abc@cdf.com> 标头?我正在使用 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
      });
    });

【问题讨论】:

  • 你可以试试'List-Unsubscribe`作为你的标题吗?
  • 试过了。出现错误“没有标题或标题这样的字段”
  • 我认为 sendEmail 不允许您设置标题。来自文档:SendRawEmail API 通过指定标头、MIME 部分和内容类型,让您可以灵活地格式化和发送您自己的原始电子邮件消息。 SendRawEmail 通常由高级用户使用。您需要提供在 Internet 消息格式规范 (RFC 5322) 中指定的消息正文和所有标头字段。有关更多信息,请参阅使用 Amazon SES API 发送原始电子邮件。
  • 你读过我帖子中“也使用过”的部分吗.....如果你读过,你会看到我在那里使用了发送原始电子邮件的方法,并且还设置了他们没有帮助的标题。跨度>
  • 我错过了,但至少现在你知道有一种方法绝对行不通。在进一步阅读文档后,您似乎必须在原始消息中指定标头,这似乎很不方便。发布答案。

标签: javascript node.js amazon-ses aws-sdk-js aws-sdk-nodejs


【解决方案1】:

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

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

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
  });
});

【讨论】:

    【解决方案2】:

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

    SendRawEmail API 为您提供格式化和发送的灵活性 通过指定标题、MIME 部分和 内容类型。 SendRawEmail 通常由高级用户使用。你 需要提供消息的正文和所有的标头字段 根据 Internet 消息格式规范的要求指定 (RFC 5322)。有关详细信息,请参阅使用 亚马逊 SES API。

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


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

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

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

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

    RawMessage —(地图)消息的原始文本。客户是 负责确保以下内容:

    消息必须包含标题和正文,以空行分隔。 必须存在所有必需的标头字段。多部分的每个部分 MIME 消息的格式必须正确。 MIME 内容类型必须是 在 Amazon SES 支持的那些中。欲了解更多信息,请访问 亚马逊 SES 开发人员指南。必须是 base64 编码的。根据 RFC 5321, 每行文本的最大长度,包括 , 不得 超过 1,000 个字符。数据 — 必需 —(缓冲区、类型化数组、Blob、 String) 消息的原始数据。此数据需要进行 base64 编码 如果您是通过 HTTPS 接口直接访问 Amazon SES。 如果您使用 AWS 开发工具包访问 Amazon SES,开发工具包会负责 为您提供基本 64 位编码。在所有情况下,客户必须确保 消息格式符合 Internet 电子邮件标准 关于电子邮件标头字段、MIME 类型和 MIME 编码。

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

    如果您使用具有发送授权的 SendRawEmail,您可以 在原始消息中包含 X 标头以指定“来源”、“发件人”、 和“返回路径”地址。有关详细信息,请参阅 SendRawEmail 的文档。

    不要在 DKIM 签名中包含这些 X 标头,因为它们是 在发送电子邮件之前被 Amazon SES 删除。了解更多信息, 转到 Amazon SES 开发人员指南。


    我的两分钱

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

    您可以通过AWS SES Javascript API docs 访问此信息及更多信息:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 2022-11-20
      • 2020-11-11
      • 1970-01-01
      相关资源
      最近更新 更多