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 mail avec PHPMailer :
- créer un nouvel objet
PHPMailer
, - définir l'expéditeur et le destinataire du mail,
- définir le sujet et le corps du mail,
- envoyer le mail avec la méthode
send()
.
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}";
}
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
Avec une adresse email Infomaniak vous pouvez consulter le guide Utiliser l'envoi authentifié de mail depuis un site Web
Comparatif des ports SMTP
25, 465 et 587
Port | Usage principal | Sécurité | Statut actuel | Recommandations d'usage |
---|---|---|---|---|
25 | Relais SMTP (serveur à serveur) | Faible (non chiffré par défaut) | Standard historique, souvent bloqué | À éviter pour l’envoi depuis un poste client. |
465 | SMTP sécurisé (SMTPS, SSL/TLS direct) | SSL/TLS natif | Déprécié | À éviter, remplacé par le 587 avec STARTTLS ; encore utilisé par certains services. |
587 | Soumission SMTP (client à serveur) | STARTTLS (chiffré) | Standard moderne, recommandé | Port par défaut pour l’envoi sécurisé d’emails depuis un client. |
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.