0

Is it possible to retrieve an message/email in html-format using Gmail API?

As of now, I can read the full email/message, but only in plain text. I would like to view it for example on a website in html format.

This is my code so far:

$gmail = new Google_Service_Gmail($client);
$userId = "myemail@gmail.com";

$list = $gmail->users_messages->listUsersMessages('me', ['maxResults' => 1000]);

while ($list->getMessages() != null) {   
    foreach ($list->getMessages() as $mlist) {               
        $message_id = $mlist->id;   
        $optParamsGet2['format'] = 'full';
        $single_message = $gmail->users_messages->get('me', $message_id, $optParamsGet2);


        $threadId = $single_message->getThreadId();
        $payload = $single_message->getPayload();
        $headers = $payload->getHeaders();
        $parts = $payload->getParts();
        $body = $parts[0]['body'];
        $rawData = $body->data;
        $sanitizedData = strtr($rawData,'-_', '+/');
        $decodedMessage = base64_decode($sanitizedData);
        print($decodedMessage);

    }

    if ($list->getNextPageToken() != null) {
        $pageToken = $list->getNextPageToken();
        $list = $gmail->users_messages->listUsersMessages('me', ['pageToken' => $pageToken, 'maxResults' => 1000]);
    } else 
    {
        break;
    }
}
Linda Lawton - DaImTo
  • 106,405
  • 32
  • 180
  • 449

1 Answers1

2

// Parts [0] - is for text/plain

$parts = $payload->getParts();
$body = $parts[0]['body'];

// Parts [1] - is for text/html

$parts = $payload->getParts();
$body = $parts[1]['body'];

Example:

public function getHTMLbody()
    {
        $parts = $this->message->getPayload()->getParts();
        if (empty($parts)) {
            $body = base64_decode(strtr($this->message->getPayload()->body->data, '-_', '+/'));
        } else {
            $body = base64_decode(strtr($parts[1]->body->data, '-_', '+/'));
        }
        return $body;
    }
Andrey
  • 345
  • 2
  • 7