在php gmail api中解码邮件正文?

时间:2017-05-27 15:02:05

标签: php gmail-api

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

我正在使用IMAP但出于性能原因(阅读电子邮件需要花费大量时间在IMAP上)我必须转移到Gmail API,这要快得多。

问题在于我正在尝试解码Body,IMAP很简单,只需从im​​ap_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中的主体但是如果我解码包含像IM这样没有发生的奇怪字符。 内容是纯文本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这些奇怪的字符也会继续。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题...费利佩•莫拉莱斯(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);
} 

像冠军一样工作...