2018年2月13日 星期二

Gmail API 解讀秘技

最近做多了社交數據分析,開始想試試用銷售方面的數據,正好電子郵箱有相關的材料。但是,要怎樣才能把郵件內容轉換成數據庫的東西?既然是 Gmail 郵箱,只要用 Gmail API 就能讀取。

一年多前,我試過,但失敗了。今天再接再厲,遇到同樣的問題。明明拿到了郵件內容,但是卻只能把部份資料成功解碼...。找了很久也解決不了,正想放棄的時候,發現 Google 的 Base64 編碼有點蠱惑,把加號及斜號都換成其他符號,難怪我一直無法完整解讀。以下是最重要的代碼部份:
//  Get full message body
$fullMessage = $_service->users_messages->get($userID, $messageID);
$payload = $fullMessage->getPayload();
$partArray = $payload->getParts();
foreach ($partArray as $part)  {

    //  Only need email body, don't need attachment
    $mimeType = $part->getMimeType();
    if ($mimeType != "text/html")  {continue;}

    $body = $part->getBody();
    if ($body != null)  {

        $data = $body->getData();
        if ($data != null)  {

            //  !!! This is key point, otherwise message won't decode correctly
            $sanitizedData = strtr($data, "-_", "+/");

            $html = base64_decode($sanitizedData);
            $length = strlen($html);
            if ($length > 0)  {

                file_put_contents($filename, $html);
                printf("Saved");
            }
        }
    }
}

2 則留言:

Sky Concord 提到...

請教閣下:可有提取email特定內容,自動放到google sheet的方法?

Pacess HO 提到...

Sky Concord 你好。在技術上是可行,只要調用 Google Sheets API 就可以。我自己分別試過,但就沒有將它們放在一起。