|
|
|
|
TUTORIEL PHP |
|
|
|
Conception d'un client de messagerie IMAP (1) |
Dans cette approche des fonctions IMAP de PHP sont abordés le téléchargement et l'affichage des e-mails du serveur.
(05/05/2005) |
|
PHP est connu pour présenter par défaut un grand nombre de fonctions
permettant de gérer directement les développements Web les plus
courants. L'e-mail ne fait pas défaut. Si la plupart des développeurs
PHP ont déjà rencontré la fonction mail()
(ne serait-ce que pour passer outre les limitations d'un hébergeur),
certains ne ce sont pas penchés de l'autre côté du miroir, là
où PHP peut recevoir des messages via les protocoles habituels.
Mise en place et présentation
Par ses fonctions IMAP, PHP peut donc gérer le quotidien de
l'e-mail -la gestion plus avancée requérant cependant l'utilisation
de fonctionnalités adéquates, via les bibliothèques Mail de
PEAR. Notre petite application utilise majoritairement les fonctions
internes de PHP, ne faisant appel à PEAR que pour la gestion
des types MIME. Les fonctions IMAP ne sont pas toujours disponibles
par défaut, mais il suffit la plupart du temps de décommenter
(ou d'ajouter) "extension=php_imap.dll" dans la section Extension
du fichier php.ini pour y avoir accès (à vérifier via un phpinfo()).
Pour ce qui est de PEAR, nous n'utiliserons que Mail/mimeDecode.php,
mais installer l'ensemble des extensions Mail ne peut pas faire
de mal si l'on souhaite pousser ses recherches plus loin.
Notre application commence donc de la manière la plus simple
qui soit : voir s'il y a des nouveaux messages sur le serveur,
si oui les télécharger et les afficher dans un tableau. Le tableau
n'affichera que date, auteur et titre, le contenu du message
étant caché via CSS et affiché par un script JavaScript lancé
en cliquant sur le titre.
Le code
La première chose à faire est de définir le compte e-mail à
accéder (nous utilisons ici le protocole POP3), de s'y connecter
et de voir le nombre de messages. Nous introduisons également
l'appel au module Mail::mimeDecode,
donc nous nous servirons bientôt, et nous en profitons pour
mettre en place quelques-unes des options qui y sont rattachées.
$boite = "INBOX";
$serveur_entrant = "pop.domaine.com";
$port = ":110";
$protocole = "/pop3/notls";
$identifiant = "borderie%domaine.com";
$mot_de_passe = "LikeIdTellYou";
if ($mail_cnx = imap_open ("{".$serveur_entrant.$port.$protocole."}".$boite,
$identifiant, $mot_de_passe) ) {
$nbr_mails = imap_num_msg($mail_cnx);
echo "Messages dans votre B.A.L. : ".$nbr_mails."<br
/>";
}
else {
?>Et non !<?
}
require_once("Mail/mimeDecode.php");
$mimeParams = array();
$mimeParams['decode_headers'] = true;
$mimeParams['crlf'] = "\r\n";
$mimeParams['include_bodies'] = true;
$mimeParams['decode_bodies'] = true;
Les options de tableau $mimeParams
définissent ici certains traitements que mimeDecode doit appliquer
au message en cours de lecture : décoder les entêtes, reconnaître
les retours à la ligne, décoder le corps...
Dès lors que $mail_cnx est vrai,
on peut continuer à y travailler. On va commencer à afficher
à l'utilisateur le nombre de mail dont il dispose, et profiter
de cette valeur qui nous est donnée pour lancer une boucle for()
qui lira chaque e-mail l'un après l'autre, recueillant les informations
nécessaires en passant. Ces informations consistent principalement
en les en-têtes des messages, mais également son corps qui doit
être analysé et traité (notamment dans le cas où se trouve un
fichier dans l'e-mail).
Voici le code par ordre d'apparition :
if ($nbr_mails == 0) {
echo "Pas de nouveau mail<br />\n";
}
else {
for ($i = 1; $i <= $nbr_mails; $i++)
{
$fichier = "";
$header = imap_fetchheader($mail_cnx,
$i, FT_PREFETCHTEXT);
$body = imap_body($mail_cnx,
$i, FT_PEEK);
$mimeParams['input'] = $header.$body;
$message = Mail_mimeDecode::decode($mimeParams);
Dès qu'il
y a au moins un message, la boucle for()
se lance et parcourt la liste. $fichier
est une chaîne pour le moment vide qui nous permettra dans le
cas d'un fichier de l'indiquer à l'utilisateur. $header
est un chaîne contenant l'en-tête du message, à savoir sa date,
son auteur, son sujet et tant d'autres jolies choses. $body,
de son côté, contient le corps brut de l'e-mail, qu'il nous
faudra traiter. Ayant récupéré ces deux chaînes, nous pouvons
construire la dernière option $mimeParams,
regroupant en-têtes et corps. Tout ceci est traité par la fonction
decode(), et placé dans la variable
$message. C'est de celle-ci
que tous les nouveaux traitements partiront maintenant.
|
|
|
|
|
|
Quand achetez-vous le plus en ligne ? |
|
|
|
|
|
|
|
|