使用 Gmail API 发送大附件

Posted

技术标签:

【中文标题】使用 Gmail API 发送大附件【英文标题】:Send large attachment with Gmail API 【发布时间】:2018-08-27 23:29:06 【问题描述】:

根据 Gmail API 发送带有大于 5MB 的大附件的电子邮件,您需要使用此处的说明: https://developers.google.com/gmail/api/guides/uploads

API 对细节不是很清楚,我尝试使用我在这里找到的解释: Gmail API php Client Library - How do you send large attachments using the PHP client library?

我每次都会收到“Entity too large”错误消息。

有人可以使用 Gmail API 成功发送大于 5MB 的附件,并帮助我了解我做错了什么?

我的作曲家文件:


    "require": 
        "google/apiclient": "^2.0",
        "pear/mail_mime": "^1.10"
    

阅读完所有内容后我的代码是这样的:

<?php
set_time_limit(100);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

require_once __DIR__ . '/vendor/autoload.php';
require_once 'client.php';

$googleClient = getClient();

$mailService = new Google_Service_Gmail($googleClient);
$message = new Google_Service_Gmail_Message;

$file = __DIR__ . '/pexels-photo.jpg';

$mime = new Mail_mime;
$mime->addTo('mymail@domain.com');
$mime->setTXTBody('');
$mime->setSubject('test');

$mailMessage = base64_encode($mime->getMessage());
$message->setRaw($mailMessage);

$request = $mailService->users_messages->send(
    'me',
    $message,
    array( 'uploadType' => 'resumable' )
);

$googleClient->setDefer(true);

$media = new Google_Http_MediaFileUpload(
    $googleClient,
    $request,
    'message/rfc822',
    $mailMessage,
    $resumable = true,
    $chunkSizeBytes = 1 * 1024 * 1024
);

$media->setFileSize(filesize($file));

$status = false;
$handle = fopen($file, 'rb');
while (! $status && ! feof($handle)) 
    $chunk = fread($handle, $chunkSizeBytes);
    $status = $media->nextChunk($chunk);


fclose($handle);

$googleClient->setDefer(false);

【问题讨论】:

文档说使用resumable upload 获取更大的文件。你试过了吗? 你读过我的代码吗? How to send big attachments with gmail API的可能重复 @JakeSymons,真的吗?我怎么能重复昨天提出的问题? @YehudaHassine,你能解决这个问题吗?我也面临同样的问题。如果我附加一个 3.7MB 有效负载大小的文件是 7.5MB,如果我上传两个这样的文件,它会变成 14MB,并且我收到“实体太大”错误。如果您能够修复,请分享。 【参考方案1】:

@MP 就我而言,问题是我需要设置未编码的消息大小,而不是实际文件。像这样:

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

【讨论】:

以上是关于使用 Gmail API 发送大附件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Gmail API 发送大型附件时出现错误 10053

使用 Gmail API 发送的邮件中缺少附件,但仅适用于收件人

通过 Gmail API 发送 Excel 文件,但附件已损坏

在 Javascript 中使用 GMAIL API 发送带有附件文件(超过 10 MB)的电子邮件

使用 Gmail 新 API 发送带有附件的邮件,但不会显示在收件人的收件箱中

GMAIL API 在 C# 中发送带附件的电子邮件