Pop2rss: creation d'un fil rss depuis une liste de mails pop

Soyez le premier à donner votre avis sur cette source.

Vue 7 538 fois - Téléchargée 436 fois

Description

Cela peut servir à pouvoir consulter de temps en temps ses emails en attente d'un simple clic dans le navigateur.

Source / Exemple :


<?php /*** Créer un fil RSS depuis un compte POP par g0g0 ***/ 
?><rss version="2.0">
<channel>
<title>Mails en attente</title>
<link>http://webmail.free.fr/</link>
<description>Mails en attente</description>
<webMaster>g0g0pubs@free.fr</webMaster>
<language>fr</language>
<lastBuildDate>Thu, 18 Jan 2007 16:28:18 GMT</lastBuildDate>
<ttl>30</ttl>

<image>
<title>www.monsiteweb.com</title>
<url>http://abner.wordpress.com/files/2006/08/WindowsLiveWriter/ManualdePHP_7610/php%5B5%5D.gif</url>
<link>http://webmail.free.fr/</link>
<width>120</width>
<height>48</height>
</image>

<?php

define("read_each_mail",false); // Lecture ou pas des informations de l'entête

// ********************************************************************************
// ********************************************************************************
// ********************************************************************************
//	This is the only lines you need to modify.
//	Ce sont les seules lignes que vous avez à modifier.
//
//     Il est possible de mettre 1 seul compte comme 30... pas de différence
//	You can type as well as 1 account as well as 30, no difference	
//
lire_mails("pop.magic.fr","moncompte","monpassword","moncompte@magic.fr");
lire_mails("pop.free.fr","moncompte","monpassword","moncompte@free.fr");
lire_mails("pop.orange.fr","moncompte","monpassword","moncompte@orange.fr");
// ********************************************************************************
// ********************************************************************************
// ********************************************************************************

// *** Ecrire un buffer dans une socket
function s_write($socket,$buff)
{
	if(socket_write($socket,$buff)==FALSE) return(false);
	// *** En principe il faudrait tester le nombre d'octets envoyés 
	return(true);
}

// *** Lire une ligne depuis une socket
function s_read($socket)
{
	$buff="";
	$c='';
	while(ord($c)!=10)
	{
		socket_recv($socket,$c,1,0);
		$buff.=$c;
	}
	// *** suppression des retours chariots
	$buff=preg_replace("/(\r|\n)/","",$buff);
	return($buff);
}

function lire_mails($pop,$user,$pass,$email)
{

	// *** Création de la socket
	$address = gethostbyname($pop);
	$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
	if ($socket < 0) {
	   die("socket_create() a échoué : raison :  " . socket_strerror ($socket) . "\n");
	}

	// *** Connexion de la socket
	$result=socket_connect($socket,$address,110);
	if($result<0) die("Impossible de connecter la socket !");
	$mails=array();

	$ok=false;
	
	// *** Lecture du message d'accueil
	$rep=s_read($socket);
	if(substr($rep,0,3)=='+OK')
	{
		// *** Envoi du login
		if(s_write($socket,"USER $user\r\n"))
		{
			// *** Lecture du +OK
			$rep=s_read($socket);
			if(substr($rep,0,3)=='+OK')
			{
				// *** Envoi du pass
				if(s_write($socket,"PASS $pass\r\n"))
				{
					// *** Lecture du +OK
					$rep=s_read($socket);
					if(substr($rep,0,3)=='+OK')
					{
						$ok=true;
					}
				}
			}
		}
	}
	if($ok)
	{
		// *** Demande la liste des mails
		s_write($socket,"LIST\r\n");
		while($rep=s_read($socket))
		{
			if((substr($rep,0,1)=='.')&&(strlen($rep<=3))) break;
			if(substr($rep,0,3)!='+OK')
			{
				$i=strpos($rep,' ');
				if($i>0)
				{
					$idx=substr($rep,0,$i)+0;
					$mails[$idx]=array();
				}		
			}
		}
		
		// *** Lecture de chaque entête ???
		if(read_each_mail)
		{
			$line=1;
			foreach($mails as $key=>$value)
			{
				// *** Lire l'entête de chaque mail 
				s_write($socket,"TOP $key 0\r\n");	
				$buff='';
				while($rep=s_read($socket))
				{
					if((substr($rep,0,1)=='.')&&(strlen($rep<=3))) break;
									
					$buff=$rep;
					$i=strpos($buff,":");
					if($i>0)
					{
						$lkey=substr($buff,0,$i);
						$buff=substr($buff,$i+1);
						$mails[$key][$lkey]=$buff;
					}
					$buff='';	
				}
				$titre=$mails[$key]['From'];
				$titre.=': '.$mails[$key]['Subject'];
				$date=$mail[$key]['Date'];
				
				// *** Créer le XML
				
				$url="http://webmail.free.fr";
				print "<item>";
				print "<guid>$url</guid>";
				print "<title>".htmlentities($titre)."</title>";
				print "<link>$url</link>";
				print "<pubDate>$date</pubDate>";
				print "</item>";
				
				$line++;
			}
		}
	}
	s_write($socket,"QUIT\r\n");
	socket_close($socket);

	// *** Créer le XML
	if(!read_each_mail)
	{
		$url="http://webmail.free.fr";
		if($ok)
		{
			$count=count($mails);
			if($count==0)
				$titre="$email: aucun email";
			else
				$titre="$email: $count email(s)";
		}
		else
			$titre="$email: erreur de lecture";
		$date=date("Y-m-d H:i:s");
		print "<item>";
		print "<guid>$url</guid>";
		print "<title>".htmlentities($titre)."</title>";
		print "<link>$url</link>";
		print "<pubDate>$date</pubDate>";
		print "</item>";
	}
	return('');
}

?>
</channel>
</rss>

Conclusion :


Fonctionnement global:
- Avec une socket: connexion au serveur de mail POP port 110, envoi des commandes USER, PASS, LIST, QUIT
- Création en même temps de la page XML du flux RSS

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_nossoctoruss
Messages postés
126
Date d'inscription
samedi 28 novembre 2009
Statut
Membre
Dernière intervention
9 juin 2013

ca a l'air tres interessant!je vais le dl!et, o fet,mosieur "djandreass" le grand codeur(ironie)tu peut te casser si c'est pour dire des truc aussi c*n que toi!
djandreass
Messages postés
3
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
4 février 2009

de la daube
Tharkun2
Messages postés
1
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
3 janvier 2008

Ca peut-être très intéressant avec un Nabaztag !
cs_gogomanu
Messages postés
29
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
26 mars 2009

Je l'ai testé sur mon WAMP en local sur ma machine.
Il faut en effet que l'hébergeur ait le module sockets activé. Je n'ai pas testé sur Free mais compte tenu du fait que Free bloque le SMTP (l'envoi de mails) et que l'on peut facilement faire un SMTP avec les sockets, il parait très probable que les sockets ne soient pas activés chez eux. A vérifier avec un phpinfo().
Ce source est surtout intéressant pour le principe je pense car concrétement l'intérêt est relativement limité.
mentalosound
Messages postés
1
Date d'inscription
dimanche 19 février 2006
Statut
Membre
Dernière intervention
31 janvier 2007

apparament probleme, ce script tu as testé de l'heberger sur free par hasard ?
je n'ai pas de firewall et ça me retourne permission refusée ...

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.