begin process at 2008 07 21 02:26:29
1 213 551 membres
20 nouveaux aujourd'hui
14 167 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

POP2RSS: CREATION D'UN FIL RSS DEPUIS UNE LISTE DE MAILS POP


Information sur la source

Description

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

Source

  • <?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>
<?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
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de ben05 le 22/01/2007 17:01:47

    Salut,

    Je n'ai pas encore eu le temps de tester ta source, mais elle me semble très intéressante...

    Bonne continuation.

  • signaler à un administrateur
    Commentaire de mentalosound le 31/01/2007 00:43:27

    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 ...

  • signaler à un administrateur
    Commentaire de gogomanu le 31/01/2007 00:56:26

    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é.

  • signaler à un administrateur
    Commentaire de Tharkun2 le 03/01/2008 22:52:40

    Ca peut-être très intéressant avec un Nabaztag !

Ajouter un commentaire

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS