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)
<< Présentation et mise en place | Le coeur du code

On parcourt ensuite cette variable pour y chercher l'indicateur "multipart", qui dénonce la présence d'un fichier. Dès cette découverte, il nous faut traiter $message pour en tirer la substantifique moelle. Si on ne trouve pas "multipart", on ne fait que retirer les espaces au début et à la fin du corps, pour l'hygiène.

      if (strtolower($message->ctype_primary) == "multipart") {
        $body = trim($message->parts[0]->body);
        $nbr_fichiers = count($message->parts) - 1;
        $taille_fichiers  = 0;
        for ($p = 1; $p < count($message->parts); $p++)
          $taille_fichiers += strlen($message->parts[$p]->body);

        if ($nbr_fichiers == 1)
          $fichier .= "\n\n[Un fichier. (".$taille_fichiers.")]";
        else
          $fichier .= "\n\n[$nbr_fichiers fichiers. (".$taille_fichiers.")]";
        }
      else
        {
        $body = trim($message->body);
        }

      $body = substr($body, 0, 128).'...';
      $body = nl2br($body);


On ne fait ici qu'indiquer dans le titre qu'il y a un (ou plusieurs) fichiers, avec leur taille globale. Pour le moment, on ne se souciera pas plus de leur présence. Dans les deux dernières lignes, on choisit de n'afficher dans la prévisualisation duc corps que ses 128 premiers octets, et on convertit les retours à la ligne en <br>.

Enfin, on ferme :

      }
    }
  imap_close($mail_cnx);
echo $i;
  }
else {
  ?>Ca ne va pas!<?
  }
?>


Affichage
Reste à créer le tableau et la fonction JavaScript nécessaires au bon fonctionnement de ce petit lecteur.
Le tableau est très classique : on démarre sa structure avant la boucle for(), on construit chaque ligne à chaque itération de cette boucle, et on ferme la structure en sortant de la boucle.

(...)
      $body = substr($body, 0, 2048).'...';
      $body = nl2br($body);
?>
      <tr>
        <td><?=$message->headers['date'];?></td>
        <td><?=$message->headers['from'];?></td>
        <td><a href="javascript:afficherPrev('<?=$i;?>');"> <?=$message->headers['subject'];?></a></td>
      </tr>
      <tr style="display:none;" id="<?=$i;?>">
        <td  colspan="3"><?=$body;?></td>
      </tr>
<?php

      }
    }
  imap_close($mail_cnx);
(...)


Nous ajoutons l'astuce visuelle : la ligne contenant le corps du message est bien construire en HTML, mais nous utilisons CSS pour ne pas l'afficher. Par défaut, ce programme n'affiche que les en-têtes, et le lecteur a le loisir de prévisualiser le message en cliquant sur le titre.
C'est là qu'entre en jeu JavaScript, avec une fonction qui alternativement fait apparaître ou disparaître cette ligne du tableau :

<script>
function afficherPrev($id) {
  var element = document.getElementById($id);
  element.style.display = (element.style.display == "none") ? "table-row" : "none";
  }
</script>


  Forum

Réagissez dans les forums de JDN Développeurs

Le programme est maintenant fonctionnel. Lui manquent un système de lecture plus complet, ainsi que toute la section de réponse via SMTP, mais ce sera pour notre prochain article sur le sujet...


<< Présentation et mise en place | Le coeur du code
 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 





Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages