Отправьте многочастное электронное письмо с огромными вложениями - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь отправить электронное письмо с вложениями, используя Gmail API, я использую NodeJS, я прочитал этот документ

https://developers.google.com/gmail/api/guides/uploads#multipart

Но я не уверен, что мне не хватает в заголовках, вот код

Я должен отправить электронное письмо с вложением размером более 25 МБ, поэтому для этого я использую multipart Gmail, следующий код

const options = {
    uri: 'https://www.googleapis.com/upload/gmail/v1/users/xyz@gmail.com/messages/send?uploadType=multipart',
    method: apiConfig.method,
    media: {mimeType: 'message/rfc822', body: requestParameter.dataObj.raw},
    headers: {
        Authorization: 'Bearer ' + token,
        'Content-type': 'message/rfc822'
    },
    json: true
}

1 Ответ

1 голос
/ 28 января 2020

В соответствии с Отправка вложений с помощью вашей Gmail документации :

Вы можете отправлять до 25 МБ вложений. Если у вас есть более одного вложения, они не могут превышать 25 МБ.

Если размер вашего файла превышает 25 МБ, Gmail автоматически добавляет ссылку на Google Диск в электронное письмо, вместо того, чтобы включать его как вложение.

Но последнее предложение относится к пользовательскому интерфейсу Gmail, а не к тому, если вы используете API.

Так что по сути вы не можете загрузить непосредственно вложение в Gmail - сначала необходимо загрузить его на Google Диск, а затем отправить его по электронной почте.

Возможное решение :

  1. Загрузите файл, который вы хотите отправить на Google Drive, используя Google Drive API v3 . Поскольку вы хотите загрузить файл размером более 25 МБ , вы должны использовать resumable upload. возобновляемая загрузка является более надежным типом передачи и особенно важна для больших файлов .
var options = {
        url: 'https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable',
        headers: {
            'Authorization': 'Bearer ' + token,
            'Content-Type': 'application/json',
        },
        //other options
}

Извлеките файл из Drive с помощью Drive API и установите разрешения, необходимые для возможности поделиться файлом. После этого вы должны использовать модуль NPM async для синхронизации изменений в разрешениях.
var fileId = 'ID_OF_THE_FILE';
var permissions = [
  {
    'type': 'user',
    'role': 'writer',
    'emailAddress': 'user@example.com'
  }, {
    'type': 'domain',
    'role': 'writer',
    'domain': 'example.com'
  }
];
Отправьте электронное письмо со ссылкой на требуемый файл в теле .

Примечание : вы также должны авторизоваться необходимые области как для Drive, так и для Gmail.

Кроме того, я предлагаю вам проверить следующие ссылки, поскольку они могут быть полезны:

...