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;
}
?>
No comments:
Post a Comment