【问题标题】:Decode email body in php gmail api?在php gmail api中解码电子邮件正文?
【发布时间】:2017-10-28 08:06:48
【问题描述】:

我正在尝试使用 Gmail API 阅读电子邮件正文

我使用的是 IMAP,但出于性能原因(在 IMAP 中阅读电子邮件需要花费大量时间),我必须迁移到更快的 Gmail API。

问题是我试图解码 Body,IMAP 很简单,只需从 imap_fetchstructure 返回中读取传输编码并使用适当的函数进行解码。 (imap_qprint、imap_7bit 等)

对于 Gmail

        $message = $service->users_messages->get($user, $msg->id, ["format"=>"full"]);

        $payload = $message->getPayload();
        $mime = $payload->getMimeType();
        $body = $payload->getBody();
        $headers = $payload->getHeaders();
        $content = $body->getData();
        $decoded = base64_decode($content);

变量 $contents 是 base64 中的正文,但如果我解码包含奇怪的字符,例如 IMAP 中没有发生的 ��ѽ����。 内容是纯文本 UTF-8,没有额外的部分或附件,只是纯文本。它也发生在 HTML 中。

这些是相关的标题

     [{"name":"MIME-Version","value":"1.0"},
{"name":"Content-Type","value":"text\/plain; charset=utf-8"},
{"name":"Content-Transfer-Encoding","value":"quoted-printable"}]

我认为问题在于正文是可引用打印的,但即使我在解码的 base64 上使用 imap_qprint 或quoted_printable_decode,这些奇怪的字符也会继续。

【问题讨论】:

标签: php gmail-api


【解决方案1】:

我也遇到了同样的问题...Felipe Morales 找到了解决方案...但更明确一点:

从 API 响应中获取 base64-url 编码的字符串,并通过这个函数运行它:

function gmailBodyDecode($data) {
    $data = base64_decode(str_replace(array('-', '_'), array('+', '/'), $data)); 
    //from php.net/manual/es/function.base64-decode.php#118244

    $data = imap_qprint($data);
    return($data);
} 

像冠军一样工作......

【讨论】:

  • 效果很好!一条评论,“impa_qprint”函数可以替换为php基线函数“quoted_printable_decode”。
猜你喜欢
  • 2018-07-28
  • 2015-09-25
  • 2014-05-15
  • 2018-03-03
  • 2021-06-03
  • 2015-06-15
  • 2017-03-07
  • 2014-10-30
  • 2015-12-15
相关资源
最近更新 更多