Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用gmail API发送大附件_Php_Gmail_Gmail Api - Fatal编程技术网

Php 如何使用gmail API发送大附件

Php 如何使用gmail API发送大附件,php,gmail,gmail-api,Php,Gmail,Gmail Api,我正试图发送一封带有Gmail API的电子邮件。我能够成功地将其与较小的文件一起发送。当我尝试发送较大大小的附件时出现问题。几个小时以来我一直在尝试不同的解决方案。在给出错误之前,错误413:请求实体太大。我更新了我的代码,代码如下所示: $mime = rtrim(strtr(base64_encode($mime), '+/', '-_'), '='); $msg = new Google_Service_Gmail_Message(); $msg->setRaw($mime

我正试图发送一封带有Gmail API的电子邮件。我能够成功地将其与较小的文件一起发送。当我尝试发送较大大小的附件时出现问题。几个小时以来我一直在尝试不同的解决方案。在给出错误之前,错误413:请求实体太大。我更新了我的代码,代码如下所示:

    $mime = rtrim(strtr(base64_encode($mime), '+/', '-_'), '=');
$msg = new Google_Service_Gmail_Message();
$msg->setRaw($mime);
$sendOptions = [
        'uploadType' => 'resumable'
];
// size of chunks we are going to send to google
$chunkSizeBytes = 1 * 1024 * 1024;

$client->setDefer(true);
$objSentMsg = $service->users_messages->send('me', $msg, $sendOptions);

// create mediafile upload
$media = new Google_Http_MediaFileUpload(
    $client,
    $objSentMsg,
    'message/rfc822',
    $mime,
    true,
    $chunkSizeBytes
);
//I tried to pass null in above media object in place of $mime variable. didn't worked either.


$media->setFileSize(strlen($mime));

// 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 = $result->getId();
$mime=rtrim(strtr(base64_encode($mime),“+/”、“-”、“=”);
$msg=新的Google_服务_Gmail_消息();
$msg->setRaw($mime);
$sendOptions=[
“uploadType”=>“可恢复”
];
//我们将要发送到google的块的大小
$chunkSizeBytes=1*1024*1024;
$client->setDefer(true);
$objSentMsg=$service->users\u messages->send('me',$msg,$sendpoptions);
//创建媒体文件上载
$media=新的Google\u Http\u MediaFileUpload(
$client,
$objSentMsg,
'消息/rfc822',
$mime,
是的,
$chunkSizeBytes
);
//我试图在上面的媒体对象中传递null来代替$mime变量。也不管用。
$media->setFileSize(strlen($mime));
//上传各种块$在流程完成之前,状态将为false。
$status=false;
while(!$status){
$status=$media->nextChunk();
回显$status。“
”; } //重置到客户端以在将来立即执行请求。 $client->setDefer(false); //获取已发送的电子邮件id $googleMessageId=$result->getId();
现在它给了我一个错误:未捕获的Google\u服务\u异常:请求太大


顺便说一句,我试图发送的文件是7.x MB,在创建mime消息之后,整个mime消息的大小变为14MB左右,发送消息的API限制为35MB。它发出请求的原因太大错误。请在这方面帮助我。

好吧,gmail有一个文件大小限制,请尝试上传到谷歌硬盘,并与他人分享,以防其他人面临同样的问题。我解决了我的问题。我的程序有漏洞。我正在将已编码的$mime传递给媒体构造函数。它应该是未编码的mime。为了使其正常工作,进行了全面的更改

  • 删除$msg->setRaw($mime)这条线
  • 已将未解码的$mime传递给媒体构造函数
  • 将未解码的mime大小传递到此行$media->setFileSize(strlen($mime))

  • 成功了

    只要有选择发送文件通过附件在35MB以下。我必须通过附件发送。所以需要这个解决方案。也不要添加对他人没有帮助的答案。改为使用评论部分。我无法使其工作。你能帮忙吗?