Précédent | 5/16 | 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.