Gmail API发件人未发送多个附件

时间:2018-10-03 13:55:44

标签: email gmail-api email-attachments

我正在使用Gmail API通过JavaScript发送电子邮件。文字加上一个附件的效果很好。但是,当我尝试发送两个附件时,只有第一个附件被附加,而另一个附件则什么也没有。我用于构建消息的代码是:

  var nl = '\n';
  var boundary = "__myapp__";

const messageParts = [
        'MIME-Version: 1.0',
        'Content-Transfer-Encoding: 7bit',
        'From: XXXX Support <XXXXX@XXXXX.XXXXX>',
        'To: Moin <' + event.email + '>',
        'subject: ' + utf8Subject,
        'Content-Type: multipart/mixed; boundary=' + boundary + nl,
        '--' + boundary,
        'Content-Type: text/plain; charset=UTF-8',
        'Content-Transfer-Encoding: 7bit' + nl,
        messageBody+ nl,
        '--' + boundary,
        'Content-Type: Application/pdf; name=' + testFileName,
        'Content-Disposition: attachment; filename=' + testFileName,
        'Content-Transfer-Encoding: base64' + nl,
        testFile.Body.toString('base64'),
        '--' + boundary,
        'Content-Type: Application/pdf; name=' + testFileName,
        'Content-Disposition: attachment; filename=' + testFileName,
        'Content-Transfer-Encoding: base64',
        testFile.Body.toString('base64'),
        '--' + boundary + '--'
      ]

此后,我从数组中创建一个字符串。上面的代码仅是通过将相同的6k小附件附加两次来进行测试,以避免与限制有关。我认为我在某种程度上如何构建消息有一个错误,但是无法确定在哪里。

1 个答案:

答案 0 :(得分:1)

在您的第一个附件中:

 'Content-Type: Application/pdf; name=' + testFileName,
    'Content-Disposition: attachment; filename=' + testFileName,
    'Content-Transfer-Encoding: base64' + nl,
    testFile.Body.toString('base64'),
    '--' + boundary,

在第二个附件中:

    'Content-Type: Application/pdf; name=' + testFileName,
    'Content-Disposition: attachment; filename=' + testFileName,
    'Content-Transfer-Encoding: base64',
    testFile.Body.toString('base64'),

您缺少“ content-transfer-encoding”标题项的尾随换行符。

我强烈建议您使用现有的库来编写MIME消息,因此您不必担心这些细节。参见:https://www.npmjs.com/package/mimemessage