Bu makalemizde Google Gmail Apisi ile Gmail içerisinde bulunan Mail ID lerini ve Mail mesajlarını listeleyeceğiz.
Öncelikle bu apiyi kullanmamız için apiyi etkinleştirmemiz gerekiyor, OAuth 2.0 istemci kimliğine sahip olmanız ve Google Client Kütüphanelerini edinmiş olmamız gerekiyor bilgilendirme kategorisinin altındaki makalemizde Php ile OAuth 2.0 kullanma başlıklı makalemizde OAuth nasıl alındığını ve Kütüphaneleri nasıl yüklediğimiz anlatmıştık. Buraya tıklayarak Php ile OAuth 2.0 kullanımı makalesine gidebilir veya Genel Bilgilendirme kategorisine göz atabilirsiniz.
GOOGLE GMAİL APİSİNİ KULLANMAK İÇİN
- console.developers.google.com’da Projemizi oluşturduk
- Kullanacağımız apiyi etkinleştirdik
- OAuth istemci kimliğini oluşturduk ve oluşturuken sitemize gerekli izinleri verdik.
- OAuth istemci kimliğinin json dosyasını indirdik
- GitHub dan Google Client Api kütüphanesini indirdik
- Composer yardımıyla Vendor klasörümüzü de edindik
Eğer bu işlemleri yapmadıysanız Buraya Tıklayarak OAuth Makalemi inceleyiniz. Bu işlemleri yaptıksak alt yapı hazır demektir şimdi aşağıdaki dosyalarımızı oluşturalım
Gmail ID leri Listeleme
Google Apilerinden Gmail Apisini kullanarak maillerimizi listelemek istiyorsak öncelikle Gmail ID lerini bilmemiz gerekiyor. Bu durumda öncelikle gmail idlerini listeliyoruz. Daha sonra idsini bildiğimiz bir mailin kimden geldiğini tarihini mail mesajını öğrenebiliyoruz. Mail mesajını listelemeden önce Mail ID lerini listeleyelim.
- index.php
- oauth2callback.php
index.php dosyasının içerisine
<?php require_once __DIR__.'/vendor/autoload.php'; session_start(); $client = new Google_Client(); $client->setAuthConfig('jsonmail.json'); $client->addScope(Google_Service_Gmail::GMAIL_READONLY); if (isset($_SESSION['access_token']) && $_SESSION['access_token']) { $client->setAccessToken($_SESSION['access_token']); $service = new Google_Service_Gmail($client); $user = 'me'; listMessages($service,$user); } else { $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/1-proje/mail/oauth2callback.php'; header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); }
Users.messages: list Aşağıdaki fonksiyonumuz mail id lerini listeleyecek fonksiyonumuz bu fonksiyonu index.php mizin içerisine yazıyoruz. Ayrı yazmamımn sebebi fonksiyon parametrelerine biraz değinmek ve fonksiyon hakkında bir kaç açıklama yapmak istedim. Öncelikle parametrelerden başlayalım. ilk parametre olan $service değişkeni access yokeni aldıktan sonra new Google_Service_Gmail(..) diyerek ürettiğimiz değişkeni alıyor. İkinci parametre ise $userId olan parametremiz. Bu parametre adından da anlaşılacağı gibi kullanıcı id sini alıyor. Biz bu parametreye ‘me’ stringini gönderiyoruz.
function listMessages($service, $userId) { $pageToken = NULL; $messages = array(); $opt_param = array(); do { try { if ($pageToken) { $opt_param['pageToken'] = $pageToken; } $messagesResponse = $service->users_messages->listUsersMessages($userId, $opt_param); if ($messagesResponse->getMessages()) { $messages = array_merge($messages, $messagesResponse->getMessages()); $pageToken = $messagesResponse->getNextPageToken(); } } catch (Exception $e) { print 'An error occurred: ' . $e->getMessage(); } } while ($pageToken); $i =1; foreach ($messages as $message) { print $i.'- Message with ID: ' . $message->getId() . '<br/>'; $i++; } return $messages; }
Bildiğimiz gibi sıklıkla kullanılan bir mail adresinde çok fazla eposta olabiliyor bu epostalar mecburen sayfalandırılıyor. Aşağıdaki fonksiyon da kullanılan $pageToken değişkeni işte burda devreye giriyor eğer birden fazla sayfada mailleriniz mevcutsa sayfalar arası geçiş yapabilmek için pagetoken değişkenini kullanıyoruz. Sonraki sayfanın pagetokenini almak için bu fonksiyonu kullanıyoruz.
$messagesResponse->getNextPageToken();
Sayfalar arasında gezebildiğimize göre artık tüm idleri listeleyebiliriz. İD leri listelemek için ise şu fonksiyonu kullanıyoruz
$message->getId()
oauth2callback.php dosyasını içerisine şu kodları yerleştiriyoruz.
<?php require_once __DIR__.'/vendor/autoload.php'; session_start(); $client = new Google_Client(); $client->setAuthConfigFile('jsonmail.json'); $client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/1-proje/mail/oauth2callback.php'); $client->addScope(Google_Service_Gmail::GMAIL_READONLY); if (! isset($_GET['code'])) { $auth_url = $client->createAuthUrl(); header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL)); } else { $client->authenticate($_GET['code']); $_SESSION['access_token'] = $client->getAccessToken(); $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/1-proje/mail/'; header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); }
Kodları kendinize göre düzenlemeniz gerekiyor.
Json dosyasının yolunu ve yönlendirilecek url bilgilerini düzenleyip çalıştırdığımızda karşımıza şöyle bir Array çıkacak
Gmail Mesajı Listeleme
- index.php
- oauth2callback.php
Yukarıda maillerin idlerini çekmeyi zaten antmıştık, çektiğimiz mail idlerinin postalarını mesajlarını kimden geldiğini ne zaman geldiği gibi bilgileri artık çekebiliriz.
index.php dosyasının içerisine
<?php require_once __DIR__.'/vendor/autoload.php'; session_start(); $client = new Google_Client(); $client->setAuthConfig('jsonmail.json'); $client->addScope(Google_Service_Gmail::GMAIL_READONLY); if (isset($_SESSION['access_token']) && $_SESSION['access_token']) { $client->setAccessToken($_SESSION['access_token']); $service = new Google_Service_Gmail($client); // Print the labels in the user's account. $user = 'me'; $messageId = "16109b2fbab0fee6"; $message = getMessage($service,$user,$messageId); echo "<pre>"; print_r($message["snippet"]); } else { $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/1-proje/mail/oauth2callback.php'; header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); }
Users.messages: get Aşağıdaki Mesajı çekme fonksiyonu. Bu fonksiyonu da index.php dosyası içerisine yazıyoruz.
function getMessage($service, $userId, $messageId) { try { $message = $service->users_messages->get($userId, $messageId); print 'Message with ID: ' . $message->getId() . ' retrieved.'; return $message; } catch (Exception $e) { print 'An error occurred: ' . $e->getMessage(); } }
oauth2callback.php dosyasını içerisine
<?php require_once __DIR__.'/vendor/autoload.php'; session_start(); $client = new Google_Client(); $client->setAuthConfigFile('jsonmail.json'); $client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/1-proje/mail/oauth2callback.php'); $client->addScope(Google_Service_Gmail::GMAIL_READONLY); if (! isset($_GET['code'])) { $auth_url = $client->createAuthUrl(); header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL)); } else { $client->authenticate($_GET['code']); $_SESSION['access_token'] = $client->getAccessToken(); $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/1-proje/mail/'; header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); }
Kodları kendinize göre düzenlemeniz gerekiyor.
Json dosyasının yolunu ve yönlendirilecek url bilgilerini düzenleyip çalıştırdığımızda karşımıza şöyle bir mesaj çıkacak