php - 大于 5MB 的附件的 GMail API“请求实体太大错误 413”
问题描述
我已经在 stackoverflow 上查看了一些类似的问题,但似乎没有一个答案对我有用。特别是我在发送电子邮件时尝试了选项 ['uploadType' => 'multipart'] 和 ['uploadType' => 'resumable']。如果附件超过 5MB,它总是给出“请求实体太大错误 413”(我尝试发送 7.x MB 的 docx 文件但失败)。对于小于 5MB 的附件是可以的。有人可以帮忙吗?非常感谢!
这是我的代码:
$objGMail = new Google_Service_Gmail($client);
$strSubject = "Test message";
$strRawMessage = "From: <mygmailid@gmail.com>\r\n";
$strRawMessage .= "To: <receiveremailid@gmail.com>\r\n";
$strRawMessage .= 'Subject: =?utf-8?B?' . base64_encode($strSubject) . "?=\r\n";
$strRawMessage .= "MIME-Version: 1.0\r\n";
$boundary = uniqid(rand(), true);
$strRawMessage .= 'Content-type: multipart/related; boundary="' . $boundary . '"' . "\r\n";
$filePath = "data/bigdocfile.docx";
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
$mimeType = finfo_file($finfo, $filePath);
$fileName = "bigdocfile.docx";
$fileData = base64_encode(file_get_contents($filePath));
$strRawMessage .= "\r\n--{$boundary}\r\n";
$strRawMessage .= 'Content-Type: '. $mimeType .'; name="'. $fileName .'";' . "\r\n";
$strRawMessage .= 'Content-ID: <mygmailid@gmail.com' . '>' . "\r\n";
$strRawMessage .= 'Content-Description: ' . $fileName . ';' . "\r\n";
$strRawMessage .= 'Content-Disposition: attachment; filename="' . $fileName . '"; size=' . filesize($filePath). ';' . "\r\n";
$strRawMessage .= 'Content-Transfer-Encoding: base64' . "\r\n\r\n";
$strRawMessage .= chunk_split(base64_encode(file_get_contents($filePath)), 76, "\n") . "\r\n";
$strRawMessage .= "--{$boundary}\r\n";
$strRawMessage .= "Content-Type: text/html; charset=utf-8\r\n";
$strRawMessage .= 'Content-Transfer-Encoding: base64' . "\r\n\r\n";
$strRawMessage .= $order->content;
try
{
$mime = rtrim(strtr(base64_encode($strRawMessage), '+/', '-_'), '=');
$msg = new Google_Service_Gmail_Message();
$msg->setRaw($mime);
$objSentMsg = $objGMail->users_messages->send("me", $msg, ['uploadType' => 'multipart']);
return "success";
} catch (Exception $e) {
unset($_SESSION['gmail_access_token']);
return $e->getMessage();
}
解决方案
推荐阅读
- html - 如何将容器元素包裹在内联块子项周围
- postgresql - TimescaleDB 处理复杂的连接
- php - 如何在apache服务器ubuntu中将eth0 ip地址映射到localhost
- wordpress - 联系表格 7 或自定义表格
- mysql - 如何在 JPA 中创建通用查询?
- angular - 删除角度中的项目后无法刷新表
- css - Vertical Center with Flexbox and alignment of child items
- spring - 如何配置“健康”执行器端点以使用令牌身份验证?
- aws-lambda - CloudFormation 更改集用户未授权
- javascript - 对 REDUX 动作和减速器感到困惑