Tüm Mail ID lere ve Postalara Erişmek

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

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir