Je gère une mailing-list de Free (http://ml.free.fr/) attachée à un site et
j'aimerais pouvoir récupérer les messages afin de les archiver sur le site.
Quelqu'un a-t-il une idée sur comment je pourrai procéder ? Existe-t-il un
script php tout prêt pour effectuer cette opération ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
P'tit Marcel
Zinzin wrote:
Je gère une mailing-list de Free (http://ml.free.fr/) attachée à un site et j'aimerais pouvoir récupérer les messages afin de les archiver sur le site. Quelqu'un a-t-il une idée sur comment je pourrai procéder ? Existe-t-il un script php tout prêt pour effectuer cette opération ?
Il suffit d'ajouter comme destinataire de la ML une adresse courriel dédiée pour ce script php.
Le script se contentera de lire les messages en attente et de les stocker au format que tu souhaite (base de données, fichier, etc.)
Il existe des classes toutes prêtes (je crois que la FAQ du forum en cite) mais vu la simplicité de la question, il est plus rapide et plus formateur de le développer de A à Z.
voici un script fait à la mite et au couteau que j'ai développé il y a un temps certain mais qui marche encore :
$fp = fsockopen($serveur_pop, 110, $errno, $errmes, 30) or die("erreur fsockopen: $errno $errmes"); $ret= fgets($fp,1024); list($code,$reste)=explode(' ',$ret); if(($code=='+OK') and (ereg('(<[^@]+@[^>]+>)',$reste,$reg))) { # authentification protocole APOP si dispo $ctrl=md5($reg[1].$password); list($code,$reste)=dialogue_serv("APOP $user $ctrl"," "); if ($code!='+OK') { # ok $foo=dialogue_serv("quit",""); # sortie fclose($fp); die("** connexion impossible par APOP à $serveur : mot de passe erroné? ($code $reste)"); } } else { # authentification classique POP list($code,$reste)=dialogue_serv("user $user"," "); if ($code=='+OK') { list($code,$reste)=dialogue_serv("pass $password"," "); if ($code!='+OK') { # ok fclose($fp); # 'quit' inutile car on s'est fait virer die("** connexion impossible à $serveur : mot de passe erroné? ($code $reste)"); } } else { $foo=dialogue_serv("quit",""); # sortie fclose($fp); die("** connexion impossible à $serveur : réponse initiale ($code $reste)"); } } # fin de test APOP
# liste des messages en attente $mes=array(); $foo=dialogue_serv("list",""); # on suppose ici que la 1ère ligne est (+OK) list($cle,$valeur)=dialogue_serv('',' '); while($cle != ".rn") { $mes[]=$cle; # tableau des n° de messages à récupérer list($cle,$valeur)=dialogue_serv('',' '); }
# lecture de chaque message foreach($mes as $i) { list($code,$reste)=dialogue_serv("retr $i "," "); # le message entier if($code <> '+OK') { # ok echo "message $i non récupéré ($code $reste)<br>n"; continue; # de foreach } list($cle,$valeur)=dialogue_serv('','');
#boucle de lecture du contenu du message while($cle != ".rn") { .... lire et stocker éventuellement l'entête .... lire et stocker le corps du message list($cle,$valeur)=dialogue_serv('',''); } # fin de la boucle de lecture du message $i
# demande de suppression du message list($code,$reste)=dialogue_serv("dele $i"," "); if($code <> '+OK') echo "erreur à la suppression du message $i ($code $reste)<br>n"; } # fin de boucle de lecture des messages en attente
# fermeture du socket et confirmation des suppressions list($code,$reste)=dialogue_serv("quit"," "); fclose($fp);
# traite chaque question/réponse avec le serveur de mail function dialogue_serv($commande,$sep) { global $fp; if ($commande<>'') { fputs($fp,$commande."rn"); } $buf=fgets($fp,1024); if ($sep<>'') { $buf=explode($sep, $buf, 2); if (sizeof($buf)==1) { $code=$buf[0]; $reste=""; } else list($code,$reste)=$buf; return array($code,$reste); } else return $buf; }
Zinzin wrote:
Je gère une mailing-list de Free (http://ml.free.fr/) attachée à un site et
j'aimerais pouvoir récupérer les messages afin de les archiver sur le site.
Quelqu'un a-t-il une idée sur comment je pourrai procéder ? Existe-t-il un
script php tout prêt pour effectuer cette opération ?
Il suffit d'ajouter comme destinataire de la ML une adresse courriel
dédiée pour ce script php.
Le script se contentera de lire les messages en attente et de les
stocker au format que tu souhaite (base de données, fichier, etc.)
Il existe des classes toutes prêtes (je crois que la FAQ du forum en
cite) mais vu la simplicité de la question, il est plus rapide et plus
formateur de le développer de A à Z.
voici un script fait à la mite et au couteau que j'ai développé il y a
un temps certain mais qui marche encore :
$fp = fsockopen($serveur_pop, 110, $errno, $errmes, 30)
or die("erreur fsockopen: $errno $errmes");
$ret= fgets($fp,1024);
list($code,$reste)=explode(' ',$ret);
if(($code=='+OK') and (ereg('(<[^@]+@[^>]+>)',$reste,$reg))) {
# authentification protocole APOP si dispo
$ctrl=md5($reg[1].$password);
list($code,$reste)=dialogue_serv("APOP $user $ctrl"," ");
if ($code!='+OK') { # ok
$foo=dialogue_serv("quit",""); # sortie
fclose($fp);
die("** connexion impossible par APOP à $serveur : mot de passe
erroné? ($code $reste)");
}
}
else { # authentification classique POP
list($code,$reste)=dialogue_serv("user $user"," ");
if ($code=='+OK') {
list($code,$reste)=dialogue_serv("pass $password"," ");
if ($code!='+OK') { # ok
fclose($fp); # 'quit' inutile car on s'est fait virer
die("** connexion impossible à $serveur : mot de passe erroné?
($code $reste)");
}
}
else {
$foo=dialogue_serv("quit",""); # sortie
fclose($fp);
die("** connexion impossible à $serveur : réponse initiale ($code
$reste)");
}
} # fin de test APOP
# liste des messages en attente
$mes=array();
$foo=dialogue_serv("list",""); # on suppose ici que la 1ère ligne est (+OK)
list($cle,$valeur)=dialogue_serv('',' ');
while($cle != ".rn") {
$mes[]=$cle; # tableau des n° de messages à récupérer
list($cle,$valeur)=dialogue_serv('',' ');
}
# lecture de chaque message
foreach($mes as $i) {
list($code,$reste)=dialogue_serv("retr $i "," "); # le message entier
if($code <> '+OK') { # ok
echo "message $i non récupéré ($code $reste)<br>n";
continue; # de foreach
}
list($cle,$valeur)=dialogue_serv('','');
#boucle de lecture du contenu du message
while($cle != ".rn") {
.... lire et stocker éventuellement l'entête
.... lire et stocker le corps du message
list($cle,$valeur)=dialogue_serv('','');
} # fin de la boucle de lecture du message $i
# demande de suppression du message
list($code,$reste)=dialogue_serv("dele $i"," ");
if($code <> '+OK')
echo "erreur à la suppression du message $i ($code $reste)<br>n";
} # fin de boucle de lecture des messages en attente
# fermeture du socket et confirmation des suppressions
list($code,$reste)=dialogue_serv("quit"," ");
fclose($fp);
# traite chaque question/réponse avec le serveur de mail
function dialogue_serv($commande,$sep) {
global $fp;
if ($commande<>'') {
fputs($fp,$commande."rn");
}
$buf=fgets($fp,1024);
if ($sep<>'') {
$buf=explode($sep, $buf, 2);
if (sizeof($buf)==1) {
$code=$buf[0];
$reste="";
}
else list($code,$reste)=$buf;
return array($code,$reste);
}
else return $buf;
}
Je gère une mailing-list de Free (http://ml.free.fr/) attachée à un site et j'aimerais pouvoir récupérer les messages afin de les archiver sur le site. Quelqu'un a-t-il une idée sur comment je pourrai procéder ? Existe-t-il un script php tout prêt pour effectuer cette opération ?
Il suffit d'ajouter comme destinataire de la ML une adresse courriel dédiée pour ce script php.
Le script se contentera de lire les messages en attente et de les stocker au format que tu souhaite (base de données, fichier, etc.)
Il existe des classes toutes prêtes (je crois que la FAQ du forum en cite) mais vu la simplicité de la question, il est plus rapide et plus formateur de le développer de A à Z.
voici un script fait à la mite et au couteau que j'ai développé il y a un temps certain mais qui marche encore :
$fp = fsockopen($serveur_pop, 110, $errno, $errmes, 30) or die("erreur fsockopen: $errno $errmes"); $ret= fgets($fp,1024); list($code,$reste)=explode(' ',$ret); if(($code=='+OK') and (ereg('(<[^@]+@[^>]+>)',$reste,$reg))) { # authentification protocole APOP si dispo $ctrl=md5($reg[1].$password); list($code,$reste)=dialogue_serv("APOP $user $ctrl"," "); if ($code!='+OK') { # ok $foo=dialogue_serv("quit",""); # sortie fclose($fp); die("** connexion impossible par APOP à $serveur : mot de passe erroné? ($code $reste)"); } } else { # authentification classique POP list($code,$reste)=dialogue_serv("user $user"," "); if ($code=='+OK') { list($code,$reste)=dialogue_serv("pass $password"," "); if ($code!='+OK') { # ok fclose($fp); # 'quit' inutile car on s'est fait virer die("** connexion impossible à $serveur : mot de passe erroné? ($code $reste)"); } } else { $foo=dialogue_serv("quit",""); # sortie fclose($fp); die("** connexion impossible à $serveur : réponse initiale ($code $reste)"); } } # fin de test APOP
# liste des messages en attente $mes=array(); $foo=dialogue_serv("list",""); # on suppose ici que la 1ère ligne est (+OK) list($cle,$valeur)=dialogue_serv('',' '); while($cle != ".rn") { $mes[]=$cle; # tableau des n° de messages à récupérer list($cle,$valeur)=dialogue_serv('',' '); }
# lecture de chaque message foreach($mes as $i) { list($code,$reste)=dialogue_serv("retr $i "," "); # le message entier if($code <> '+OK') { # ok echo "message $i non récupéré ($code $reste)<br>n"; continue; # de foreach } list($cle,$valeur)=dialogue_serv('','');
#boucle de lecture du contenu du message while($cle != ".rn") { .... lire et stocker éventuellement l'entête .... lire et stocker le corps du message list($cle,$valeur)=dialogue_serv('',''); } # fin de la boucle de lecture du message $i
# demande de suppression du message list($code,$reste)=dialogue_serv("dele $i"," "); if($code <> '+OK') echo "erreur à la suppression du message $i ($code $reste)<br>n"; } # fin de boucle de lecture des messages en attente
# fermeture du socket et confirmation des suppressions list($code,$reste)=dialogue_serv("quit"," "); fclose($fp);
# traite chaque question/réponse avec le serveur de mail function dialogue_serv($commande,$sep) { global $fp; if ($commande<>'') { fputs($fp,$commande."rn"); } $buf=fgets($fp,1024); if ($sep<>'') { $buf=explode($sep, $buf, 2); if (sizeof($buf)==1) { $code=$buf[0]; $reste=""; } else list($code,$reste)=$buf; return array($code,$reste); } else return $buf; }