Fermer

juin 16, 2020

Envoi d'emails en PHP avec PHPMailer –


PHPMailer est peut-être la bibliothèque PHP open source la plus populaire avec laquelle envoyer des e-mails. Il a été publié pour la première fois en 2001, et depuis lors, il est devenu le moyen préféré des développeurs PHP pour envoyer des e-mails par programme, à part quelques autres favoris des fans comme Swiftmailer .

Dans cet article, nous ' Je vais vous expliquer pourquoi vous devriez utiliser PHPMailer au lieu de la fonction mail () PHP (19459009] de PHP, et nous montrerons quelques exemples de code sur la façon d'utiliser cette bibliothèque.

Cet article populaire a été mis à jour en 2020 pour offrir la

Est-ce une alternative à la fonction mail () de PHP (19459009]?

Dans la plupart des cas, il s'agit d'une alternative à la messagerie de PHP () (19659005]. mais il existe de nombreux autres cas où la fonction mail () n'est tout simplement pas assez flexible pour atteindre ce dont vous avez besoin.

Tout d'abord, PHPMailer fournit une interface orientée objet, alors que mail () n'est pas orienté objet. Les développeurs PHP détestent généralement créer des chaînes $ headers lors de l'envoi d'e-mails à l'aide de la fonction mail () car ils nécessitent beaucoup d'échappement. PHPMailer en fait un jeu d'enfant. Les développeurs doivent également écrire du code sale (caractères d'échappement, encodage et formatage) pour envoyer des pièces jointes et des e-mails HTML lors de l'utilisation de la fonction mail () tandis que PHPMailer rend cela indolore.

En outre, le mail () nécessite un serveur de messagerie local pour envoyer des e-mails, ce qui n'est pas toujours simple à configurer. PHPMailer peut utiliser un serveur de messagerie non local (SMTP) si vous disposez d'une authentification.

D'autres avantages incluent:

  • Il peut imprimer différents types de messages d'erreur dans plus de 40 langues lorsqu'il ne parvient pas à envoyer un e-mail. [19659010] Il a intégré la prise en charge du protocole SMTP et l'authentification sur SSL et TLS.
  • Il peut envoyer une version alternative en texte brut des e-mails pour les clients de messagerie non HTML.
  • Il a une communauté de développeurs très active qui le maintient sécurisé et

PHPMailer est également utilisé par les systèmes de gestion de contenu PHP populaires comme WordPress, Drupal et Joomla.

Installation de PHPMailer

Vous pouvez installer PHPMailer à l'aide de Composer:

 composer nécessite phpmailer / phpmailer

Envoi d'e-mails à partir d'un serveur Web local à l'aide de PHPMailer

Voici l'exemple le plus simple d'envoi d'un e-mail à partir d'un serveur Web local à l'aide de PHPMailer:

 From = "from@yourdomain.com";
$ mail-> FromName = "Nom complet";

// À l'adresse et au nom
$ mail-> addAddress ("recepient1@example.com", "Nom du destinataire");
$ mail-> addAddress ("recepient1@example.com"); // Le nom du destinataire est facultatif

// Adresse à laquelle le destinataire répondra
$ mail-> addRhnessTo ("reply@votredomaine.com", "Répondre");

// CC et BCC
$ mail-> addCC ("cc@example.com");
$ mail-> addBCC ("bcc@example.com");

// Envoyer un e-mail HTML ou texte brut
$ mail-> isHTML (true);

$ mail-> Subject = "Subject Text";
$ mail-> Body = " Corps du courrier en HTML ";
$ mail-> AltBody = "Ceci est la version en texte brut du contenu de l'e-mail";

essayez {
    $ mail-> send ();
    echo "Le message a été envoyé avec succès";
} catch (Exception $ e) {
    echo "Mailer Error:". $ mail-> ErrorInfo;
}

Le code et les commentaires doivent être suffisamment clairs pour expliquer tout ce qui se passe.

Envoi d'un e-mail avec des pièces jointes

Voici un exemple de la façon d'envoyer un e-mail avec des pièces jointes à l'aide de PHPMailer:

 From = "from @ votredomaine.com ";
$ mail-> FromName = "Nom complet";

$ mail-> addAddress ("recipient1@example.com", "Recipient Name");

// Indiquez le chemin du fichier et le nom des pièces jointes
$ mail-> addAttachment ("file.txt", "File.txt");
$ mail-> addAttachment ("images / profile.png"); // Le nom de fichier est facultatif

$ mail-> isHTML (true);

$ mail-> Subject = "Subject Text";
$ mail-> Body = " Corps du courrier en HTML ";
$ mail-> AltBody = "Ceci est la version en texte brut du contenu de l'e-mail";

essayez {
    $ mail-> send ();
    echo "Le message a été envoyé avec succès";
} catch (Exception $ e) {
    echo "Mailer Error:". $ mail-> ErrorInfo;
}

Ici, nous attachons deux fichiers - file.txt qui réside dans le même répertoire que le script, et images / profile.png qui réside en images répertoire du répertoire de script.

Pour ajouter des pièces jointes à l'e-mail, il suffit d'appeler la fonction addAttachment de l'objet PHPMailer en passant le chemin du fichier comme argument. Pour joindre plusieurs fichiers, nous devons l'appeler plusieurs fois.

Dépannage

Dans nos deux exemples, nous avons utilisé la classe d'exception de PHPMailer pour le débogage, donc toute erreur levée nous aidera à déboguer tout problème qui peut se produire. Nous avons également ajouté l'argument true à Constructeur PHPMailer pour produire des exceptions de niveau supérieur et plus descriptives.

Selon le système que nous utilisons, l'erreur la plus fréquente sera probablement voir sera lié à l'exécution de la fonction mail () en arrière-plan:

Erreur de messagerie: impossible d'instancier la fonction de messagerie.

Si nous avons besoin de plus de détails sur l'erreur, nous pouvons également ajouter quelque chose comme ceci à la clause catch:

 print_r (error_get_last ());

Habituellement, le problème avec la fonction de messagerie sera lié à la configuration du serveur de messagerie manquante, auquel cas la fonction error_get_last renverra quelque chose comme ceci:

 Array (
    [type] => 2
    [message] => mail (): Impossible de se connecter au serveur de messagerie sur le port "localhost" 25, vérifiez vos paramètres "SMTP" et "smtp_port" dans php.ini ou utilisez ini_set ()
    [file] => OUR_PATH  vendor  phpmailer  phpmailer  src  PHPMailer.php
    [line] => 863
)

C'est le problème que nous rencontrerons probablement le plus fréquemment, et nous pouvons le résoudre facilement en utilisant SMTP.

Affichage des messages d'erreur localisés

$ mail-> ErrorInfo peut renvoyer des messages d'erreur dans 43 langues différentes.

Pour afficher les messages d'erreur dans une autre langue, copiez le répertoire language du code source de PHPMailer vers le répertoire du projet.

Pour renvoyer des messages d'erreur en russe, par exemple, définissez l'objet PHPMailer à la langue russe en utilisant l'appel de méthode ci-dessous:

 $ mail-> setLanguage ("ru");

Vous pouvez également ajouter vos propres fichiers de langue au répertoire de langue .

Utilisation de SMTP

Vous pouvez utiliser le serveur de messagerie d'un autre hôte pour envoyer des e-mails, mais pour cela, vous devez d'abord d'avoir une authentification. Par exemple, pour envoyer un e-mail depuis le serveur de messagerie de Gmail, vous devez disposer d'un compte Gmail.

SMTP est un protocole utilisé par les clients de messagerie pour envoyer une demande d'envoi d'e-mail à un serveur de messagerie. Une fois que le serveur de messagerie a vérifié l'e-mail, il l'envoie au serveur de messagerie de destination.

Voici un exemple d'envoi d'un e-mail depuis le serveur de messagerie de Gmail depuis votre domaine. Vous n'avez pas besoin d'un serveur de messagerie local pour exécuter le code. Nous utiliserons le protocole SMTP:

  SMTPDebug = 3;
// Configurez PHPMailer pour utiliser SMTP.
$ mail-> isSMTP ();
// Définir le nom d'hôte SMTP
$ mail-> Host = "smtp.gmail.com";
// Définissez ce paramètre sur true si l'hôte SMTP nécessite une authentification pour envoyer un e-mail
$ mail-> SMTPAuth = true;
// Fournissez le nom d'utilisateur et le mot de passe
$ mail-> Username = "name@gmail.com";
$ mail-> Password = "super_secret_password";
// Si SMTP nécessite un cryptage TLS, définissez-le
$ mail-> SMTPSecure = "tls";
// Définir le port TCP auquel se connecter
$ mail-> Port = 587;

$ mail-> From = "name@gmail.com";
$ mail-> FromName = "Nom complet";

$ mail-> addAddress ("nom@exemple.com", "Nom du destinataire");

$ mail-> isHTML (true);

$ mail-> Subject = "Subject Text";
$ mail-> Body = " Corps du courrier en HTML ";
$ mail-> AltBody = "Ceci est la version en texte brut du contenu de l'e-mail";

essayez {
    $ mail-> send ();
    echo "Le message a été envoyé avec succès";
} catch (Exception $ e) {
    echo "Mailer Error:". $ mail-> ErrorInfo;
}

Gmail nécessite un cryptage TLS sur SMTP, nous le définissons donc en conséquence. Avant d'envoyer via SMTP, vous devez connaître le nom d'hôte, le numéro de port, le type de cryptage si nécessaire et si une authentification est requise, vous avez également besoin du nom d'utilisateur et du mot de passe. Notez que l'activation de l'authentification à deux facteurs sur Gmail ne vous permettra pas d'utiliser leur SMTP avec nom d'utilisateur / mot de passe. Au lieu de cela, une configuration supplémentaire sera requise.

Un gros avantage de l'utilisation de SMTP à distance sur le courrier local est que si vous utilisez la fonction mail [)de1945(009](( de PHP pour envoyer des e-mails avec la ] de domaine d'adresse défini sur autre chose que le nom de domaine local (nom du serveur), les filtres d'attaque du serveur de messagerie du destinataire le marqueront comme spam. Par exemple, si vous envoyez un e-mail à partir d'un serveur avec le nom d'hôte réel example.com avec l'adresse de name@gmail.com à nom @ yahoo.com les serveurs de Yahoo le marqueront comme spam ou afficheront un message à l'utilisateur pour ne pas faire confiance à l'e-mail car l'origine du courrier est example.com et pourtant il se présente comme s'il venait dans gmail.com . Bien que vous possédiez name@gmail.com Yahoo n'a aucun moyen de le découvrir.

Récupération des e-mails à l'aide de POP3

PHPMailer permet également la vérification de POP-avant-SMTP pour envoyer des e-mails. En d'autres termes, vous pouvez vous authentifier à l'aide de POP et envoyer des e-mails à l'aide de SMTP. Malheureusement, PHPMailer ne prend pas en charge la récupération des e-mails à partir des serveurs de messagerie à l'aide du protocole POP3. C'est limité à l'envoi de courriels uniquement.

Conclusion

Si vous êtes un développeur PHP, il y a peu de chances d'éviter d'avoir à envoyer des courriels par programmation. Bien que vous puissiez opter pour des services tiers comme Mandrill ou SendGrid, parfois ce n'est tout simplement pas une option, et rouler votre propre bibliothèque d'envoi d'e-mails encore moins. C'est là que PHPMailer et ses alternatives (Zend Mail, Swift Mailer, etc.) entrent en jeu.

Vous pouvez en savoir plus sur les API de cette bibliothèque dans le wiki du référentiel ou dans la documentation officielle .

Êtes-vous enlisé dans les dépendances de la bibliothèque PHP? Regardez notre screencast et découvrez comment Composer peut vous aider à gérer cela pour vous.




Source link