Précédent | 6/14 | Suivant

Créer un webmail avec IMAP

La bibliothèque IMAP de PHP permet d’accéder à un compte mail POP ou IMAP ainsi que les comptes news NNTP.
Avant de commencer ce tutorial vérifiez que cette bibliothèque est disponible sur votre serveur.
Dans ce tutorial, nous apprendrons à faire un mini-webmail pour accéder à un compte POP via une interface web. Comme d’habitude cela se fera en plusieurs étapes afin de détailler chacune d’entre elles.

La connexion

Pour pouvoir accéder à un compte quel qu’il soit, il faut d’abord se connecter. Cela necessite de connaître quelques informations sur le serveur.

<html>
<head><title>Exemple IMAP</title></head>
<body>
<?php
 $mbox = imap_open ("{mail.toutestfacile.com:110/pop3}", "login", "password");
 imap_close($mbox);
?>
</body>
</html>

Si aucun message d’erreur n’apparaît alors la connexion est bien effectuée.
Vous devez remplacer mail.toutestfacile.com par le serveur de mail que vous voulez lire. C’est comme celui que vous entrez dans un client mail pour les récuperer. 110 est le numéro de port. A moins d’avoir un serveur de mail farfelu, vous n’aurez pas à changer cette valeur pour un compte pop. Pour un compte IMAP le port usuel est 143 et 119 pour un compte NNTP. Si vous ne voulez pas vous connecter à un compte POP, Vous devez remplacer /pop3 par /nntp ou l’effacer pour un compte IMAP. "login" est bien entendu à remplacer par votre login d’accés au compte, "password" est bien entendu à remplacer par votre mot de passe.
Si vous avez réussi à vous connecter, vous avez passé l’étape la plus difficile !

Lister le contenu d’une boîte aux lettres éléctronique

Ce que l’on va faire maintenant c’est simplement afficher tous les entêtes des messages contenus dans INBOX d’un compte POP. Ici le compte POP est imap@toutestfacile.com.

<html>
<head><title>Exemple IMAP</title></head>
<body>
<?php
 $mbox = imap_open ("{mail.toutestfacile.com:110/pop3}", "imap", "xxxx");
 echo "<p><h1>Entetes de mail dans  INBOX</h1>\n";
 $headers = imap_headers ($mbox);
 if ($headers == false) {
   echo "Erreur !\n";
 } else {
   while (list ($key,$val) = each ($headers)) {
       echo $val."<br>\n";
   }
 }
 imap_close($mbox);
?>
</body>
</html>

Après s’être connecté au compte POP, on récupère les entêtes grâce à la fonction imap_headers Si la récupération s’est bien déroulée alors on affiche les entêtes un par un à l’aide d’une boucle while.
Nous voilà capable d’afficher un résumé du contenu du dossier INBOX d’une boîte aux lettres éléctronique ! Ce qui serait bien maintenant c’est de pouvoir cliquer sur un des entêtes et d’ouvrir le message correspondant. C’est ce que nous allons voir maintenant.

Visualiser le contenu d’un email

Il va falloir modifier le script précédent afin d’ajouter un lien vers un script chargé d’ouvrir le courrier.

<html>
<head><title>Exemple IMAP</title></head>
<body>
<?php
 $mbox = imap_open ("{mail.toutestfacile.com:110/pop3}", "imap", "xxxx");
 echo "<p><h1>Entetes de mail dans  INBOX</h1>\n";
 $headers = imap_headers ($mbox);
 if ($headers == false) {
   echo "Erreur !\n";
 } else {
   while (list ($key,$val) = each ($headers)) {
     echo "<a href=\"chapimap4_2.php?no=".($key+1)."\">".$val."</a><br>\n";
   }
 }
 imap_close($mbox);
?>
</body>
</html>

On a juste ajouté la balise <a href ... pour passer en paramètre le numéro du mail à lire. Le tableau ayant un indice commencant à 0, et les mails ayant un indice commencant à 1, on a ajouté 1à l’indice du tableau.
Ci-dessous, c’est le contenu du fichier chargé d’ouvrir le courrier.

<html>
<head><title>Exemple IMAP</title></head>
<body>
<?php
 $mbox = imap_open ("{mail.toutestfacile.com:110/pop3}", "imap", "xxxx");
 $header=imap_headerinfo($mbox, $no);
 $from=$header->from;
 echo "Message de:".$from[0]->personal." [".$from[0]->mailbox."@".$from[0]->host."]<br>";
 $text = imap_fetchbody($mbox, $no, 1);
 echo $text;
 imap_close($mbox);
?>
</body>
</html>

On stocke dans $header l’entête du mail numéro $no. Celui-ci est stocké sous la forme d’un objet. Dans $from, on stocke un tableau d’objets réunissant les informations sur l’auteur du message. On affiche ensuite "Message de :" suivi du nom de l’auteur et de son adresse entre crochets. la fonction imap_fetchbody nous permet de récupérer une partie du message. (un message peut avoir plusieurs partie si il y a des fichiers attachés par exemple) Dans notre cas on place dans $text la première partie du mail (c’est généralement là que ce trouve le corps du message). Puis on affiche le texte du message et on ferme la connexion.
Vous pouvez tester l’exemple en envoyant un mail , et un seul, merci (en texte brut de préférence) à imap@toutestfacile.com.

Conclusion

Ceci vous donne une idée de comment fonctionne les outils de webmail. Vous pouvez utiliser cette bibliothèque pour faire des choses hors du commun. Par exemple au lieu d’ajouter des nouvelles (news) dans une base de données, vous pourriez utiliser un compte POP et lorsque vous voulez ajouter une nouvelle vous n’auriez qu’à envoyer un mail.