PHPMailer
Présentation de la bibliothèque
PHPMailer est une bibliothèque de code PHP qui permet d'envoyer des e-mails depuis un script PHP. Cette bibliothèque offre plusieurs fonctionnalités :
- l'envoi d'e-mails via SMTP,
- l'envoi d'e-mails avec pièces jointes,
- l'envoi d'e-mails en HTML, etc.
Pour utiliser PHPMailer, vous devez d'abord l'installer via Composer, avec la commande : composer require phpmailer/phpmailer
.
Une fois PHPMailer installé, vous pouvez l'utiliser dans votre script PHP en l'incluant avec la commande
use PHPMailer\PHPMailer\PHPMailer;
.
Il faut bien sûr inclure l'autoload de Composer avec la ligne :
require 'vendor/autoload.php';
dans votre code PHP.
Exemple pratique
Voici un exemple simple d'envoi d'un e-mail avec PHPMailer :
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
$mail->setFrom('from@example.com', 'Mailer');
$mail->addAddress('joe@example.net', 'Joe User');
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
Dans cet exemple, nous créons un nouvel objet PHPMailer
, définissons l'expéditeur et le destinataire de l'e-mail, définissons le sujet et le corps de l'e-mail, puis envoyons l'e-mail avec la méthode send()
.
Test de mémorisation/compréhension
TP - Envoi d'un mail
Dans ce TP, vous allez créer un petit formulaire de contact qui envoie un e-mail lorsque quelqu'un remplit le formulaire.
Vous utiliserez PHPMailer
pour envoyer l'e-mail.
Pour réaliser ce TP, suivez les étapes suivantes :
- Créez un nouveau fichier HTML, nommez-le
index.html
. Dans ce fichier, créez un formulaire avec trois champs : "Votre nom", "Votre email" et "Votre message". Le formulaire doit avoir une méthode POST et l'action doit êtresend_mail.php
:
<!-- fichier index.html -->
<form action="send_mail.php" method="post">
...
</form>
-
Créez un nouveau fichier PHP, nommez-le
send_mail.php
. Dans ce fichier, vous allez utiliser PHPMailer pour envoyer l'e-mail. -
Pour configurer PHPMailer avec les paramètres de connexion au serveur SMTP d'Infomaniak, utilisez le code suivant :
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'mail.infomaniak.com';
$mail->SMTPAuth = true;
$mail->Username = 'your-email@ik.me';
$mail->Password = 'your-password';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->Port = 587; // ou 465
Les ports SMTP
465 et 587
Les ports SMTP
465 et 587 sont utilisés pour l'envoi d'e-mails à travers le réseau Internet.
-
Le port 465 a été initialement désigné pour le
SMTP
sécurisé via SSL (Secure Sockets Layer), permettant ainsi une communication chiffrée directe dès la connexion. Le port 465 est désormais obsolète et remplacé par le port 587, qui est recommandé pour la soumission de courriels par les clients de messagerie. -
Le port 587 utilise
STARTTLS
, une extension du protocoleSMTP
qui permet de passer d'une connexion non sécurisée à une connexion sécurisée TLS (Transport Layer Security) avant l'envoi des données, ce qui renforce la sécurité des communications électroniques.
Remplacez 'your-email@ik.me'
par votre adresse e-mail Infomaniak et 'your-password'
par votre mot de passe.
-
Ensuite, utilisez les données du formulaire pour définir l'expéditeur, le destinataire, le sujet et le corps de l'e-mail.
-
Enfin, utilisez la méthode
send()
de PHPMailer pour envoyer l'e-mail.Puisque que nous faisons appel à une ressource extérieure (le serveur de mail) nous allons placer le code d'envoi du mail dans un bloc
try catch
:try {
...
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
Une solution possible
Voici comment vous pouvez faire cela :
<!-- fichier index.html -->
<form action="send_mail.php" method="post">
<label for="name">Votre nom :</label><br>
<input type="text" id="name" name="name"><br>
<label for="email">Votre email :</label><br>
<input type="text" id="email" name="email"><br>
<label for="message">Votre message :</label><br>
<textarea id="message" name="message"></textarea><br>
<input type="submit" value="Envoyer">
</form>
// fichier send_mail.php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
$mail->isSMTP();
$mail->Host = 'mail.infomaniak.com';
$mail->SMTPAuth = true;
$mail->Username = 'your-email@ik.me'; // Remplacez par votre adresse e-mail Infomaniak
$mail->Password = 'your-password'; // Remplacez par votre mot de passe
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->Port = 587;
$mail->setFrom($_POST['email'], $_POST['name']);
$mail->addAddress('your-email@example.com'); // Remplacez par votre adresse e-mail
$mail->Subject = 'Nouveau message de ' . $_POST['name'];
$mail->Body = $_POST['message'];
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
Si erreur : "activate openssl
"
Pour activer l'extension PHP openssl
sous Windows, suivez les étapes suivantes :
-
Trouver le fichier
php.ini
:- Recherchez le fichier
php.ini
avec la commandephp --ini
.
- Recherchez le fichier
-
Décommenter l'extension
openssl
:- Ouvrez le fichier
php.ini
avec un éditeur de texte. - Recherchez la ligne
;extension=openssl
. - Supprimez le point-virgule au début de la ligne pour décommenter l'extension :
extension=openssl
.
- Ouvrez le fichier
-
Télécharger le certificat CA Root :
- Téléchargez le certificat CA Root depuis Mozilla (une source fiable) https://curl.se/docs/caextract.html
- Déplacez et renommez ce fichier dans :
c:\php\cacert.pem
-
Configurer le chemin du certificat dans
php.ini
:- Trouvez la section
[openssl]
dans le fichierphp.ini
. - Ajoutez ou modifiez la ligne suivante pour indiquer le chemin vers le certificat CA Root que vous avez téléchargé :
openssl.cafile=c:\php\cacert.pem
- Trouvez la section
-
Redémarrer le serveur Web :
- Après avoir effectué ces modifications, enregistrez le fichier
php.ini
. - Redémarrez votre serveur Web pour que les changements prennent effet.
- Après avoir effectué ces modifications, enregistrez le fichier
Une fois ces étapes suivies, l'extension
openssl
devrait être activée et prête à être utilisée dans vos scripts PHP sur Windows.
Il ne faut pas stocker des informations confidentielles dans vos fichiers PHP !
Pour cela il est préconisé d'utiliser des variables d'environnement.
TP - Envoi d'un mail sécurisé
Dans ce TP, vous allez toujours utiliser votre formulaire de contact mais vous allez utilisez des variables d'environnement pour stocker vos informations confidentielles qui vont servir à envoyer un e-mail lorsque quelqu'un remplit le formulaire.
Pour réaliser ce TP, suivez les étapes suivantes :
-
Créez un dossier
tp-mail-env
dans le dossier de vos Documents. -
Dans votre dossier
tp-mail-env
, installez la bibliothèque PHPMailer avec la commandecomposer require phpmailer/phpmailer
. -
Créez le fichier
.env
:
SMTP_HOST=mail.infomaniak.com
SMTP_USERNAME=your-email@ik.me
SMTP_PASSWORD=your-password
-
Dans le fichier
.env
, définissez les variablesSMTP_HOST
,SMTP_USERNAME
etSMTP_PASSWORD
avec les informations de connexion à votre serveur SMTP Infomaniak. -
Créez le fichier
send_mail.php
pour :
- charger le fichier
.env
, - configurer PHPMailer
- et envoyer un mail.
...
$mail->Host = $_ENV['SMTP_HOST'];
$mail->Username = $_ENV['SMTP_USERNAME'];
$mail->Password = $_ENV['SMTP_PASSWORD'];
...
-
Remplacez
mon-email@example.com
par votre adresse email. -
Démarrez le serveur Web intégré à PHP.
-
Tester l'envoi d'un mail, à partir de votre navigateur.
Pour plus d'infos, vous pouvez consulter le tutoriel Utilisation d'un fichier .env.
Une solution plus sécurisée
Vous devez être connecté pour voir le contenu.