Клиентская библиотека PHP Gmail API — Как отправить большие вложения с помощью клиентской библиотеки PHP?

Я использую клиентскую библиотеку PHP Google для отправки вызовов API Gmail. Используя эти ресурсы, я могу отправлять сообщения с вложениями, используя следующий код:

public function send_message(Google_Service_Gmail $gmail, $raw_message)
{
Log::info('Gmail API request \'users_messages->send\'');
$postBody = new Google_Service_Gmail_Message();
$postBody->setRaw(Str::base64_encode_url($raw_message));
return $gmail->users_messages->send('me', $postBody, ['uploadType' => 'multipart']);
}

Но я не могу на всю жизнь понять, как отправлять вложения размером более нескольких МБ. Я обнаружил, что необходимо использовать multipart uploadtype, но я могу точно выяснить, как реализовать это на основе того, что у меня сейчас есть, так как код выше все еще дает мне эту ошибку:

Error calling POST https://www.googleapis.com/gmail/v1/users/me/messages/send?uploadType=multipart
Error 413: Request Entity Too Large

Эта статья имеет действительно хорошую информацию о широких штрихах, но я надеюсь, что немного больше рекомендаций, касающихся клиентской библиотеки Google PHP.

РЕДАКТИРОВАТЬ: Согласно эта страница, максимальный размер загружаемого файла — 35 МБ. Размер, указанный в моем php.ini, достаточен для этого, и запросы не выполняются как 413 от Google, а не внутренняя ошибка сервера.

2

Решение

Не слишком знаком с API-интерфейсом GMail, но вы сможете использовать фрагментированные загрузки, чтобы уменьшить размер каждого отдельного запроса. Взгляните на пример загрузки файла в клиенте Github: https://github.com/google/google-api-php-client/blob/master/examples/fileupload.php#L73

$media = new Google_Http_MediaFileUpload(
$client,
$request,
'text/plain',
null,
true,
$chunkSizeBytes
);

$media->setFileSize(filesize(TESTFILE));
$status = false;
$handle = fopen(TESTFILE, "rb");
while (!$status && !feof($handle)) {
$chunk = fread($handle, $chunkSizeBytes);
$status = $media->nextChunk($chunk);
}
1

Другие решения

Если вы уже подготовили необработанную электронную почту, вы можете использовать этот пример (первоначально взят из Вот):

// size of chunks we are going to send to google
$chunkSizeBytes = 1 * 1024 * 1024;

// actual raw email message
$mailMessage = 'raw email text with files embedded'

// code to create mime message
$googleClient = new Google_Client();

// code to setup the client
$mailService = new Google_Service_Gmail($googleClient);
$message = new Google_Service_Gmail_Message();

// Call the API with the media upload, defer so it doesn't immediately return.
$googleClient->setDefer(true);

$request = $mailService->users_messages->send('me', $message);

// create mediafile upload
$media = new Google_Http_MediaFileUpload(
$googleClient,
$request,
'message/rfc822',
$mailMessage,
true,
$chunkSizeBytes
);
$media->setFileSize(strlen($mailMessage));

// Upload the various chunks. $status will be false until the process is complete.
$status = false;
while (! $status) {
$status = $media->nextChunk();
}

// Reset to the client to execute requests immediately in the future.
$googleClient->setDefer(false);

// Get sent email message id
$googleMessageId = $status->getId();
1

По вопросам рекламы [email protected]