首页 > 解决方案 > 大于 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();                
         }

标签: phpgoogle-apigmail-apigoogle-api-php-client

解决方案


推荐阅读