Когда я использую клиент Gmail API Node.js для отправки электронного письма с вложением размером более 5 МБ, я получаю сообщение об ошибке «413 Request Entity Too Large».
Сначала я создаю строку mimeMessage, которая содержитсообщение MIME типа multipart / mixed.Одна часть этого сообщения представляет собой вложение, закодированное в base64, размером> 5 МБ.Затем я пытаюсь отправить его:
gmail = google.gmail({ version: 'v1', auth: authentication });
encodedMimeMessage = Buffer.from(mimeMessage)
.toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=+$/, '');
gmail.users.messages.send({
userId: 'me',
resource: { raw: encodedMimeMessage }
}, (err, res) => {
...
});
Это приводит к ошибке «413 Request Entity Too Large».
Согласно документации API, должна использоваться возобновляемая загрузка (https://developers.google.com/gmail/api/guides/uploads#resumable). Но в документации приводятся только примеры для HTTP-запросов и не описывается, как это можно сделать с помощью клиента Node.js. Я хотел бы избежать смешивания вызовов к google-api-nodejs-client с HTTP-запросами. Еслиэтого нельзя избежать. Я был бы очень признателен за хороший пример того, как это сделать в Node.js.
Я пытался установить uploadType на resumable:
gmailApi.users.messages.send({
userId: 'me',
uploadType: 'resumable',
resource: { raw: encodedMimeMessage }
}, (err, res) => {
...
});
Я вижу из ответа сервера, чтоон оказался в строке запроса, но не решил проблему.
Я нашел примеры в PHP ( Отправка большого вложения с помощью Gmail API , Как отправлять большие вложения с помощьюAPI gmail ), Java (https://developers.google.com/api-client-library/java/google-api-java-client/media-upload) и Python ( Ошибка 10053 при отправке больших вложений с использованием API Gmail ). Но они используют «Google_Http_MediaFileUpload», «MediaHttpUploa»der 'и' MediaIoBaseUpload 'соответственно, и я не знаю, как применить это к nodejs-клиенту.
Я нашел пример в Python ( Использование Gmail API для отправки вложений размером более 10 МБ ), который использует uploadType = 'multipart' и сообщение, не закодированное в base64.Но я всегда получаю сообщение об ошибке, когда я не кодирую сообщение base64.