Gmail API 导入 - 错误 413 请求实体太大

Posted

技术标签:

【中文标题】Gmail API 导入 - 错误 413 请求实体太大【英文标题】:Gmail API Import - Error 413 Request Entity Too Large 【发布时间】:2016-11-24 05:44:19 【问题描述】:

我正在使用 Google API php 客户端。我正在编写一个程序,它将批量消息从一个帐户导入另一个帐户。要导入,我使用以下行:

$service->users_messages->import('me', $message, $options);

..其中 $message 是来自$service->users_messages->get() 的原始消息。

首先,程序从一个帐户获取消息列表。用户选择他想要导入的消息,然后单击导入按钮。导入循环选定的邮件并且工作正常,但有些邮件包含大附件。这些消息将失败并返回 错误 413 - 请求实体太大。

我已阅读我需要指出上传类型应为多部分。 我正在使用 Google API PHP 客户端,但没有看到任何添加此上传类型的方法、类或选项。

任何建议都会有所帮助。谢谢。

【问题讨论】:

【参考方案1】:

尝试将变量 $message 设置为此 mail with attachment 代码 sn-p。

$strRawMessage .= "\r\n--$boundary\r\n";
$strRawMessage .= 'Content-Type: '. $mimeType .'; name="'. $fileName .'";' . "\r\n"; 
$strRawMessage .= 'Content-ID: <' . $strSesFromEmail . '>' . "\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 .= "\r\n--$boundary\r\n";
$strRawMessage .= 'Content-Type: text/plain; charset=' . $charset . "\r\n";
$strRawMessage .= 'Content-Transfer-Encoding: 7bit' . "\r\n\r\n";
$strRawMessage .= $strMailTextVersion . "\r\n";

$strRawMessage .= "--$boundary\r\n";
$strRawMessage .= 'Content-Type: text/html; charset=' . $charset . "\r\n";
$strRawMessage .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n\r\n";
$strRawMessage .= $strMailContent . "\r\n";
// The message needs to be encoded in Base64URL
$mime = rtrim(strtr(base64_encode($strRawMessage), '+/', '-_'), '=');
$msg = new Google_Service_Gmail_Message();
$msg->setRaw($mime);

还可以查看此curl implementation 或此ajax implementation

【讨论】:

谢谢,但还是没用。我的邮件格式相同,除了附件大的以外,都导入成功了。

以上是关于Gmail API 导入 - 错误 413 请求实体太大的主要内容,如果未能解决你的问题,请参考以下文章

Gmail REST API:400错误请求+失败的前提条件

Gmail API 服务器到服务器应用程序(错误请求错误)

我在第79行的REST.php中有400个错误请求,实现了GMAIL Api PHP

请求 gmail-api 时出现 HttpError 429:超出用户速率限制

使用服务帐户的 Gmail API 集转发

向 Gmail API 发送消息的 Node.js POST 请求