Publié le 25/01/2013
Auteur Fobec
Réseaux sociaux
0 partages
0 tweets
3 plus
3 commentaires

Lire sa boite Gmail dans un flux RSS

La messagerie Gmail, produit phrase de Google, est principalement utilisée au travers de l'interface en ligne. Récemment, nous avons vu dans un article comment charger ses emails avec le protocole Imap, le tout avec le langage PHP.
Dans l'exemple suivant, voyons comment lire sa boite Gmail dans un flux RSS. En effet, au travers d'une simple requête, Google retourne dans un flux l'état actuel de son compte messagerie.

Lire le flux Gmail avec GmailAtom

La class prend en charge la communication avec le serveur Gmail et le décodage des données réceptionnées. Cet échange est en lecture seule et retourne les propriétés suivantes:
- unreadCount: nombre total de message non lu,
- dateLastMsg: date du dernier message,
- inbox: messages non lus les plus récents.
<?php
/**
 * GMail: recevoir ses nouveaux emails dans un flux rss
 *
 * @author Fobec 01/2013
 * @copyright http://www.fobec.com/php5/1124/lire-boite-gmail-dans-flux-rss.html
 */
class GmailAtom {
 
    const URL_GMAIL = "https://mail.google.com/mail/feed/atom";
 
    private $feed='';
 
    public $unreadCount=0;
    public $dateLastMsg='';
    public $inbox=array(array('date'=>'','subject'=>'','exp_name'=>'','exp_adr'=>''));
 
    public function check($user,$pwd) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, self::URL_GMAIL);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_USERPWD, $user . ":" . $pwd);
        $this->feed= curl_exec($curl);
        $code=curl_getinfo($curl, CURLINFO_HTTP_CODE);
        curl_close($curl);
 
        if ($code==200) {
            return $this->parse();
        }
        return false;
    }
 
    private function parse() {
        $xml=@simplexml_load_string($this->feed);
 
        if (isset($xml->fullcount)) {
            $this->unreadCount=$xml->fullcount;
            $dt=str_replace(array('T','Z'),' ',$xml->modified);
            $this->dateLastMsg=date("d/m/Y H:i:s", strtotime($dt));
 
            $this->inbox=array();
            foreach($xml->entry as $row) {
                $mail=array();
                $dt=str_replace(array('T','Z'),' ',$row->modified);
                $mail['date']=date("d/m/Y H:i:s", strtotime($dt));
                $mail['subject']=utf8_decode((string)$row->title);
                $mail['exp_name']=utf8_decode((string)$row->author->name);
                $mail['exp_adr']=utf8_decode((string)$row->author->email);
                $this->inbox[]=$mail;
            }           
 
            return true;
        } else {
            return false;
        }
    }
}
?>

Cas pratique de reception d'email

L'ensemble des opérations est pris en charge par la class, il suffit de renseigner le nom d'utilisateur et son mot de passe Gmail.
<?php
$gmail=new GmailAtom();
$gmail->check('identifiant', 'motdepasse');
echo 'Total non lu: '.$gmail->unreadCount.' messages<br>';
echo 'Dernier email du: '.$gmail->dateLastMsg.'<br>';
foreach($gmail->inbox as $mail) {
    echo  $mail['date']."t".' <b>De:</b>'.$mail['exp_name'].' ('.$mail['exp_adr'].') <b>Object:</b>'.$mail['subject'].'<br>';
}
?>
La propriété $gmail->inbox est un tableau contenant la date, l'objet et l'expéditeur de chaque email. L'affichage de chaque mail est adapté en fonction du support (mobile, page web, application, ...).
Lire sa boite Gmail dans un flux est idéal pour développer une application d'alerte, en cas de réception d'un nouvel email.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.
avatar jerome

Publié par jerome

le 05/06/2014 à 14:23:32

Excellente classe, merci pour ce petit code qui va me permettre de me passer de ma page igoogle qui ferme vendredi

avatar Souti

Publié par Souti

le 12/03/2015 à 13:02:25

Merci pour ce code. Trs utile.

Pour mon cas, il a fallu que j'ajoute une } avant ?> le pour fermer le for each.

avatar Fobec

Publié par Fobec

le 12/03/2015 à 14:57:44

Merci Souti d'avoir signale la balise manquante,
le code est corrige dans l'exemple.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - class
Mise a jour
25/01/2013
Visualisation
vu 6373 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Fobec dans logiciel

prise en charge du format ipV6. L'api est compatible avec tous les ip qu'elles soient au format ipV4 ou ipV6.

Publié par olibul dans CMS

var
fn: string;

begin

Result:= False;
if strFont <> \'\' then begin

// Tester le nom: si affectation directe à TFont, modifications aléatoires

Publié par Annuaire francophone dans tuto

Bonjour, savez-vous s'il existe un logiciel de capture d'écran (ascreen) pour window. Merci

Publié par Tactic Rayan dans java

Merci beaucoup, c'est tres interressent, tres longtemps que j'ai recherche ce code

Publié par medfayz dans java

hi everybody thanks for the code , and please can any one help me to fix that exception.
javax.media.NoPlayerException: Cannot find a Player for :vfw:0

thanks