Ошибка 413: запрос слишком большой с PHP - PullRequest
0 голосов
/ 03 января 2019

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

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

$service->users_messages->send($userId, $message, 'uploadType' => 'resumable']);

$service->users_messages->send($userId, $message, 'uploadType' => 'multipart']);

все еще получая ошибку 413: запрос слишком велик

Уже исследовал в интернете, но не смог заставить его работать.

Редактировать: Ниже коды дают Request is too large. даже для файла 5 МБ

$mail->preSend();
$mime = $mail->getSentMIMEMessage();

$raw = rtrim(strtr(base64_encode($mime), '+/', '-_'), '=');
$message = new Google_Service_Gmail_Message();
$message->setRaw($raw);
$message->setThreadId($threadId); //only for reply
$sendOptions = [
     'uploadType' => 'resumable'
];
// size of chunks we are going to send to google
$chunkSizeBytes = 1 * 1024 * 1024;
$client->setDefer(true);
$response = $service->users_messages->send($userId, $message, $sendOptions);
 // create mediafile upload
  $media = new Google_Http_MediaFileUpload(
          $client,
          $response,
          'message/rfc822',
          $raw,
          true,
          $chunkSizeBytes
   );
   $media->setFileSize(strlen($raw));
   // Upload the various chunks. $status will be false until the process is complete.
   $status = false;

    while (! $status) {
       $status = $media->nextChunk();
       echo $status ."<br>";
    }

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

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

Здесь они предлагают удалить $message->setRaw($raw);.Если я удалю эту строку, я получу Recipient address required ошибку.

Как я это исправил:

$mail = new PHPMailer();
$mail->CharSet = 'UTF-8';
$mail->Subject = $subject;
$mail->Body = $body;
$mail->IsHTML(true);
$mail->addAddress($to);
$mail->AddCC($cc);
$mail->AddBCC($bcc);
$mail->preSend();
$mime = $mail->getSentMIMEMessage();
$sendOptions = [ 'uploadType' => 'resumable' ]; 
$client->setDefer(true);
$chunkSizeBytes = 1 * 1024 * 1024;
// create mediafile upload
$media = new Google_Http_MediaFileUpload(
          $client,
          $response,
          'message/rfc822',
          $mime,
          true,
          $chunkSizeBytes
      );
  $response = $service->users_messages->send($userId, $message);
  $media->setFileSize(strlen($mime));
      // 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.
      $client->setDefer(false);
      // Get sent email message id
      $googleMessageId = $status->getId();
...