Base de connaissances
1 000 FAQ, 500 tutoriels et vidéos explicatives. Ici, il n'y a que des solutions !
Utiliser PHPMailer sur Infomaniak
Ce guide explique comment utiliser PHPMailer avec les hébergements Web Infomaniak pour envoyer des e-mails depuis un site Web.
⚠ ATTENTION ⚠
Infomaniak garantit la conformité de ses services aux protocoles standards (IMAP, S3, etc.) mais ne fournit pas d'aide supplémentaire pour les services ou logiciels externes, car leur configuration peut changer selon le fournisseur ou l'éditeur. Ce guide est donc fourni à titre indicatif et sa mise en place reste sous votre responsabilité (réf.: Politique de support / Art. 11.9 des CGU). Si besoin, une personne qualifiée peut vous accompagner.
Préambule
- PHPMailer est une librairie PHP permettant de créer et d'envoyer des e-mails depuis un site Web, notamment via SMTP.
- Elle permet notamment d'envoyer des messages au format HTML, d'ajouter une version texte alternative, de gérer les pièces jointes et d'utiliser une authentification SMTP.
- Pour un envoi authentifié via SMTP, l'environnement PHP utilisé par le site doit être compatible avec une connexion chiffrée récente, notamment TLS 1.2 ou supérieur.
- Une version trop ancienne de PHP ou de la librairie OpenSSL utilisée par PHP peut provoquer une erreur de connexion ou d'authentification, même si l'adresse mail et le mot de passe sont corrects.
- N'utilisez pas PHP 5.3/5.4 pour ce type d'envoi ; utilisez une version de PHP récente et maintenue.
- Avec l'envoi SMTP authentifié, l'adresse utilisée comme expéditeur doit correspondre à l'adresse mail utilisée pour l'authentification SMTP.
Installer PHPMailer
Pour utiliser PHPMailer, installez la librairie dans les fichiers de votre site Web.
- Téléchargez PHPMailer depuis son dépôt officiel ou installez-la avec Composer si votre projet l'utilise.
- Copiez les fichiers de PHPMailer dans un répertoire de votre site Web par FTP.
Chargez les fichiers nécessaires dans votre script PHP, en adaptant le chemin selon l'emplacement choisi:
use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require **DIR** . '/PHPMailer/src/Exception.php'; require **DIR** . '/PHPMailer/src/PHPMailer.php'; require **DIR** . '/PHPMailer/src/SMTP.php';
Configurer l'envoi SMTP avec Infomaniak
Utilisez les paramètres SMTP authentifiés suivants:
- Serveur SMTP:
mail.infomaniak.com - Port:
465 - Chiffrement:
SMTPS/ SSL-TLS - Authentification: obligatoire
- Nom d'utilisateur: l'adresse mail complète
- Mot de passe: le mot de passe de l'adresse mail utilisée
Exemple de configuration complète:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require **DIR** . '/PHPMailer/src/Exception.php';
require **DIR** . '/PHPMailer/src/PHPMailer.php';
require **DIR** . '/PHPMailer/src/SMTP.php';
$mail = new PHPMailer(true);
try {
// Configuration SMTP
$mail->isSMTP();
$mail->Host = 'mail.infomaniak.com';
$mail->SMTPAuth = true;
$mail->Username = '[sender@domain.xyz](mailto:sender@domain.xyz)';
$mail->Password = 'mot_de_passe_de_l_adresse_mail';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->Port = 465;
$mail->CharSet = 'UTF-8';
```
// Expéditeur
// L'adresse doit correspondre à celle utilisée pour l'authentification SMTP.
$mail->setFrom('sender@domain.xyz', 'Nom du site');
// Destinataire
$mail->addAddress('recipient@example.com');
// Adresse de réponse facultative
$mail->addReplyTo('sender@domain.xyz', 'Nom du site');
// Contenu du message
$mail->isHTML(true);
$mail->Subject = 'Message envoyé depuis le site';
$mail->Body = '<p>Contenu HTML du message.</p>';
$mail->AltBody = 'Contenu texte du message.';
$mail->send();
echo 'Message envoyé';
```
} catch (Exception $e) {
echo 'Le message n’a pas pu être envoyé. Erreur: ' . htmlspecialchars($mail->ErrorInfo);
}Si votre application impose l'utilisation du port 587, utilisez STARTTLS:
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
Vérifier la version de PHP et la compatibilité TLS
L'envoi SMTP authentifié nécessite une connexion chiffrée récente. Si le site utilise une version trop ancienne de PHP, par exemple PHP 5.3, ou une librairie OpenSSL trop ancienne, PHPMailer peut échouer avant ou pendant l'authentification. Les erreurs peuvent alors être trompeuses, par exemple:
SMTP connect() failedCould not authenticatestream_socket_enable_crypto()- une erreur d'authentification alors que le mot de passe est correct
Dans ce cas, vérifiez les points suivants:
- la version de PHP utilisée par le site Web;
- la version d'OpenSSL utilisée par PHP;
- la version de PHPMailer utilisée par votre projet;
- la correspondance entre le port SMTP et le chiffrement choisi.
Pour une configuration fiable, utilisez une version récente de PHP, compatible avec TLS 1.2 ou supérieur, ainsi qu'une version actuelle de PHPMailer. Prenez connaissance de ces guides si nécessaire:
- Modifier la version de PHP d'un site Web
- Résoudre un problème PHP lié à une version obsolète
- Afficher les informations techniques du site
Résoudre une erreur Sender mismatch
L'erreur Sender mismatch SMTP code: 550 Additional SMTP info: 5.7.1 peut se produire lorsque l'adresse utilisée comme expéditeur ne correspond pas à l'adresse mail utilisée pour l'authentification SMTP. Exemple à éviter:
$mail->Username = 'sender@domain.xyz';
$mail->setFrom('another-address@domain.xyz', 'Nom du site');Dans cet exemple, le script s'authentifie avec sender@domain.xyz, mais tente d'envoyer le message avec une autre adresse d'expéditeur.
Utilisez la même adresse mail pour l'authentification SMTP et pour l'expéditeur:
$mail->Username = 'sender@domain.xyz';
$mail->setFrom('sender@domain.xyz', 'Nom du site');Le nom d'expéditeur peut être personnalisé, mais l'adresse mail doit rester cohérente avec le compte SMTP utilisé.
Cas d'un formulaire de contact
Si un visiteur renseigne son adresse mail dans un formulaire, ne l'utilisez pas comme adresse d'expéditeur du message. Utilisez l'adresse mail authentifiée comme expéditeur, puis ajoutez l'adresse du visiteur comme adresse de réponse.
Exemple:
$mail->Username = 'sender@domain.xyz';
$mail->setFrom('sender@domain.xyz', 'Formulaire du site');
$mail->addReplyTo($email_visiteur);Cette configuration permet de répondre au visiteur depuis votre logiciel de messagerie sans envoyer le message avec une adresse d'expéditeur non autorisée.
Activer le mode debug temporairement
En cas d'erreur, activez temporairement le mode debug de PHPMailer afin d'obtenir plus de détails sur la connexion SMTP:
$mail->SMTPDebug = 2;
$mail->Debugoutput = 'html';Désactivez ce mode après vos tests afin de ne pas afficher d'informations techniques aux visiteurs du site.
En savoir plus
Lien vers cette FAQ: https://faq.infomaniak.com/576
Cette FAQ a été utile?