Selco Cod
Selco Cod

Yazılım ve güvenlik üzerine makaleler yazan günümüz teknolojisini yakından takip eden sıradan birisi...

Twitter


PHP ile gMail Okunmamış Mail İşlemleri

Bir projem icin gerekliydi. IMAP ile almaya calistim önce fakat o islemleri yapmak biraz zahmetliydi. Sonra Google API arastirirken gMail icin XML seklinde sirf bunun icin bir servisini oldugunu ögrendim. Kullanimi ise de cok basitti, php fonksiyon yazmadan önce curl ile test ettim.
curl "https://username:[email protected]/mail/feed/atom/"
Bu sekil de inbox icindeki okunmamis maillere xml(atom) formatinda ulasmak mümkün. Bu bizi pek alakadar etmiyor cünkü bir daha iyi olan php ile yapacagiz bunu simdi fonksiyonumuza bakalim.
<?php
/*
    Selcuk Celik
    [email protected]
    selcuk.in
*/

function gMailKontrol($mail, $sifre)
{
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, 'https://mail.google.com/mail/feed/atom/');
    curl_setopt($c, CURLOPT_USERPWD, "$mail:$sifre");
    curl_setopt($c, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE);
    $contents = curl_exec($c);

    $err  = curl_getinfo($c, CURLINFO_HTTP_CODE);
    curl_close($c);

    if ($contents) return $contents;
    else return $err;

}
?>
Bu fonksiyon ile xml formatinda inboxdaki okunmamis mailleri alabiliriz. Ben daha anlasilir olsun diye ufak bir örnek hazirladim.
<?php
/*
    Selcuk Celik
    [email protected]
    selcuk.in
*/
function gMailKontrol($mail, $sifre)
{
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, 'https://mail.google.com/mail/feed/atom/');
    curl_setopt($c, CURLOPT_USERPWD, "$mail:$sifre");
    curl_setopt($c, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE);
    $contents = curl_exec($c);

    $err  = curl_getinfo($c, CURLINFO_HTTP_CODE);
    curl_close($c);

    if ($contents) return $contents;
    else return $err;

}

$gMailePosta = '[email protected]';
$gMailSifre = 'xxxxxxx';

$xmlIcerik = gMailKontrol($gMailePosta, $gMailSifre);
$gmailXML = new SimpleXMLElement( $xmlIcerik );
# print_r($gmailXML); Obj formatinda tüm parametre degerlerini görebilirsiniz.
echo ( $gmailXML->fullcount > 0 ) ?  $gmailXML->fullcount." adet okunmamis e-posta bulunmaktadir." : "Baglanti Hatasi: ".$xmlIcerik;
?>
Unutmadan ufak bir ipucu da vermek istiyorum. Eger istersek sadece inbox degil, tüm klasorler de okunmamis mailleri cekebilir yada belirli bir klasorun icinde okunmamis mailleri cekebiliriz. Bunun örnegini icinde asagida verilen kod parcasinda görebilirsiniz.
https://mail.google.com/mail/feed/atom/
Sadece INBOX klasorunde ki okunmamis mailleri ceker.

https://mail.google.com/mail/feed/atom/unread#all
Bütün klasorlerdeki okunmamis mailleri ceker.

https://mail.google.com/mail/feed/atom/spam
Sadece SPAM klasorundeki okunmamis mailler kismini alir.
Hangi klasoru xml formatinda görmek istiyorsaniz cURL islemlerindeki URL kismini tirnaklarin icinde kalacak sekilde url yi öyle degistirebilirsiniz. Gerekli kisimlari da yazdim, herhangi bir sorun olursa cekinmeden yorum olarak sorabilirsiniz.


Yazı Hakkında Yorumlar