电子邮件未在Amazon SES SendRawEmail(Node.JS)中显示收件人:,抄送和密件抄送

时间:2019-08-06 18:47:07

标签: node.js amazon-web-services email amazon-ses

关于this solution,有关在发送RawEmail时添加抄送和密件抄送,接收邮件时,我的收件人,抄送和密件抄送字段为空。为了实现最快的速度,我正在使用此OSS aws-thin-ses-node库。

我的原始电子邮件发送方法定义为(收件人,抄送和密件抄送是数组,因此我对asOptionalArray和asValueFromArray方法进行了一些调整,以按照AWS SDK中定义的所需格式进行发送)。

尽管此小问题已发送到所有“收件人”,“抄送”和“密件抄送”地址,但我可以改进些什么来解决呢?我要附加我的sendRawEmail和getRawMessages方法定义,如下所示

sendRawEmail: async ({ to, cc, bcc data}) => {
      let destinations

      if (cc && cc.length && bcc && bcc.length) {
        destinations = [...cc, ...bcc]
        destinations.unshift(asValueFromArray(to, 0))
      } else {
        destinations = to
      }

      const params = {
        Destinations: asOptionalArray(destinations),
        To: to instanceof Array ? to : asOptionalArray(to),
        Cc: asOptionalArray(cc),
        Bcc: asOptionalArray(bcc),
        RawMessage: {
          Data: await getRawMessage(data)
        }
      }
      return client.sendEmail(params)
    }

const getRawMessage = (data) => {
  const template = getReportTemplate()
  const subject = getSubject()
  const reportName = getReportName()
  let sesMail = 'From: noReply <' + noreplyEmail + '>\n'
  sesMail += 'Subject: ' + subject + '\n'
  sesMail += 'MIME-Version: 1.0\n'
  sesMail += 'Content-Type: multipart/mixed; boundary="NextPart"\n\n'
  sesMail += '--NextPart\n'
  sesMail += 'Content-Type: text/html\n\n'
  sesMail += template.report + '\n\n'
  sesMail += '--NextPart\n'
  sesMail += 'Content-Type: application/msexcel; name="' + reportName + '"\n'
  sesMail += 'Content-Transfer-Encoding: base64\n'
  sesMail += 'Content-Disposition: attachment\n\n'
  sesMail += data.toString('base64') + '\n\n'
  sesMail += '--NextPart--'
  // eslint-disable-next-line
  const base64Encoded = new Buffer.from(sesMail).toString('base64')
  return base64Encoded
}

发送原始电子邮件如下:

email_raw_without_to_cc_bcc

1 个答案:

答案 0 :(得分:1)

我终于想出了解决方案,问题是我没有在ses邮件标题中定义To,Cc和Bcc,如建议的那样,我的destinations数组现在为空,并重写

const getRawMessage = (to, cc, bcc, data) => {
  const template = getReportTemplate()
  const subject = getSubject()
  const reportName = getReportName()
  let sesMail = 'From: noReply <' + noreplyEmail + '>\n'
  sesMail += 'To: ' + asValueFromArray(to, 0) + '\n'
  sesMail += cc && cc.length ? 'Cc: ' + asOptionalArray(cc) + '\n' : ''
  sesMail += bcc && bcc.length ? 'Bcc: ' + asOptionalArray(bcc) + '\n' : ''
  sesMail += 'Subject: ' + subject + '\n'
  sesMail += 'MIME-Version: 1.0\n'
  sesMail += 'Content-Type: multipart/mixed; boundary="NextPart"\n\n'
  sesMail += '--NextPart\n'
  sesMail += 'Content-Type: text/html\n\n'
  sesMail += template.report + '\n\n'
  sesMail += '--NextPart\n'
  sesMail += 'Content-Type: application/msexcel; name="' + reportName + '"\n'
  sesMail += 'Content-Transfer-Encoding: base64\n'
  sesMail += 'Content-Disposition: attachment\n\n'
  sesMail += data.toString('base64') + '\n\n'
  sesMail += '--NextPart--'
  // eslint-disable-next-line
  const base64Encoded = new Buffer.from(sesMail).toString('base64')
  return base64Encoded
}