je dois faire une petite appli en PHP qui à pour but de se connecter à
un serveur POP pour traiter des mails.
En cherchant dans la doc PHP, je ne trouve que des fonctions IMAP
(chapitre LVII. IMAP, POP3 and NNTP Functions).
Dois-je en conclure que c'est exactement pareil?
Si je me souviens bien, la différence entre l'imap et le pop c'est que
l'imap traite sur le serveur, le pop rappatrie (j'ai juste?), dois-je
aussi en conclure que PHP n'est, de manière native, pas capable de
traiter en POP et ne fait que le simuler au moyen des fonctions IMAP?
Merci bien :)
--
Aide informatique: http://help-info.forumactif.com
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.crazy-irc.net
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
salut CrazyCat,
je dois faire une petite appli en PHP qui à pour but de se connecter à un serveur POP pour traiter des mails. En cherchant dans la doc PHP, je ne trouve que des fonctions IMAP (chapitre LVII. IMAP, POP3 and NNTP Functions). Dois-je en conclure que c'est exactement pareil?
l'extension IMAP permet de se connecter en POP mais c'est assez facile de le faire toi-même avec une connexion par socket, genre :
$fp = fsockopen($serveur, $port, $errno, $errmes, 30) or die("** fsockopen: $errno $errmes"); list($code,$reste)=dialogue_serv('',' '); 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); # pas de 'quit' 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
# demande s'il y a des messages en attente list($code,$reste)=dialogue_serv("stat"," "); if ($code!='+OK') { # ok $foo=dialogue_serv("quit"); # sortie fclose($fp); die("** erreur sur la commande stat ($code $reste)"); } $nb=strtok($reste," "); if ($nb <= 0) { echo "pas de messages en attenten"; } else { $mes=$mesdel=array(); $foo=dialogue_serv("list"); # la 1ère ligne est identique à la réponse à stat donc on s'en fout list($cle,$valeur)=dialogue_serv('',' '); while($cle != ".rn") { $mes[]=$cle; # tableau des n° de messages à récupérer list($cle,$valeur)=dialogue_serv('',' '); }
# boucle de lecture de chaque mail en attente (les derniers messages d'abord) krsort($mes,SORT_NUMERIC); $mesdel=array(); # messages à supprimer foreach($mes as $i) { # Lecture message $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 (entête puis contenu) $entete=true; while($cle != ".rn") { # cle est le nom du champ d'entête (si on est dans les entêtes) # valeur est le contenu du champ d'entête # si on est passé au contenu (après la première ligne vide), # alors tout est dans la variable cle
# si on veut supprimer du serveur le message en cours $mesdel[]=$i;
if($cle=="rn") { $enteteúlse; }
# lecture de la ligne suivante du message if($entete) { list($cle,$valeur)=dialogue_serv('',':'); } else { $cle=dialogue_serv(''); }
} # fin de boucle de lecture du message i
} # fin de boucle de lecture des messages en attente
# suppression des messages de la bàl foreach($mesdel as $i) { list($code,$reste)=dialogue_serv("dele $i"," "); if($code <> '+OK') { echo "</font>** erreur à la suppression du message $i ($code $reste)<br>n"; } } } # fin du test d'existence de message email en attente dans la bàl
# fermeture du socket et confirmation list($code,$reste)=dialogue_serv("quit"," "); # sortie et confirmation des suppressions if($code <> '+OK') { echo "erreur à la fermeture de la connexion ($code $reste)"; } else { echo "Fin de connexion mailn"; } 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; }
C'est pas de la programmation super classe, mais ça marche sans souci 25 fois par jour depuis quasiment la création de ce forum...
eça -- P'tit Marcel stats sur les forums modérés http://www.centrale-lyon.org/ng/
salut CrazyCat,
je dois faire une petite appli en PHP qui à pour but de se connecter à
un serveur POP pour traiter des mails.
En cherchant dans la doc PHP, je ne trouve que des fonctions IMAP
(chapitre LVII. IMAP, POP3 and NNTP Functions).
Dois-je en conclure que c'est exactement pareil?
l'extension IMAP permet de se connecter en POP mais c'est assez facile
de le faire toi-même avec une connexion par socket, genre :
$fp = fsockopen($serveur, $port, $errno, $errmes, 30)
or die("** fsockopen: $errno $errmes");
list($code,$reste)=dialogue_serv('',' ');
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); # pas de 'quit' 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
# demande s'il y a des messages en attente
list($code,$reste)=dialogue_serv("stat"," ");
if ($code!='+OK') { # ok
$foo=dialogue_serv("quit"); # sortie
fclose($fp);
die("** erreur sur la commande stat ($code $reste)");
}
$nb=strtok($reste," ");
if ($nb <= 0) {
echo "pas de messages en attenten";
}
else {
$mes=$mesdel=array();
$foo=dialogue_serv("list"); # la 1ère ligne est identique à la
réponse à stat donc on s'en fout
list($cle,$valeur)=dialogue_serv('',' ');
while($cle != ".rn") {
$mes[]=$cle; # tableau des n° de messages à récupérer
list($cle,$valeur)=dialogue_serv('',' ');
}
# boucle de lecture de chaque mail en attente (les derniers
messages d'abord)
krsort($mes,SORT_NUMERIC);
$mesdel=array(); # messages à supprimer
foreach($mes as $i) {
# Lecture message $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 (entête puis contenu)
$entete=true;
while($cle != ".rn") {
# cle est le nom du champ d'entête (si on est dans les entêtes)
# valeur est le contenu du champ d'entête
# si on est passé au contenu (après la première ligne vide),
# alors tout est dans la variable cle
# si on veut supprimer du serveur le message en cours
$mesdel[]=$i;
if($cle=="rn") {
$enteteúlse;
}
# lecture de la ligne suivante du message
if($entete) {
list($cle,$valeur)=dialogue_serv('',':');
}
else {
$cle=dialogue_serv('');
}
} # fin de boucle de lecture du message i
} # fin de boucle de lecture des messages en attente
# suppression des messages de la bàl
foreach($mesdel as $i) {
list($code,$reste)=dialogue_serv("dele $i"," ");
if($code <> '+OK') {
echo "</font>** erreur à la suppression du message $i ($code
$reste)<br>n";
}
}
} # fin du test d'existence de message email en attente dans la bàl
# fermeture du socket et confirmation
list($code,$reste)=dialogue_serv("quit"," "); # sortie et confirmation
des suppressions
if($code <> '+OK') {
echo "erreur à la fermeture de la connexion ($code $reste)";
}
else {
echo "Fin de connexion mailn";
}
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;
}
C'est pas de la programmation super classe, mais ça marche sans souci 25
fois par jour depuis quasiment la création de ce forum...
eça
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/
je dois faire une petite appli en PHP qui à pour but de se connecter à un serveur POP pour traiter des mails. En cherchant dans la doc PHP, je ne trouve que des fonctions IMAP (chapitre LVII. IMAP, POP3 and NNTP Functions). Dois-je en conclure que c'est exactement pareil?
l'extension IMAP permet de se connecter en POP mais c'est assez facile de le faire toi-même avec une connexion par socket, genre :
$fp = fsockopen($serveur, $port, $errno, $errmes, 30) or die("** fsockopen: $errno $errmes"); list($code,$reste)=dialogue_serv('',' '); 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); # pas de 'quit' 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
# demande s'il y a des messages en attente list($code,$reste)=dialogue_serv("stat"," "); if ($code!='+OK') { # ok $foo=dialogue_serv("quit"); # sortie fclose($fp); die("** erreur sur la commande stat ($code $reste)"); } $nb=strtok($reste," "); if ($nb <= 0) { echo "pas de messages en attenten"; } else { $mes=$mesdel=array(); $foo=dialogue_serv("list"); # la 1ère ligne est identique à la réponse à stat donc on s'en fout list($cle,$valeur)=dialogue_serv('',' '); while($cle != ".rn") { $mes[]=$cle; # tableau des n° de messages à récupérer list($cle,$valeur)=dialogue_serv('',' '); }
# boucle de lecture de chaque mail en attente (les derniers messages d'abord) krsort($mes,SORT_NUMERIC); $mesdel=array(); # messages à supprimer foreach($mes as $i) { # Lecture message $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 (entête puis contenu) $entete=true; while($cle != ".rn") { # cle est le nom du champ d'entête (si on est dans les entêtes) # valeur est le contenu du champ d'entête # si on est passé au contenu (après la première ligne vide), # alors tout est dans la variable cle
# si on veut supprimer du serveur le message en cours $mesdel[]=$i;
if($cle=="rn") { $enteteúlse; }
# lecture de la ligne suivante du message if($entete) { list($cle,$valeur)=dialogue_serv('',':'); } else { $cle=dialogue_serv(''); }
} # fin de boucle de lecture du message i
} # fin de boucle de lecture des messages en attente
# suppression des messages de la bàl foreach($mesdel as $i) { list($code,$reste)=dialogue_serv("dele $i"," "); if($code <> '+OK') { echo "</font>** erreur à la suppression du message $i ($code $reste)<br>n"; } } } # fin du test d'existence de message email en attente dans la bàl
# fermeture du socket et confirmation list($code,$reste)=dialogue_serv("quit"," "); # sortie et confirmation des suppressions if($code <> '+OK') { echo "erreur à la fermeture de la connexion ($code $reste)"; } else { echo "Fin de connexion mailn"; } 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; }
C'est pas de la programmation super classe, mais ça marche sans souci 25 fois par jour depuis quasiment la création de ce forum...
eça -- P'tit Marcel stats sur les forums modérés http://www.centrale-lyon.org/ng/
CrazyCat
P'tit Marcel wrote:
En cherchant dans la doc PHP, je ne trouve que des fonctions IMAP (chapitre LVII. IMAP, POP3 and NNTP Functions). Dois-je en conclure que c'est exactement pareil? l'extension IMAP permet de se connecter en POP mais c'est assez facile
de le faire toi-même avec une connexion par socket, genre : C'est pas de la programmation super classe, mais ça marche sans souci 25 fois par jour depuis quasiment la création de ce forum...
Merci pour ce code, mais je vais m'en tenir à l'utilisation des fonctions "natives". En fait, il y a de fortes chances pour que je fonctionne en IMAP, mais ça me permet de comprendre une chose (je suis un peu nul question boites mails): POP et IMAP sont (grosso modo) les mêmes protocoles, la différence est au niveau de la gestion: POP rapatrie les mails alors que IMAP les traite sur le serveur. Donc, une configuration POP avec option "laisser les mails sur le serveur" est de l'IMAP :)
-- Aide informatique: http://help-info.forumactif.com Humour: http://www.chatfou.com Tchattez en liberté: http://www.crazy-irc.net
P'tit Marcel wrote:
En cherchant dans la doc PHP, je ne trouve que des fonctions IMAP
(chapitre LVII. IMAP, POP3 and NNTP Functions).
Dois-je en conclure que c'est exactement pareil?
l'extension IMAP permet de se connecter en POP mais c'est assez facile
de le faire toi-même avec une connexion par socket, genre :
C'est pas de la programmation super classe, mais ça marche sans souci 25
fois par jour depuis quasiment la création de ce forum...
Merci pour ce code, mais je vais m'en tenir à l'utilisation des
fonctions "natives".
En fait, il y a de fortes chances pour que je fonctionne en IMAP, mais
ça me permet de comprendre une chose (je suis un peu nul question boites
mails): POP et IMAP sont (grosso modo) les mêmes protocoles, la
différence est au niveau de la gestion:
POP rapatrie les mails alors que IMAP les traite sur le serveur.
Donc, une configuration POP avec option "laisser les mails sur le
serveur" est de l'IMAP :)
--
Aide informatique: http://help-info.forumactif.com
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.crazy-irc.net
En cherchant dans la doc PHP, je ne trouve que des fonctions IMAP (chapitre LVII. IMAP, POP3 and NNTP Functions). Dois-je en conclure que c'est exactement pareil? l'extension IMAP permet de se connecter en POP mais c'est assez facile
de le faire toi-même avec une connexion par socket, genre : C'est pas de la programmation super classe, mais ça marche sans souci 25 fois par jour depuis quasiment la création de ce forum...
Merci pour ce code, mais je vais m'en tenir à l'utilisation des fonctions "natives". En fait, il y a de fortes chances pour que je fonctionne en IMAP, mais ça me permet de comprendre une chose (je suis un peu nul question boites mails): POP et IMAP sont (grosso modo) les mêmes protocoles, la différence est au niveau de la gestion: POP rapatrie les mails alors que IMAP les traite sur le serveur. Donc, une configuration POP avec option "laisser les mails sur le serveur" est de l'IMAP :)
-- Aide informatique: http://help-info.forumactif.com Humour: http://www.chatfou.com Tchattez en liberté: http://www.crazy-irc.net
Clifden
POP rapatrie les mails alors que IMAP les traite sur le serveur. Donc, une configuration POP avec option "laisser les mails sur le serveur" est de l'IMAP :)
Pas vraiment. En fait au niveau des fonctionnalité, POP est inclus dans IMAP. Au niveau protocole, cela ne se passe pas du tout de la meme manière.
POP permet en gros: * Lister les mails * Obtenir les infos sur l'ensemble des mails (nombre, taille totale, statut (lu/non lu)) * rapatrier les n premières lignes d'un mail (donc obtenir les infos contenu dans le header, par exemple) * effacer un mail
Lorsque tu utlise un client (Outlook, Thunderbird, etc...), cela se passe de la manière suivante en POP: demande du nombre de mail, leur taille, et commence à les lire, pour les effacer par la suite (dans la majorité des cas).
IMAP permet une vraie gestion (et non pas "je lit, j'efface) avec un vrai dialogue client/serveur, et des opération d'écriture sur le serveur. Il gere aussi la notion de dossier. Donc il permet: * Management des dossiers (création, renomage, effacement, listing) * Management des mails (lecture, ecriture, effacement)
Tu vois donc qu'en appelant une fonction permettant de faire de l'imap, si le serveur décline qu'il est en fait du POP, la fonction va se contenter de lui donner les ordres qu'il est capable de faire. Une partie seulement des fonctions imap PHP fontionne en POP, par exemple les fonctions de gestion des directory vont provoquer une erreur sur un serveur pop. Mais si tu utilises une fonction qui est chargée de te renvoyer le contenu du mail n° i, sur un serveur POP, il y aura pas de problème.
J'espère avoir répondu à tes interrogations.
POP rapatrie les mails alors que IMAP les traite sur le serveur.
Donc, une configuration POP avec option "laisser les mails sur le
serveur" est de l'IMAP :)
Pas vraiment. En fait au niveau des fonctionnalité, POP est inclus dans
IMAP. Au niveau protocole, cela ne se passe pas du tout de la meme manière.
POP permet en gros:
* Lister les mails
* Obtenir les infos sur l'ensemble des mails (nombre, taille totale,
statut (lu/non lu))
* rapatrier les n premières lignes d'un mail (donc obtenir les infos
contenu dans le header, par exemple)
* effacer un mail
Lorsque tu utlise un client (Outlook, Thunderbird, etc...), cela se
passe de la manière suivante en POP: demande du nombre de mail, leur
taille, et commence à les lire, pour les effacer par la suite (dans la
majorité des cas).
IMAP permet une vraie gestion (et non pas "je lit, j'efface) avec un
vrai dialogue client/serveur, et des opération d'écriture sur le
serveur. Il gere aussi la notion de dossier. Donc il permet:
* Management des dossiers (création, renomage, effacement, listing)
* Management des mails (lecture, ecriture, effacement)
Tu vois donc qu'en appelant une fonction permettant de faire de l'imap,
si le serveur décline qu'il est en fait du POP, la fonction va se
contenter de lui donner les ordres qu'il est capable de faire.
Une partie seulement des fonctions imap PHP fontionne en POP, par
exemple les fonctions de gestion des directory vont provoquer une erreur
sur un serveur pop. Mais si tu utilises une fonction qui est chargée de
te renvoyer le contenu du mail n° i, sur un serveur POP, il y aura pas
de problème.
POP rapatrie les mails alors que IMAP les traite sur le serveur. Donc, une configuration POP avec option "laisser les mails sur le serveur" est de l'IMAP :)
Pas vraiment. En fait au niveau des fonctionnalité, POP est inclus dans IMAP. Au niveau protocole, cela ne se passe pas du tout de la meme manière.
POP permet en gros: * Lister les mails * Obtenir les infos sur l'ensemble des mails (nombre, taille totale, statut (lu/non lu)) * rapatrier les n premières lignes d'un mail (donc obtenir les infos contenu dans le header, par exemple) * effacer un mail
Lorsque tu utlise un client (Outlook, Thunderbird, etc...), cela se passe de la manière suivante en POP: demande du nombre de mail, leur taille, et commence à les lire, pour les effacer par la suite (dans la majorité des cas).
IMAP permet une vraie gestion (et non pas "je lit, j'efface) avec un vrai dialogue client/serveur, et des opération d'écriture sur le serveur. Il gere aussi la notion de dossier. Donc il permet: * Management des dossiers (création, renomage, effacement, listing) * Management des mails (lecture, ecriture, effacement)
Tu vois donc qu'en appelant une fonction permettant de faire de l'imap, si le serveur décline qu'il est en fait du POP, la fonction va se contenter de lui donner les ordres qu'il est capable de faire. Une partie seulement des fonctions imap PHP fontionne en POP, par exemple les fonctions de gestion des directory vont provoquer une erreur sur un serveur pop. Mais si tu utilises une fonction qui est chargée de te renvoyer le contenu du mail n° i, sur un serveur POP, il y aura pas de problème.
J'espère avoir répondu à tes interrogations.
CrazyCat
Clifden wrote:
J'espère avoir répondu à tes interrogations.
Parfait, du coup je comprend que l'on ne trouve que les fonctions imap_*, car qui peut le plus peut le moins.
Merci bien
-- Aide informatique: http://help-info.forumactif.com Humour: http://www.chatfou.com Tchattez en liberté: http://www.crazy-irc.net
Clifden wrote:
J'espère avoir répondu à tes interrogations.
Parfait, du coup je comprend que l'on ne trouve que les fonctions
imap_*, car qui peut le plus peut le moins.
Merci bien
--
Aide informatique: http://help-info.forumactif.com
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.crazy-irc.net