SES.sendRawEmail仅使用Gmail中的第一个附件(Nodejs)

我正在尝试使用AWS SES和nodejs发送带有多个附件的电子邮件。

我的js脚本这样调用ses.sendRawEmail:

const params = {
    RawMessage: {
      Data: rawMailBody
    },Destinations: [],Source: 'testemail@gmail.com'
  };

  ses.sendRawEmail(params,function (err,data) {
    if (err) console.log("Error: " + err);
    else {

      // console.log("Success call: ",JSON.stringify(data));
      console.log("Success.");

      return data
    }

  });

这是我创建“ rawMailBody”对象的方式:

const BUCKET = 'my-bucket';
var rawMailBody = "From: testemail@gmail.com\n";
  rawMailBody = rawMailBody + "To: testemail@gmail.com\n";
  rawMailBody = rawMailBody + "Subject: Test Subject\n";
  rawMailBody = rawMailBody + ``
  rawMailBody = rawMailBody + "MIME-Version: 1.0\n";
  rawMailBody = rawMailBody + "Content-Type: multipart/mixed; boundary=\"NextPart\"\n\n";
  rawMailBody = rawMailBody + "--NextPart\n";

  rawMailBody = rawMailBody + "Content-Type: text/html; charset=iso-8859-1\n";
  rawMailBody = rawMailBody + "\n";

  rawMailBody = rawMailBody + htmlData;

  rawMailBody = rawMailBody + "--NextPart\n";

  console.log('attaching attachments')

  const attachmentFilename = 'Evaluates2-Old-Logo.pdf';
  const attachmentFilename2 = '2019-W-4.pdf';

  console.log('adding attachment',attachmentFilename)
  rawMailBody = rawMailBody + "Content-Type: application/octet-stream\n";
  rawMailBody = rawMailBody + "Content-ID: random1565323918273545letters\n";
  rawMailBody = rawMailBody + 'Content-Disposition: attachment; name="Evaluates2-Old-Logo.pdf"; filename="Evaluates2-Old-Logo.pdf";\n';
  rawMailBody = rawMailBody + "Content-Transfer-Encoding: base64\n";
  rawMailBody = rawMailBody + await getImgDataBuffer('Evaluates2-Old-Logo.pdf',BUCKET); + "\n\n";
  rawMailBody = rawMailBody + "--NextPart\n";

  console.log('adding attachment',attachmentFilename2)
  rawMailBody = rawMailBody + "Content-Type: application/octet-stream\n";
  rawMailBody = rawMailBody + "Content-ID: random1565323443423794letters\n";
  rawMailBody = rawMailBody + "Content-Transfer-Encoding: base64\n";
  rawMailBody = rawMailBody + 'Content-Disposition: attachment; name="2019-W-4.pdf"; filename="2019-W-4.pdf";\n';
  // rawMailBody = rawMailBody + "Content-ID random3965323447923784letters\n";
  rawMailBody = rawMailBody + await getImgDataBuffer('2019-W-4.pdf',BUCKET); + "\n\n";
  rawMailBody = rawMailBody + "--NextPart\n";

  rawMailBody = rawMailBody + "--NextPart--\n";

我正在像这样获取图像数据库base64缓冲区:

const getImgDataBuffer = (imageFilename,bucket) => {

  return new Promise((resolve,reject) => {

    var params = { Bucket: bucket,Key: imageFilename };

    s3.getObject(params,data) {

      if (err) {

        console.log(err,err.stack); // an error occurred

        reject(err)
      }
      else {
        console.log(data.ContentLength);
        console.log(data.ContentType);
        console.log(data.Body);

        console.log('got ',imageFilename)
        resolve(data.Body.toString('base64'))
      }
    })

  })

}

我在gmail中收到非常奇怪的行为-它仅需要发送的第一个pdf文件。第一个pdf完全通过,但第二个完全不通过。当我交换将附件添加到rawMailBody对象的顺序时,它仍然仅呈现第一个。

当我在gmail中选择“显示原始邮件”时,我可以看到第二个附件的整个MIME块完全丢失了...

这是gmail删除第一个附件之后的后续附件的预期行为吗?我只是做错了吗?

谢谢!

fishingboy123 回答:SES.sendRawEmail仅使用Gmail中的第一个附件(Nodejs)

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2980848.html

大家都在问