Я использую 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();