Nouveaux messages sur yahoo mail

Contenu du snippet

Je me suis demandé s'il y avait un moyen pour moi de créer une page perso qui me dise sur lesquels de mes comptes mail j'ai des nouveaux mails...

Cette source ici vous permet de vous connecter à Yahoo Mail sans passer par leur interface et en utilisant les fonctions CURL. Elle permet de récupérer le nombre de nouveaux mails que vous avez et ensuite, vous en fait ce que vous voulez (mettre dans un flux RSS, sur votre page perso, ...). Pour ma part, ce chiffre vient s'ajouter aux récupérations des autres comptes mails que j'ai.

Vous remarquerez la structure un peu dingue du code: c'est du au protocole de connection de yahoo. J'ai pu réaliser ce code en observant attentivement la discussion entre mon browser et yahoo mail (thanx HTTPWatch)...

Ce code ne fonctionnera pas pour un autre mail. Logique.

Source / Exemple :


<?php

/* fonction pour se connecter à son mail sur Yahoo et récupérer le nbre de msgs non lus */

function connect_to_yahoomail($login,$pwd){

///////////////////////////////////////////////////////////////////////////////////////
//
//  get_hiddeninput: permet de récupérer les valeurs des éléments input de type hidden
//
///////////////////////////////////////////////////////////////////////////////////////

function get_hiddeninput($header){

	preg_match_all("/<(input type=\"hidden\" name=\")([^(\"|>)]*)(\")?( value=\")([^(\"|>)]*)(\")?>/", $header, $match);
	return $match[5];
}

///////////////////////////////////////////////////////////////////////////////////////
//
//  get_cookies: permet de récupérer les cookies d'un header
//
///////////////////////////////////////////////////////////////////////////////////////

function get_cookies($header){

    	preg_match_all("!Set-Cookie: ([^;\s]+)($|;)!", $header, $match);

    	$cookie = '';
    	foreach ($match[1] as $val) {
        	if ($val{0} == '=') {
            		continue;
        	}
        	$cookie .= $val . ';';
    	}
    	return substr($cookie, 0, -1);
}

///////////////////////////////////////////////////////////////////////////////////////
//
//   Etape 1: on se connecte a mail.yahoo.com et on récupère les infos
//
///////////////////////////////////////////////////////////////////////////////////////

// infos fixes (jusqu'à preuve du contraire, $Y et $Q sont fixes)

$url = 'http://mail.yahoo.com';
$agt = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)';
$Y = 'Y=v=1&n=70iiku0etse8o&l=c0b8axztu/o&p=m2bvvch012000000&iz=1022&r=eq&lg=fr&intl=fr&np=1';
$Q = 'Q=q1=AACAAAAAAAAAAA--&q2=QwZEag--';

// on contact l'url en envoyant le cookie $Y et on récupère la page de réponse ($resultat)

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $agt);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_COOKIE,$Y);
$resultat = curl_exec($ch);
curl_close($ch);

$B = get_cookies($resultat); // dans la réponse, il y a le cookie 'B'

///////////////////////////////////////////////////////////////////////////////////////
//
//   Etape 2: récupération des données de la page (les hidden) et construction du post
//
///////////////////////////////////////////////////////////////////////////////////////

// La structure de données suivante est née d'une observation attentive de mail.yahoo.com :o)

$hidden = get_hiddeninput($resultat); // récupère les input de type hidden

$pwd = md5(md5($pwd).$hidden[12]); // hashage du mot de passe

$getdata  = '.tries='.$hidden[0];
$getdata .= '&.src='.$hidden[1];
$getdata .= '&.md5='.$hidden[2];
$getdata .= '&.hash='.$hidden[3];
$getdata .= '&.js='.$hidden[4];
$getdata .= '&.last='.$hidden[5];
$getdata .= '&promo='.$hidden[6];
$getdata .= '&.intl='.$hidden[7];
$getdata .= '&.bypass='.$hidden[8];
$getdata .= '&.partner='.$hidden[9];
$getdata .= '&.u='.$hidden[10];
$getdata .= '&.v='.$hidden[11];
$getdata .= '&.challenge='.$hidden[12];
$getdata .= '&.yplus='.$hidden[13];
$getdata .= '&.emailCode='.$hidden[14];
$getdata .= '&pkg='.$hidden[15];
$getdata .= '&stepid='.$hidden[16];
$getdata .= '&.ev='.$hidden[17];
$getdata .= '&hasMsgr='.$hidden[18];
$getdata .= '&.chkP='.$hidden[19];
$getdata .= '&.done='.str_replace(':','%3A',$hidden[20]);
$getdata .= '&login='.$login;
$getdata .= '&passwd='.$pwd;
$getdata .= '&.persistent=';
$getdata .= '&.hash=1';
$getdata .= '&.md5=1';

///////////////////////////////////////////////////////////////////////////////////////
//
//   Etape 3: Emploi des données pour atteindre http://login.yahoo.com/config/login
//
///////////////////////////////////////////////////////////////////////////////////////

$url = 'http://us.rd.yahoo.com/reg/login1/newym_nouc/suli/login/us/ym/*http://login.yahoo.com/config/login';

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url.'?'.$getdata);
curl_setopt($ch, CURLOPT_USERAGENT, $agt);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_COOKIE,$Y.';'.$B.';'.$Q);
$resultat = curl_exec($ch);
curl_close($ch);

///////////////////////////////////////////////////////////////////////////////////////
//
//   Etape 4: Traitement des données recues et renvoi
//
///////////////////////////////////////////////////////////////////////////////////////

$getdata  = '.tries='.$hidden[0];
$getdata .= '&.src='.$hidden[1];
$getdata .= '&.md5='.$hidden[2];
$getdata .= '&.hash='.$hidden[3];
$getdata .= '&.js=1';
$getdata .= '&.last='.$hidden[5];
$getdata .= '&promo='.$hidden[6];
$getdata .= '&.intl='.$hidden[7];
$getdata .= '&.bypass='.$hidden[8];
$getdata .= '&.partner='.$hidden[9];
$getdata .= '&.u='.$hidden[10];
$getdata .= '&.v='.$hidden[11];
$getdata .= '&.challenge='.$hidden[12];
$getdata .= '&.yplus='.$hidden[13];
$getdata .= '&.emailCode='.$hidden[14];
$getdata .= '&pkg='.$hidden[15];
$getdata .= '&stepid='.$hidden[16];
$getdata .= '&.ev='.$hidden[17];
$getdata .= '&hasMsgr=1';
$getdata .= '&.chkP='.$hidden[19];
$getdata .= '&.done='.str_replace(':','%3A',$hidden[20]);
$getdata .= '&login='.$login;
$getdata .= '&passwd='.$pwd;
$getdata .= '&.persistent=';
$getdata .= '&.hash=1';
$getdata .= '&.md5=1';

$url = 'http://login.yahoo.com/config/login';

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url.'?'.$getdata);
curl_setopt($ch, CURLOPT_USERAGENT, $agt);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_COOKIE,$Y.';'.$B.';'.$Q);
$resultat = curl_exec($ch);
curl_close($ch);

///////////////////////////////////////////////////////////////////////////////////////
//
//   Etape 5: Traitement des données recues et renvoi
//
///////////////////////////////////////////////////////////////////////////////////////

$cookie = get_cookies($resultat);
$cookies = split(";",$cookie);
$F = $cookies[0];
$Y = $cookies[1];
$T = $cookies[2];
$C = $cookies[3];

preg_match_all("!Location: (.*)!", $resultat, $url);
$url = $url[1][0]; // récupération de l'url dans le header

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $agt);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_COOKIE,$Y.';'.$B.';'.$Q.';'.$F.';'.$T.';'.$C);
$resultat = curl_exec($ch);
curl_close($ch);

///////////////////////////////////////////////////////////////////////////////////////
//
//   Etape 6: Traitement des données recues et renvoi (et voui, c'est répétitif!)
//
///////////////////////////////////////////////////////////////////////////////////////

preg_match_all("!Location: (.*)!", $resultat, $url);
$url = $url[1][0];

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $agt);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_COOKIE,$Y.';'.$B.';'.$Q.';'.$F.';'.$T.';'.$C);
$resultat = curl_exec($ch);
curl_close($ch);

///////////////////////////////////////////////////////////////////////////////////////
//
//   Etape 7: On est entré, reste à récupérer le nombre de messages non lus
//
///////////////////////////////////////////////////////////////////////////////////////

// ici, on pourrait s'amuser à faire autre chose, mais tout ce qui m'intéresse,
// c'est le nombre de messages

$rep = strstr($resultat, 'ception (');	// j'évite les accents comme ça :)
$tmp = strstr($resultat, 'ception (');	// je parse un peu à la sauvage...
$tmp = strstr($tmp, ')');		// (c'est pas trop ma spécialité)
$rep = str_replace($tmp,"", $rep);
$rep = substr($rep,9);

if ($rep <= 1) $msg = 'vous avez '.$rep.' message non lu';
if ($rep  > 1) $msg = ' vous avez '.$rep.' messages non lus';

return $msg;
}

/* on récupère le nombre de messages non lus */
$msg = connect_to_yahoomail('malik7934','XXXXXX');// login et password

// à partir de la, vous faites ce que vous voulez de $msg :)
?>

Conclusion :


Je ne m'amuse pas à expliquer les fonctions curl. Pour ca, y a php.net...
Voili voilà! Pas d'abus hein ;)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.