You can get access token & other details to perform this action:
http://pritomkumar.blogspot.com/2016/11/using-oauth-20-for-google-client-side.html
http://pritomkumar.blogspot.com/2016/11/using-oauth-20-for-google-client-side.html
Code snippet to read email & attachments from google using oauth
<?php session_start(); init(); if(isset($_GET["email_id"])) { email_details(); } else if(isset($_GET["email_attachment"])) { email_attachment(); } else { list_email(); } function init() { $_SESSION["google_user_id"] = "11822454346345607576118"; $_SESSION["access_token"] = "ya29.CjCgA8bf_BCrsdfsdfsdfsdf5orH3cvbMMzQY0RX8NUrbgpNhm9oXHyAAZ0WF3Jid4WwQ"; /* Permissions to read email */ $_SESSION["scope"] = "https://www.googleapis.com/auth/userinfo.profile"; /* User profile */ $_SESSION["scope"] .= " https://www.googleapis.com/auth/gmail.readonly"; /* Read mail */ } function email_attachment() { $id = $_GET["email_attachment"]; $name = $_GET["name"]; if (!file_exists("attachments")) { mkdir("attachments"); } $apiUrl = "https://www.googleapis.com/gmail/v1/users/".$_SESSION["google_user_id"]; $apiUrl .= "/messages/$id/attachments/".$id; $apiUrl .= "?access_token=".$_SESSION["access_token"]; $remoteFile = decode_content(json_decode(make_request($apiUrl))->data); $file = "attachments/".md5(time()).$name; file_put_contents($file, $remoteFile); header("Location: $file"); exit; } function email_details() { $id = $_GET["email_id"]; $raw = "";// "format=raw&"; $fields = "";// "fields=raw&"; $apiUrl = "https://www.googleapis.com/gmail/v1/users/"; $apiUrl .= $_SESSION["google_user_id"]."/messages/$id?$raw$fields"; $apiUrl .= "access_token=".$_SESSION["access_token"]; //echo $apiUrl; die(); $result = json_decode(make_request($apiUrl)); //file_put_contents("raw-email.txt", $result->raw); die(); //echo "<pre>"; print_r($result); echo "</pre>"; die(); $message = parse_email($result->payload->parts); $link = ""; $html = ""; foreach($message as $msg) { if($msg["type"] == "html") { $html = $msg["body"]; } else if($msg["type"] == "text") { //you can do anything with text part of email } else { $link .= "<a href='?email_attachment=".$msg["body"]."&name=".$msg["name"]."' target='_blank'>".$msg["name"]."</a><br/>"; } } echo "<h3><i>Email Attachments:</i></h3>".$link."<h3><i>Email Body:</i></h3>".trim($html); } function parse_email($email) { $result = array(); for($i = 0; $i < count($email); $i++) { $part = $email[$i]; $mime = $part->mimeType; $name = $part->filename; if(strlen($name) > 0) { $file = array(); $file["type"] = $mime; $file["name"] = $name; $file["body"] = $part->body->attachmentId; array_push($result, $file); } else if($mime === "text/plain") { $file = array(); $file["type"] = "text"; $file["name"] = "email_body_plain.html"; $file["body"] = decode_content($part->body->data); array_push($result, $file); } else if($mime === "text/html") { $file = array(); $file["type"] = "html"; $file["name"] = "email_body_html.html"; $file["body"] = decode_content($part->body->data); array_push($result, $file); } else if(substr($mime, 0, 9) === "multipart") { foreach(parse_email($part->parts) as $file) { array_push($result, $file); } } } return $result; } function decode_content($content) { return base64_decode(str_replace("-", "+", str_replace("_", "/", $content))); } function list_email() { //gmail api ref page: https://developers.google.com/gmail/api/v1/reference/ //https://developers.google.com/gmail/api/v1/reference/users/messages/list //Searching filtering gmail over oauth2 api using php //https://developers.google.com/gmail/api/guides/filtering //https://support.google.com/mail/answer/7190?hl=en $search = "from:pritom@xxx.com OR from:pritomkucse@gmail.com"; //Search by from address $search = "subject:Fwd:"; //Words in the subject line $search = "label:sent OR label:starred"; //With certain labels $search = "has:attachment"; //Any email with attachments $search = "is:important"; //Important mails only $search = "is:read"; //For mails those are read already $search = "is:unread"; //For mails those are not read yet $search = "cc:pritomkucse@gmail.com"; //Emails has specific cc, bcc not allowed $search = "after:2016/11/19 AND label:inbox"; //Emails reached inbox after specific date $search = "before:2016/04/19 AND label:inbox"; //Emails reached inbox before specific date $search = "has:nouserlabels"; //Emails with no labels $search = "deliveredto:pritom@xxx.com"; //Emails delivered to some address $search = "size:10000"; //Email larger than bytes $search = "larger:15M"; //Emails larger than megabytes $search = "smaller:1M"; //Emails smaller than megabytes $search = "newer_than:1d"; //Emails newer than 1 day (d/m/y) $search = "older_than:20d"; //Emails older than 1 day (d/m/y) $search = "category:updates"; //Emails in specific category $search = "rfc822msgid:2021140448.450273.1479617087520.JavaMail.zimbra@bitmascot.com"; //Specific message by Message-ID $search = "!from:@gmail.com"; //Search by not from domain $search = "!from:pritomkucse@google.com"; //Search by not from address $search = ""; //No filtering $maxResults = 10; $apiUrl = "https://www.googleapis.com/gmail/v1/users/".$_SESSION["google_user_id"]."/messages?"; $apiUrl .= "access_token=".$_SESSION["access_token"]; $apiUrl .= "&maxResults=".$maxResults; if(strlen($search) > 0) { $apiUrl .= "&q=" . urlencode($search); } if(isset($_GET["next_page"]) && strlen($_GET["next_page"]) > 0) { $apiUrl .= "&pageToken=". $_GET["next_page"]; } $result = json_decode(make_request($apiUrl)); //echo "<pre>";print_r($result);echo "</pre>";die(); if(isset($result->messages)) { foreach($result->messages as $m) { $link = "<a target='_blank' href='?email_id=".$m->id."'>View Message [[".$m->id . "]]</a><br/>"; echo $link; } } else { echo "<pre>"; print_r($result); echo "</pre>"; die(); } if(isset($result->nextPageToken)) { echo "<a href='?email=true&next_page=".$result->nextPageToken."'>Next_Page</a>"; } } function make_request($url, $post = null, $headers = null, $returnArray = false) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, $post == null ? 0 : 1); if($post != null) { curl_setopt($curl, CURLOPT_POSTFIELDS, $post); } curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSLVERSION, 1); if($headers != null) { curl_setopt($curl, CURLOPT_HEADER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); } $response = curl_exec($curl); $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE); curl_close($curl); if($http_code >= 400) { echo "Error executing request to Office365 api with error code=$http_code<br/><br/>\n\n"; echo "<pre>"; print_r($response); echo "</pre>"; die(); } if($returnArray) { return array( "response" => $response, "header_size" => $header_size ); } return $response; } ?>