Отправитель Gmail API не отправляет несколько вложений

Я использую Gmail API для отправки электронной почты на JavaScript. Он отлично работает с текстом и одним вложением. Но когда я пытаюсь отправить два прикрепленных файла, прикрепляется только первое, а второе - ничего. Мой код для создания сообщения:

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

const messageParts = [
        'MIME-Version: 1.0',
        'Content-Transfer-Encoding: 7bit',
        'From: XXXX Support <[email protected]>',
        '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 + '--'
      ]

После этого я создаю строку из массива. Приведенный выше код просто тестируется с двойным подключением одного и того же небольшого вложения размером 6 КБ, чтобы избежать каких-либо ограничений. Я думаю, что у меня есть ошибка в том, как я как-то построил сообщение, но не могу понять, где.

Отправка электронной почты с помощью Python менее чем за 1 минуту
Отправка электронной почты с помощью Python менее чем за 1 минуту
Отправка электронной почты с помощью Python - это удобный способ автоматизировать процесс отправки электронных писем. Это может быть полезно для...
0
0
375
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

Большое спасибо, вот и все! Я попробую тот пакет npm, который вы предложили, потому что да, в противном случае это очень неудобно.

moinhaque 06.10.2018 02:24

Другие вопросы по теме

Похожие вопросы

Электронная почта Meteor - Ошибка ECONNRESET при отправке электронной почты (в первый раз)
Как я могу получить доступ к моей переменной электронной почты .env через контроллер
Laravel отправляет электронное письмо с несколькими отправителями
Значение ответа C++ smtp <550 как получить ответ от получателя, когда у сервера есть задержка
Могу ли я отправлять электронную почту от Jenkins, используя только sendmail, или мне нужно установить какой-то шлюз SMTP?
Google Analytics - отслеживающие электронные письма - событие "открытие" отправляется дважды с помощью клиента Gmail
Как я могу указать гиперссылку на значение ячейки в теле письма?
Как сделать веб-приложение, которое рассылает электронные письма на веб-сервере в зависимости от предстоящих дат с помощью php?
Lumen with Mail - Невозможно разрешить драйвер NULL для [Illuminate \ Mail \ TransportManager]
Отправить mail () с сервера PHP, отличного от того, с которым я работаю