Envoyez un mail grâce a PHPMailer

Traduction/Auteur : FROMY ANTHONY

PHPMailer

Introduction

Ce tutoriel explique comment utiliser PHPMailer.

Basé sur un tutoriel de Tom Klingenberg

Contenu

  • PHPMailer: Qu'est-ce que c'est? Qu'est ce que ça fait? Qui en a besoin? De brefs exemples de fonctionnalités de PHPMailer.
  • Première fois: Envoi de votre premier e-mail avec PHPMailer.
  • Utilisation de pièces jointes: Envoyer des mails avec des pièces jointes: système de fichiers, base de données ou en ligne.
  • Utilisation de HTML Mail: Utilisation des fonctionnalités de messagerie HTML intégrée à la classe.
  • Support: Où puis-je obtenir de l'aide?: Comment trouver des ressources d'assistance: site Web PHPMailer, liste de diffusion, etc.
  • Autres ressources: Email et ressources PHP: Il y a beaucoup d'informations sur le net à propos de l'email, php et PHPMailer.

PHPMailer

PHPMailer est une bibliothèque de classes pour PHP qui fournit une collection de fonctions pour construire et envoyer des messages électroniques. PHPMailer prend en charge plusieurs manières d'envoyer des emails:, mail()Sendmail, qmail et directement aux serveurs SMTP. Vous pouvez utiliser n'importe quelle fonction de messagerie SMTP, de multiples destinataires via, CC, BCC, etc. En bref: PHPMailer est un moyen efficace d'envoyer des messages électroniques dans PHP.

PHP a une mail()fonction intégrée. Alors pourquoi utiliser PHPMailer? N'est-ce pas plus lent? Pas vraiment, car avant de pouvoir envoyer un message, il faut en construire un correctement, et c'est extrêmement compliqué car il y a tellement de considérations techniques. Avec PHPMailer, il est facile d'envoyer des messages, de joindre des fichiers, d'envoyer des messages HTML, etc. Avec PHPMailer, vous pouvez même utiliser votre propre serveur SMTP et éviter les routines Sendmail utilisées par la mail()fonction sur les plates-formes Unix.

Ce didacticiel explique comment implémenter la classe dans votre script ou votre site Web et comment créer une application de messagerie.

Parce que l'utilisation mail()a tellement de problèmes cachés, nous vous suggérons fortement de ne pas l'appeler vous-même - si vous ne voulez pas utiliser PHPMailer, utilisez une autre bibliothèque d'email établie telle que SwiftMailer, Zend_Mail, etc. mail()(y compris la documentation PHP pour la mail()fonction) a des problèmes qui peuvent être évités en utilisant une bibliothèque.

Première fois

Avant de continuer, assurez-vous que PHPMailer est correctement installé. Si vous vous sentez incertain, veuillez lire les instructions d'installation accompagnant le paquet. Si vous n'êtes toujours pas sûr, vous pouvez vérifier que vous avez correctement installé PHPMailer avec ce petit script:

<? php
require  ' PHPMailerAutoload.php ' ; 
$ mail  =  nouveau  PHPMailer ;

Enregistrez-le en tant que document PHP dans le même répertoire que vous avez enregistré class.phpmailer.php. Si aucune erreur ne résulte de l'exécution du script, votre installation a été effectuée correctement. Si vous avez désactivé les messages d'erreur et les avertissements, allez-y et activez-le; Reportez-vous à votre manuel PHP pour plus d'informations sur ce sujet.

Cet extrait de code est également le début de toute utilisation de PHPMailer. require 'PHPMailerAutoload.php';charge un autochargeur qui sait comment charger les autres classes utilisées par PHPMailer; $mail = new PHPMailer;crée une nouvelle instance de la classe en tant que $mail; Toutes les caractéristiques, fonctions et méthodes de la classe peuvent être accessibles via cette variable.

Allons de l'avant et envoyons le premier courrier. Pour cela, vous aurez besoin des bases: Une adresse de destinataire, une adresse de provenance, un sujet et le texte du message.

Vous devrez également sélectionner une méthode de livraison du message. Nous avons besoin d'un programme pour communiquer avec un serveur SMTP qui, à son tour, envoie le courrier à Internet. Dans le monde Unix / Linux, Sendmail est très populaire et largement utilisé, mais presque tous les autres serveurs de messagerie, tels que postfix et exim, fournissent un wrapper de compatibilité.

PHPMailer fournit plusieurs méthodes d'envoi de courrier. Il est préférable de commencer par la mail()fonction car c'est la méthode la plus simple (et le mécanisme d'envoi par défaut de PHPmailer), mais elle nécessite un serveur de messagerie local fonctionnel. Après avoir recueilli les informations nécessaires pour envoyer votre premier e-mail, utilisez cette information à la place des informations d'exemple fournies ici:

<? php
require  ' PHPMailerAutoload.php ' ; 
$ mail  =  nouveau  PHPMailer ; 
$ mail -> setFrom ( ' from@example.com ' , ' Votre nom ' ); 
$ mail -> addAddress ( ' myfriend@example.net ' , ' Mon ami ' ); 
$ mail -> Subject   =  ' Premier message de PHPMailer ' ; 
$ mail -> Body      =  ' Salut! Ceci est mon premier e-mail envoyé via PHPMailer.' ; 
if ( ! $ mail -> send ()) {
 echo 'Le message n'a pas été envoyé. ' ; echo ' Erreur mailer: ' . $ mail -> ErreurInfo ; } else { echo 'Le message a été envoyé. ' ; }   
     

   

Enregistrez ceci en tant que fichier php et changez les valeurs en fonction de vos valeurs, bien sûr. Voici une explication de ce que chaque strophe de ce script fait:

$ mail -> setFrom ( ' from@example.com ' , ' Votre nom ' );

Entrez l'adresse à laquelle l'e-mail devrait apparaître. Vous pouvez utiliser toute adresse que le serveur SMTP acceptera comme valide. Le deuxième paramètre optionnel de cette fonction est le nom qui sera affiché en tant qu'expéditeur au lieu de l'adresse e-mail elle-même.

Les éléments suivants ajouteront une adresse à laquelle l'e-mail sera envoyé. Vous devez utiliser un e-mail valide ici pour pouvoir vérifier que votre test PHPMailer a bien fonctionné. Juste votre propre adresse e-mail ici pour ce test. Comme avec la setFromméthode, vous pouvez éventuellement fournir un nom d'affichage pour le destinataire.

$ mail -> addAddress ( ' myfriend@example.net ' , ' Mon ami ' );

La définition du sujet et du corps se fait ensuite en définissant les propriétés Subjectet Bodydirectement - notez qu'elles sont sensibles à la casse, donc n'essayez pas de définir subjectou body.

Enfin, nous envoyons l'e-mail, une fois que toutes les informations nécessaires ont été fournies. C'est fait avec $mail->Send();. Dans cet exemple de script, c'est dans une ifinstruction; En cas d' send()échec, il reviendra falseet vous pourrez l'attraper et afficher un message d'erreur. Ceci est fait dans les dernières lignes. Sinon, il affiche un message de réussite.

Utiliser des pièces jointes

L'envoi de courriels en texte clair est souvent insuffisant. Peut-être que vous avez besoin de joindre quelque chose à votre courrier, comme une image ou un fichier audio. Ou peut-être que vous devez joindre plusieurs fichiers.

Il y a deux manières d'attacher quelque chose à votre courrier: Vous pouvez simplement joindre un fichier du système de fichiers ou vous pouvez joindre des données (binaires) stockées dans une variable. Ce dernier est appelé attachement de chaîne. Cela permet d'extraire des données d'une base de données ou d'un appel API Web et de les joindre à un e-mail, sans jamais devoir les enregistrer en tant que fichier.

Fichiers joints

La commande pour attacher un fichier local est simplement $mail->addAttachment($path);, où $pathcontient le chemin d'accès au fichier que vous souhaitez envoyer, et peut être placé n'importe où entre $mail = new PHPMailer;et envoyer le message. Notez que vous ne pouvez pas utiliser d'URL pour le chemin d'accès - vous ne pouvez utiliser que le chemin du système de fichiers local. Voir les notes sur les pièces jointes ci-dessous pour savoir comment utiliser le contenu distant.

Le chemin $ peut être relatif (à partir de votre script, pas de la classe PHPMailer) ou d'un chemin d'accès complet au fichier que vous voulez joindre. Si vous souhaitez envoyer du contenu à partir d'une base de données ou d'une API Web (par exemple, un générateur PDF distant), n'utilisez pas cette méthode - utilisez addStringAttachmentplutôt.

Si vous voulez plus d'options ou si vous voulez spécifier l'encodage et le type MIME du fichier, vous pouvez utiliser trois autres paramètres, qui sont tous facultatifs:

$ mail -> addAttachment ( $ path , $ nom , $ encoding , $ type );

$nameest un paramètre facultatif, utilisé pour définir le nom du fichier qui sera incorporé dans l'e-mail. La personne qui recevra votre courrier ne verra alors que ce nom, plutôt que le nom de fichier d'origine.

$encodingest un peu plus technique, mais avec ce paramètre vous pouvez définir le type d'encodage de la pièce jointe. La valeur par défaut est base64. D' autres types qui sont pris en charge incluent: 7bit8bitbinaryet quoted-printable. Généralement tout fichier binaire (par exemple une image) doit utiliser base64; les pièces jointes à base de texte seront généralement utilisées quoted-printable.

$typeest le type MIME du fichier joint. Les types de contenu ne sont pas nécessairement définis par des suffixes de fichiers (par exemple, .jpgou .mp3), mais un type MIME (MIME = Multipurpose Internet Mail Extensions) est utilisé. Ce paramètre permet de changer le type MIME d'une pièce jointe de la valeur par défaut de application/octet-stream(qui fonctionne avec tout type de fichier, mais signifie que le récepteur ne peut pas le gérer correctement) à un type MIME plus spécifique, comme image/jpegpour une photo JPEG, par exemple. Vous n'avez généralement pas besoin de le configurer vous-même car PHPMailer le mappera automatiquement à partir de l'extension de fichier.

Attachements de chaîne

La addStringAttachment()méthode fonctionne exactement comme addAttachment(), mais vous transmettez le contenu réel de l'élément au lieu d'un chemin de système de fichiers. Le $filenameparamètre est obligatoire car il est utilisé pour fournir un nom de fichier pour les données de chaîne à la fin du récepteur.

Il accepte également les mêmes paramètres que ceux décrits ci-dessus.

Alors, pourquoi utiliser addStringAttachment()au lieu de addAttachment()? Est-ce pour les fichiers texte seulement? Non pas du tout. C'est principalement pour les bases de données et autres contenus non-fichiers. Les données stockées dans une base de données sont toujours stockées sous la forme d'une chaîne (ou d'un BLOB: Binary Large OBject). Vous pouvez interroger votre base de données pour une image stockée en tant que BLOB et transmettre la chaîne résultante à addStringAttachment().

Si vous souhaitez utiliser une URL distante pour obtenir votre contenu (par exemple, obtenir du contenu PDF à partir d'une URL distante), procédez comme suit:

$ mail -> addStringAttachment ( file_get_contents ( $ url ), ' monfichier.pdf ' );

Pièces jointes en ligne

Si vous voulez créer un e-mail HTML qui fait référence à des images qui sont également attachées au message (par opposition à pointé à distance), il est nécessaire de joindre l'image avec un identificateur de contenu, puis de lier la balise. Par exemple, si vous ajoutez une image en pièce jointe en ligne avec l'ID de contenu de my-photo, vous y accéderez dans le corps HTML en utilisant <img src="cid:my-photo" alt="my-photo">.

En détail, voici la fonction pour ajouter une pièce jointe incorporée:

$ mail -> addEmbeddedImage ( $ filename , $ cid );

Le processus de connexion des balises d'image aux identificateurs de contenu est un peu compliqué, mais la msgHTML()méthode peut faire l'essentiel du travail pour vous.

Pour plus d'informations sur l'e-mail HTML, reportez-vous à la section Utilisation du courrier HTML.

Utilisation du courrier électronique HTML

L'envoi de courrier électronique HTML est une tâche assez simple avec PHPMailer, bien qu'elle puisse nécessiter une connaissance importante du langage HTML. En particulier, les clients de messagerie varient énormément dans leur rendu du courrier électronique HTML (bien plus que les navigateurs Web), certains refusant de le montrer entièrement. Pour les clients de messagerie qui ne sont pas en mesure d'afficher du code HTML, vous pouvez fournir un autre corps de message contenant le message en texte brut.

Nous allons d'abord créer un message HTML de base:

<? php
require  ' PHPMailerAutoload.php ' ; 
$ mail  =  nouveau  PHPMailer ; 
$ mail -> setFrom ( ' from@example.com ' , ' Votre nom ' ); 
$ mail -> addAddress ( ' myfriend@example.net ' , ' Mon ami ' ); 
$ mail -> Subject  =  ' Un message HTML ' ; 
$ mail -> isHTML ( true ); 
$ mail -> Corps  = ' Bonjour, <b> mon ami </ b>! Ce message utilise le HTML! ' ;

C'est aussi simple que de créer un e-mail en texte brut. Il suffit d'appeler $mail->isHTML(true);et d'utiliser une chaîne HTML pour $mail->Body.

Pour s'assurer que le destinataire sera capable de lire le courrier électronique, même si son client de messagerie ne supporte pas HTML, nous pouvons ajouter une version en texte brut du message:

$ mail -> AltBody  =  " Bonjour, mon ami, ce message utilise du texte brut! " ;

Ceci définit le corps alternatif ( AltBodypour faire court). Si vous utilisez cette fonctionnalité, le message utilisera automatiquement le type MIME multipart/alternative, qui génère le message d'une manière que les clients compatibles MIME peuvent utiliser pour choisir le format que le destinataire préfère.

Soyez averti que le support HTML varie énormément, mais généralement vous ne pouvez utiliser que du HTML pur - Cela signifie pas de scripts, pas de Flash, etc. Ce que vous pouvez utiliser est documenté par le projet de standards email .

 

Remerciements :

Je tiens à remercier Tom Klingenberg pour son tutoriel dont je me suis largement inspiré pour vous permettre de connaître les bases de PHPMailer. Je vous conseille si vous cherchez à approfondir vos connaissances sur le sujet à suivre sont sur le site de PHPMailer.

Quelques liens utiles :

Lien

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *