Intereting Posts
Создание массива с ассоциативными ключами массива и численными значениями массива PHP PHP: концепция рейтинговой системы звезд? Отправка электронной почты с помощью PHP mail () PHP fgetcsv () не читает первый символ UTF-8 – alternatif using fgets Использование Webservice для отправки имени пользователя и пароля с PHP на JAVA Api использование regex для обертывания изображений в тегах Noobie bigcommerce API-соединение Узнайте, истек ли сеанс с определенным идентификатором Обработка элементов в шаблоне сбора с помощью блока отображения данных Пароль md5 с phpMailer Отображение выбранного значения в раскрывающемся списке выберите с помощью PHP Попытка изучить подготовленные заявления mysqli; Что я делаю не так? PHP генерирует csv, не отправляя правильные новые строки Как настроить XAMPP для использования с MSSQL? Исправлены сломанные изображения в электронной почте из-за изменения пути к ресурсам сервера

Gmail API PHP Client Library – Как отправлять большие вложения с помощью клиентской библиотеки 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.

EDIT: согласно этой странице максимальный размер загрузки на самом деле составляет 35 МБ. Для этого достаточно указать размер, указанный в моем php.ini, и запросы не работают как 413 из Google, а не внутренняя ошибка сервера.

Не слишком знакомы с GMail API, но вы должны иметь возможность использовать пакетные загрузки для уменьшения размера каждого отдельного запроса. Взгляните на образец загрузки файла в клиенте 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); } 

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

 // size of chunks we are going to send to google $chunkSizeBytes = 1 * 1024 * 1024; $mailMessage = 'raw email text' // 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();