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

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

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.