Nouveaux messages sur yahoo mail

Soyez le premier à donner votre avis sur cette source.

Snippet vu 22 333 fois - Téléchargée 27 fois

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

Ajouter un commentaire

Commentaires

lhyounes88
Messages postés
2
Date d'inscription
mardi 15 mai 2012
Statut
Membre
Dernière intervention
15 mai 2012
-
merci
WhiteDwarf
Messages postés
510
Date d'inscription
samedi 29 décembre 2001
Statut
Membre
Dernière intervention
23 mai 2008
-
Ok merci :)
malik7934
Messages postés
1162
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
2 -
T'as lu mon commentaire du 02/09/2005 à 11:55:46 ??? Tu ne peux pas (plus) utiliser cette source telle quelle. Il faut que tu utilises un soft pour observer les headers, tel que HTTPWatch, et que tu adaptes la source en fonction.
WhiteDwarf
Messages postés
510
Date d'inscription
samedi 29 décembre 2001
Statut
Membre
Dernière intervention
23 mai 2008
-
:( ca ne marche pas... enfin si ca marche mais pas à fond, enrésultat ca me donne :

vous avez message non lu

et y'a pas le nombre, si quelqu'un à la solution, merci...

++
Evangun
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5 -
Bonjour bonjour! mais alors ça veut dire que par cette méthode il y a moyen de faire tout ce que font les fonctions imap sans les fonctions imap? oui parce que j'ai essayé depuis Free et ça voulait pas, pas possible de se connecter à Yahoo...

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.