De nombreux développeurs PHP doivent envoyer des e-mails à partir de leur code. La seule fonction PHP qui prend directement en charge cela est mail()
. Cependant, il ne fournit aucune aide pour utiliser les fonctionnalités courantes telles que le cryptage, l'authentification, les messages HTML et les pièces jointes.
Formater correctement un e-mail est étonnamment difficile. Il existe une myriade de normes qui se chevauchent (et sont contradictoires), nécessitant le strict respect de règles de formatage et d'encodage horriblement compliquées – la grande majorité du code que vous trouverez en ligne et qui utilise directement la fonction mail()
est tout simplement faux, voire dangereux !
La fonction PHP mail()
envoie généralement via un serveur de messagerie local, généralement accompagné d'un binaire sendmail
sur les plates-formes Linux, BSD et macOS. Cependant, Windows n'inclut généralement pas de serveur de messagerie local ; Le client SMTP intégré de PHPMailer permet l'envoi d'e-mails sur toutes les plateformes sans avoir besoin d'un serveur de messagerie local. Sachez cependant que la fonction mail()
doit être évitée lorsque cela est possible ; il est à la fois plus rapide et plus sûr d'utiliser SMTP vers localhost.
Ne soyez pas tenté de le faire vous-même – si vous n'utilisez pas PHPMailer, il existe de nombreuses autres excellentes bibliothèques que vous devriez consulter avant de lancer la vôtre. Essayez SwiftMailer, Laminas/Mail, ZetaComponents, etc.
Ce logiciel est distribué sous la licence LGPL 2.1, avec l'engagement de coopération GPL. Veuillez lire LICENCE pour plus d'informations sur la disponibilité et la distribution du logiciel.
PHPMailer est disponible sur Packagist (en utilisant le versioning sémantique) et l'installation via Composer est la méthode recommandée pour installer PHPMailer. Ajoutez simplement cette ligne à votre fichier composer.json
:
"phpmailer/phpmailer" : " ^6.9.2 "
ou courir
composer require phpmailer/phpmailer
Notez que le dossier vendor
et le script vendor/autoload.php
sont générés par Composer ; ils ne font pas partie de PHPMailer.
Si vous souhaitez utiliser l'authentification XOAUTH2, vous devrez également ajouter une dépendance sur le package league/oauth2-client
et les adaptateurs de service appropriés dans votre composer.json
, ou jeter un œil au wrapper SendOauth2 de @decomplexity, surtout si vous êtes en utilisant les services Microsoft.
Alternativement, si vous n'utilisez pas Composer, vous pouvez télécharger PHPMailer sous forme de fichier zip (notez que les documents et les exemples ne sont pas inclus dans le fichier zip), puis copier le contenu du dossier PHPMailer dans l'un des répertoires include_path
spécifiés dans votre configuration PHP et chargez chaque fichier de classe manuellement :
<?php
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer Exception ;
require ' path/to/PHPMailer/src/Exception.php ' ;
require ' path/to/PHPMailer/src/PHPMailer.php ' ;
require ' path/to/PHPMailer/src/SMTP.php ' ;
Si vous n’utilisez pas explicitement la classe SMTP
(ce n’est probablement pas le cas), vous n’avez pas besoin d’une ligne use
pour la classe SMTP. Même si vous n'utilisez pas d'exceptions, vous devez quand même charger la classe Exception
telle qu'elle est utilisée en interne.
PHPMailer 5.2 (qui est compatible avec PHP 5.0 — 7.0) n'est plus pris en charge, même pour les mises à jour de sécurité. Vous trouverez la dernière version de 5.2 dans la branche 5.2-stable. Si vous utilisez PHP 5.5 ou version ultérieure (ce que vous devriez être), passez aux versions 6.x.
Les changements les plus importants sont que les fichiers sources se trouvent désormais dans le dossier src/
et que PHPMailer déclare désormais l'espace de noms PHPMailerPHPMailer
. Cela a plusieurs effets importants – lisez le guide de mise à niveau pour plus de détails.
Bien que l'installation de l'intégralité du package manuellement ou avec Composer soit simple, pratique et fiable, vous souhaiterez peut-être n'inclure que les fichiers vitaux dans votre projet. Au minimum, vous aurez besoin de src/PHPMailer.php. Si vous utilisez SMTP, vous aurez besoin de src/SMTP.php, et si vous utilisez POP avant SMTP ( très peu probable !), vous aurez besoin de src/POP3.php. Vous pouvez ignorer le dossier de langue si vous n'affichez pas d'erreurs aux utilisateurs et vous contentez d'erreurs en anglais uniquement. Si vous utilisez XOAUTH2, vous aurez besoin de src/OAuth.php ainsi que des dépendances Composer pour les services avec lesquels vous souhaitez vous authentifier. Vraiment, c'est beaucoup plus simple d'utiliser Composer !
<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer SMTP ;
use PHPMailer PHPMailer Exception ;
//Load Composer's autoloader
require ' vendor/autoload.php ' ;
//Create an instance; passing `true` enables exceptions
$ mail = new PHPMailer ( true );
try {
//Server settings
$ mail -> SMTPDebug = SMTP :: DEBUG_SERVER ; //Enable verbose debug output
$ mail -> isSMTP (); //Send using SMTP
$ mail -> Host = ' smtp.example.com ' ; //Set the SMTP server to send through
$ mail -> SMTPAuth = true ; //Enable SMTP authentication
$ mail -> Username = ' [email protected] ' ; //SMTP username
$ mail -> Password = ' secret ' ; //SMTP password
$ mail -> SMTPSecure = PHPMailer:: ENCRYPTION_SMTPS ; //Enable implicit TLS encryption
$ mail -> Port = 465 ; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
//Recipients
$ mail -> setFrom ( ' [email protected] ' , ' Mailer ' );
$ mail -> addAddress ( ' [email protected] ' , ' Joe User ' ); //Add a recipient
$ mail -> addAddress ( ' [email protected] ' ); //Name is optional
$ mail -> addReplyTo ( ' [email protected] ' , ' Information ' );
$ mail -> addCC ( ' [email protected] ' );
$ mail -> addBCC ( ' [email protected] ' );
//Attachments
$ mail -> addAttachment ( ' /var/tmp/file.tar.gz ' ); //Add attachments
$ mail -> addAttachment ( ' /tmp/image.jpg ' , ' new.jpg ' ); //Optional name
//Content
$ mail -> isHTML ( true ); //Set email format to HTML
$ mail -> Subject = ' Here is the subject ' ;
$ mail -> Body = ' This is the HTML message body <b>in bold!</b> ' ;
$ mail -> AltBody = ' This is the body in plain text for non-HTML mail clients ' ;
$ mail -> send ();
echo ' Message has been sent ' ;
} catch ( Exception $ e ) {
echo " Message could not be sent. Mailer Error: { $ mail -> ErrorInfo }" ;
}
Vous trouverez de nombreuses possibilités de jeu dans le dossier d'exemples, qui couvre de nombreux scénarios courants, notamment l'envoi via Gmail, la création de formulaires de contact, l'envoi à des listes de diffusion, etc.
Si vous réutilisez l'instance (par exemple lors de l'envoi à une liste de diffusion), vous devrez peut-être effacer la liste des destinataires pour éviter d'envoyer des messages en double. Consultez l’exemple de liste de diffusion pour plus de conseils.
C'est ça. Vous devriez maintenant être prêt à utiliser PHPMailer !
PHPMailer est par défaut en anglais, mais dans le dossier de langue, vous trouverez de nombreuses traductions des messages d'erreur PHPMailer que vous pourriez rencontrer. Leurs noms de fichiers contiennent le code de langue ISO 639-1 pour les traductions, par exemple fr
pour le français. Pour spécifier une langue, vous devez indiquer à PHPMailer laquelle utiliser, comme ceci :
//To load the French version
$ mail -> setLanguage ( ' fr ' , ' /optional/path/to/language/directory/ ' );
Nous acceptons les corrections et les nouvelles langues – si vous recherchez des corrections, exécutez le script Language/TranslationCompletenessTest.php dans le dossier tests et il affichera toutes les traductions manquantes.
Commencez à lire sur le wiki GitHub. Si vous rencontrez des problèmes, consultez le guide de dépannage car il est fréquemment mis à jour.
Des exemples d'utilisation de PHPMailer pour des scénarios courants peuvent être trouvés dans le dossier des exemples. Si vous recherchez un bon point de départ, nous vous recommandons de commencer par l'exemple de Gmail.
Pour réduire l'empreinte du code déployé de PHPMailer, les exemples ne sont pas inclus si vous chargez PHPMailer via Composer ou via le téléchargement du fichier zip de GitHub, vous devrez donc soit cloner le référentiel git, soit utiliser les liens ci-dessus pour accéder directement aux exemples.
La documentation complète de l'API générée est disponible en ligne.
Vous pouvez générer une documentation complète au niveau de l'API en exécutant phpdoc
dans le dossier de niveau supérieur, et la documentation apparaîtra dans le dossier docs
, bien que vous deviez installer PHPDocumentor. Les tests unitaires peuvent être une bonne référence pour savoir comment effectuer diverses opérations telles que le cryptage.
Si la documentation ne couvre pas ce dont vous avez besoin, recherchez les nombreuses questions sur Stack Overflow et avant de poser une question sur « Erreur SMTP : impossible de se connecter à l'hôte SMTP. », lisez le guide de dépannage.
Les tests PHPMailer utilisent PHPUnit 9, avec un polyfill pour permettre aux tests de style 9 de s'exécuter sur les anciennes versions de PHPUnit et PHP.
Si cela ne passe pas, pouvez-vous faire quelque chose pour aider ?
Veuillez divulguer toutes les vulnérabilités trouvées de manière responsable – signalez les problèmes de sécurité aux responsables en privé.
Consultez les avis de sécurité SECURITY et PHPMailer sur GitHub.
Veuillez soumettre des rapports de bogues, des suggestions et des demandes d'extraction au système de suivi des problèmes GitHub.
Nous sommes particulièrement intéressés par la résolution des cas extrêmes, l'extension de la couverture des tests et la mise à jour des traductions.
Si vous avez trouvé une erreur dans la documentation ou si vous souhaitez ajouter quelque chose, allez-y et modifiez le wiki – tout le monde peut le modifier.
Si vous avez des clones git antérieurs au déplacement vers l'organisation PHPMailer GitHub, vous devrez mettre à jour toutes les URL distantes faisant référence à l'ancien emplacement GitHub avec une commande comme celle-ci depuis votre clone :
git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git
Veuillez ne plus utiliser les projets SourceForge ou Google Code ; ils sont obsolètes et ne sont plus entretenus.
Le temps et les ressources de développement pour PHPMailer sont fournis par Smartmessages.net, le seul système de marketing par courrier électronique au monde axé sur la confidentialité.
Les dons sont les bienvenus, que ce soit en bière, en T-shirts ou en espèces sonnantes et trébuchantes. Le parrainage via GitHub est un moyen simple et pratique de dire « merci » aux responsables et contributeurs de PHPMailer – cliquez simplement sur le bouton « Parrainer » sur la page du projet. Si votre entreprise utilise PHPMailer, envisagez de participer au programme de support aux entreprises de Tidelift.
Disponible dans le cadre de l’abonnement Tidelift.
Les responsables de PHPMailer et de milliers d'autres packages travaillent avec Tidelift pour fournir un support commercial et une maintenance pour les packages open source que vous utilisez pour créer vos applications. Gagnez du temps, réduisez les risques et améliorez la santé du code, tout en payant les responsables des packages exacts que vous utilisez. Apprendre encore plus.
Voir le journal des modifications.
coolbru
sur SF) et Andy Prevost ( codeworxtech
) ont repris le projet en 2004.