php - 无法打开从 Gmail API 下载的附件

标签 php email-attachments gmail-api

我觉得我错过了一些愚蠢的东西......

我正在使用适用于新 Gmail API 的 PHP SDK 从电子邮件中获取附件。我可以获取附件内容,但除非是文本文件,否则保存后无法打开文件。如果附件是 PDF,则不会呈现。如果是 excel 文件,则无法打开。

我做错了什么?

// this works; I get the attachment body, etc
$data = $g->gmail->users_messages_attachments->get($email_account, $email_message_id, $p->getBody()->getAttachmentId());

$fh = fopen(DOC_ROOT."/file.pdf", "w+");
fwrite($fh, base64_decode($data->data));
fclose($fh);

最佳答案

解码附件数据可能存在问题。在将附件数据写入文件之前,尝试使用此字符串替换附件数据。

  
    $data = $g->gmail->users_messages_attachments->get($email_account, $email_message_id, $p->getBody()->getAttachmentId());

    // Converting to standard RFC 4648 base64-encoding
    // see http://en.wikipedia.org/wiki/Base64#Implementations_and_history
    <b>$data = strtr($data, array('-' => '+', '_' => '/'));</b>

    $fh = fopen(DOC_ROOT."/file.pdf", "w+");
    fwrite($fh, base64_decode($data->data));
    fclose($fh);

关于php - 无法打开从 Gmail API 下载的附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25193429/

相关文章:

php - 如何编写 PHP 按钮来从数据库中选择行并运行 python 代码

macos - 更改 php.ini 位置

c# - 发送后删除附件

javascript - 如何引用json的属性

php - pg_send_query() : Cannot set connection to blocking mode?

java - 用java发送邮件

C# 在独立应用程序的新 Outlook 邮件项中嵌入图像

python - jupyter 笔记本中的 Ipython 错误,没有堆栈跟踪

gmail-api - 关于原始查询参数的困惑

php - 循环遍历 PHP 中的字母表,将字母分组为 A-C、C-E 等范围