我正在尝试阅读电子邮件正文使用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中的主体但是如果我解码包含像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这些奇怪的字符也会继续。
答案 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);
}
像冠军一样工作...