BTS INFORMATIQUE DE GESTION Option Administrateur de réseaux Développeur d applications COMPTE RENDU D ACTIVITE ACTIVITE N 4 Nom et Prénom : BUISSON Pierre-Adrien EPSI Lyon 107 rue de Marseille 69 007 LYON Identification (objectif) de l'activité Module d envoi de newsletter en B to B Contexte dans lequel le projet s'inscrit Développement d un module simple (peut-être intégré à un site internet dans le futur) d envoi de newsletter en B to B en PHP Conditions de réalisation Travail effectué : Travail effectué dans : Type d'intervention : Individuellement un service utilisateur nouvelle application En groupe un service d'études SSII maintenance Stage en entreprise Autres contraintes Développement en PHP Utilisation de fonctions de la librairie graphique GD Utilisation de la fonction mail() et possibilité d envoyer des mails en plusieurs parties Compétences couvertes No Compétence couverte Intitulé C32 PRODUIRE DEVELOPPER Développer à l aide d un langage de programmation procédural C34 PRODUIRE DEVELOPPER Développer à l aide d un langage de programmation à objets C36 PRODUIRE DEVELOPPER Développer dans le cadre d une architecture client serveur C37 PRODUIRE DEVELOPPER Mettre au point et maintenir une application C39 PRODUIRE DEVELOPPER Maîtriser le poste de développement et son environnement Pierre-Adrien BUISSON BTS IG, Session 2006 Page 1 sur 5
1. PRÉSENTATION DE L ACTIVITÉ Cette activité, développé en PHP dans le cadre de mon second stage, répondait à un besoin de communication de l entreprise avec ses partenaires. Plus précisément, l objectif du module à développer était de permettre d envoyer aisément une newsletter au format HTML, éventuellement accompagnée d une pièce jointe, à des contacts provenant du carnet d adresses d un client de messagerie traditionnel (type MS Outlook, Outlook Express, Mozilla Thunderbird, ). 2. FONCTIONNEMENT DU MODULE Développée en PHP, cette activité est donc basée sur une interface de type web. Les fonctionnalités de l application étant très précises, cette interface s avère donc extrêmement simple : il s agit en effet d un simple formulaire HTML, utilisant un champ de type «text» pour préciser le sujet de la newsletter, et trois champs de type «file» pour permettre de récupérer les différents fichiers nécessaires à l envoi de la newsletter. Par la suite, une fois que l utilisateur a validé le formulaire, un script PHP est chargé de veiller à la validité des fichiers transmis, puis procède à l envoi de la newsletter à chaque contact. Au cours de cette opération, une barre de progression permet de témoigner de l avancement du processus. Pierre-Adrien BUISSON BTS IG, Session 2006 Page 2 sur 5
Cette barre de progression «graphique» est générée au moyen de la librairie graphique GD lors de chaque envoi. Elle est remplacée, si la librairie n est pas installée sur le serveur, par un simple affichage de la progression en mode texte. Enfin, une fois que la progression de l envoi a atteint les 100%, un récapitulatif de l envoi est affiché à l utilisateur, indiquant notamment le nombre total de tentatives d envoi effectuées, ainsi que le résultat de chaque tentative (succès ou échec). Les adresses ayant posé problème lors de l envoi (adresses en double, adresses non valides, ) sont indiquées en rouge dans cette page récapitulative, et archivées dans un fichier de log sur le serveur. 3. QUESTIONS SOULEVÉES ET SOLUTIONS CHOISIES 3.1.IMPORTATION D UN CARNET D ADRESSES Pour la récupération d un carnet d adresses existant, c est le format de fichier CSV qui a été retenu. Ce format, dont l acronyme signifie Comma Separated Values (valeurs séparées par des virgules) est disponible à partir des principaux clients de messagerie du marché et simple à traiter en PHP grâce notamment à la fonction fgetcsv. Chaque ligne d un fichier CSV correspond à une entité (un contact en l occurrence), et sur chacune de ces lignes, une virgule sépare chacune des informations sur cette entité (en l occurrence, «l intitulé» du contact et son adresse e-mail). Les champs enregistrés dans le fichier sont indiqués sur la première ligne. 3.2.GESTION DE LA PROGRESSION DES ENVOIS C est la page mail_envoi.php qui est chargé de l envoi des mails. A chaque chargement de la page mail_envoi.php correspond l envoi d un mail. Une autre solution aurait été d effectuer l ensemble des envois en un seul chargement de la page, mais cette approche présentait plusieurs problèmes : Pierre-Adrien BUISSON BTS IG, Session 2006 Page 3 sur 5
- Impossibilité d afficher l état de progression du processus : en effet, le PHP est un langage serveur, ce qui signifie que l ensemble du code de chaque page PHP est interprété côté serveur, le résultat étant ensuite renvoyé au client une fois le traitement complet terminé. Ainsi, si l ensemble des envois s était fait «en une seule fois», il aurait été impossible de récupérer l état d avancement : il aurait simplement été possible de récupérer le résultat des envois une fois qu ils auraient tous été effectués, ce qui n aurait présenté aucun intérêt. - Risques de dépassement du temps d exécution maximum d un script : en PHP, un temps maximum d exécution du script est défini dans le fichier de configuration php.ini (il est souvent de 30 secondes par défaut). Il est bien sûr possible de modifier cette configuration, notamment en utilisant la fonction ini_set de PHP, mais cette méthode n est pas très propre et ne résout pas le premier problème Les variables sont conservées d une page sur l autre via l utilisation des sessions de PHP, qui permettent de conserver des variables d une page à une autre. Ce mécanisme s appuie sur des «cookies» conservés sur le serveur, et associés à un utilisateur grâce à un session ID. Cela suppose que chaque fichier dans lequel on doit utiliser ces variables comporte en toute première instruction la fonction session_start(). Les variables de session utilisées ici sont initialisées lors du traitement du formulaire. Le calcul de la progression des envois se fait à partir de la variable de session ID représentant le nombre d adresses traitées, et de la variable de session TOSEND, représentant elle le nombre total d adresses à traiter. Si la librairie graphique GD est installée, l affichage se fait graphiquement par l intermédiaire du fichier include/progressbar.php ; dans le cas contraire, la progression est affichée en tant que texte. 3.3.FORMAT DES EMAILS Les e-mails envoyés sont au format MIME 1.0. Ces e-mails sont constitués de plusieurs parties, le type MIME utilisé a donc été multipart, et plus précisément multipart/mixed (différentes parties pouvant représenter des contenus différents). Les différentes zones de la newsletter sont séparées chacune par une frontière, chaîne de caractère définie dans l entête : «Content-Type: multipart/mixed; boundary=-75f38275428f01a2dbe33a0cd1dd239c» - Partie texte : Elle comporte le texte qui sera affiché même pour les clients mails ne supportant pas les e-mails au format MIME - Partie HTML : Elle comporte la partie du mail au format HTML - Pièce jointe : Elle définit la partie du mail contenant la pièce jointe, en spécifiant le type MIME du fichier, son nom et le fichier lui-même. Le fichier utilise un codage en base 64 permettant de transmettre tout document binaire en pièce jointe en le codant à l aide des caractères ASCII. - Fermeture de l'email : L e-mail est conclu par la frontière suivie de deux tirets «--» Pierre-Adrien BUISSON BTS IG, Session 2006 Page 4 sur 5
4. CONCLUSION Cette activité m a permis d envisager le développement «web» d une autre manière, puisqu il s agissait ici de produire une petite application qui n était dans l immédiat pas destinée à être intégrée au sein d un site web. Cela a également été pour moi l occasion de me document davantage sur certains points bien précis, notamment au niveau des formats d emails existants, suite aux problèmes rencontrés pour la lecture des newsletters (notamment sur de nombreux webmails). Cela a également été pour moi l occasion de mettre à profit mes connaissances en terme de sessions PHP et d utilisation de la librairie GD pour diminuer le temps de production de l application demandée. Pierre-Adrien BUISSON BTS IG, Session 2006 Page 5 sur 5