Php envoyant du courrier via Yandex smtp. Envoi de courrier via SMTP depuis un serveur local
PHPMailer est une bibliothèque très pratique et populaire pour envoi d'e-mail messages de votre site. Cet article décrit les paramètres de base de la bibliothèque et fournit des exemples de code pour l'envoi de messages. PHPMailer a peut-être dans son assortiment tout ce que vous pourriez souhaiter en travaillant avec le courrier : l'envoi de différentes manières, via différents serveurs, dont via smtp, la possibilité de crypter et de signer vos lettres pour qu'elles ne finissent pas dans les spams et bien plus encore.
Vous pouvez télécharger la bibliothèque PHPMailer depuis https://github.com/PHPMailer/PHPMailer (le bouton "Cloner ou télécharger").
Tout d'abord, je vais en examiner quelques-uns exemples simples pour expliquer clairement comment envoyer des e-mails à l'aide de PHPMailer.
Envoi d'e-mails via la fonction mail() à l'aide de PHPMailer
Si vous souhaitez envoyer des emails depuis votre hébergement via votre serveur de messagerie, alors tout est assez simple et ressemblera à ceci :
// Inclut la bibliothèque PHPMailer use PHPMailer\PHPMailer\PHPMailer; nécessite "PHPMailer/PHPMailer.php" ; // Crée une lettre $mail = new PHPMailer(); $mail->setFrom(" [email protégé]", "Ivan Ivanov"); // de qui (e-mail et nom) $mail->addAddress(" [email protégé]", "Vasya Petrov"); // à qui (email et nom) $mail->Subject = "Test"; // sujet de la lettre // texte HTML lettres $mail->msgHTML("
Bonjour!
Ceci est une lettre test.
"); // Envoyer if ($mail->send()) ( echo "Message envoyé!"; ) else ( echo "Erreur : " . $mail->ErrorInfo; )Comme vous pouvez le constater, tout est assez simple : nous connectons la bibliothèque, renseignez de qui, à qui, le sujet et le texte de la lettre et l'envoyons. L'envoi d'e-mails de cette manière ne fonctionnera qu'à partir d'adresses e-mail de votre domaine (sauf si elles sont liées à d'autres messageries).
Envoi d'e-mails via SMTP à l'aide de PHPMailer en utilisant l'exemple de Yandex et Google
Vous pouvez également envoyer une lettre via un autre service de messagerie, par exemple via Yandex. Le code ressemblera à ceci :
// Inclut la bibliothèque PHPMailer use PHPMailer\PHPMailer\PHPMailer; utilisez PHPMailer\PHPMailer\SMTP ; nécessite "PHPMailer/PHPMailer.php" ; nécessite "PHPMailer/SMTP.php" ; // Crée une lettre $mail = new PHPMailer(); $mail->isSMTP(); // Envoi via SMTP $mail->Host = "smtp.yandex.ru"; // Adresse du serveur SMTP $mail->SMTPAuth = true; // Activer l'authentification SMTP $mail->Username = "login"; // votre nom d'utilisateur (sans domaine et @) $mail->Password = "password"; // votre mot de passe $mail->SMTPSecure = "ssl"; // cryptage SSL $mail->Port = 465 ; // port de connexion $mail->setFrom(" [email protégé]", "Ivan Ivanov"); // de qui $mail->addAddress(" [email protégé]", "Vasya Petrov"); // à qui $mail->Subject = "Test"; $mail->msgHTML("
Bonjour!
Ceci est une lettre test.
"); // Envoyer if ($mail->send()) ( echo "Message envoyé!"; ) else ( echo "Erreur : " . $mail->ErrorInfo; )Envoi d'e-mails via Google a une mise en garde : vous devez compte Google autoriser l'accès à des applications non fiables. Pour ce faire, vous devez vous connecter à votre compte https://myaccount.google.com, accéder à la sécurité, accéder à la section « Applications non fiables qui ont accès à votre compte » et y passer sur « Autorisé ». Au moment de la rédaction, cette page est https://myaccount.google.com/u/0/lesssecureapps.
$mail->Hôte = "smtp.gmail.com"; // Adresse du serveur SMTP $mail->SMTPAuth = true; // Activer l'authentification SMTP $mail->Username = "login"; // votre nom d'utilisateur $mail->Mot de passe = "mot de passe"; // votre mot de passe $mail->SMTPSecure = "ssl"; // cryptage SSL $mail->Port = 465 ; //port de connexion
Si vous exécutez le programme d'envoi via smtp pour la première fois, il est conseillé de l'utiliser en plus avant d'envoyer $mail->SMTPDebug = 1 ; pour recevoir tous les messages du client et du serveur SMTP, c'est-à-dire L'ensemble du processus de connexion, d'autorisation, etc. sera affiché à l'écran, ce qui est très utile pour déboguer votre programme.
Envoi d'un e-mail avec une pièce jointe à l'aide de PHPMailer
Tout est assez simple ici, il suffit d'utiliser la méthode ajouter une pièce jointe. Je vais donner un exemple et en même temps en démontrer quelques autres fonctionnalités supplémentaires:
// Inclut la bibliothèque PHPMailer use PHPMailer\PHPMailer\PHPMailer; utilisez PHPMailer\PHPMailer\Exception ; nécessite "PHPMailer/PHPMailer.php" ; nécessite "PHPMailer/Exception.php" ; // Crée une lettre $mail = new PHPMailer; $mail->CharSet = "UTF-8" ; $mail->setFrom(" [email protégé]", "Ivan Ivanov"); // de qui $mail->addReplyTo(" [email protégé]", "Ivan Ivanov"); // adresse de retour $mail->addAddress(" [email protégé]", "Vasya Petrov"); // à qui $mail->Subject = "Test"; // subject $mail->msgHTML(file_get_contents("contents.html"), __DIR__); // récupère le "corps" de la lettre du fichier $mail->AltBody = "Lettre en texte brut"; // lettre en texte brut si le client ne supporte pas le HTML $mail->addAttachment("my_file.txt"); // joins un fichier $mail- >addAttachment("phpmailer) .jpg"); // joindre le deuxième fichier // Envoyer if ($mail->send()) ( echo "Message envoyé!"; ) else ( echo "Erreur : " . $mail- >Informations d'erreur ; )
Vous pouvez ajouter plusieurs adresses de destinataires à l'aide de addAddress. Ou, si nécessaire, vous pouvez au contraire effacer toutes les adresses des destinataires en utilisant la méthode clearAddresses(). Vous pouvez effacer toutes les pièces jointes en utilisant clearAttachments().
Vous pouvez également utiliser Ajouter une image intégrée pour ajouter une pièce jointe (généralement une image) à l'e-mail, qui est destinée à être utilisée dans le code HTML et ne sera pas disponible au téléchargement. Un exemple d'utilisation d'une image dans une lettre qui n'est pas disponible en téléchargement :
// Inclut la bibliothèque PHPMailer use PHPMailer\PHPMailer\PHPMailer; nécessite "PHPMailer/PHPMailer.php" ; //Créer une lettre $mail = new PHPMailer; $mail->IsHTML(true); $mail->setFrom(" [email protégé]", "Ivan Ivanov"); $mail->addAddress(" [email protégé]", "Vasya Petrov"); $mail->Sujet = "Test"; $mail->AddEmbeddedImage("phpmailer.jpg","testImage"); $mail->Body = "
Image en code HTML
"; // Envoyer $mail->envoyer();Vous pouvez donc envoyer lettres avec images, qui se trouvent uniquement dans le corps de la lettre, mais ne peuvent pas être téléchargés en pièce jointe. Ces images peuvent être utilisées n'importe où dans le code html de la lettre, il vous suffit de spécifier le cid de l'image que vous avez utilisé dans AddEmbeddedImage au lieu de l'adresse url.
Envoi d'email signé et crypté via PHPMailer
Par défaut, PHPMailer crypte tous les messages envoyés. Vous pouvez désactiver le cryptage des e-mails uniquement lors de l'envoi d'e-mails via SMTP à l'aide du code :
$mail->SMTPSecure = faux ; $mail->SMTPAutoTLS = faux ;
À signez la lettre avec la signature DKIM, vous devez effectuer plusieurs étapes :
- Générez des clés privées et publiques pour votre domaine
- Ajouter un enregistrement DNS pour un domaine TXT avec une clé publique
- Configurez la signature DKIM dans PHPMailer avant d'envoyer un e-mail
Je vais maintenant décrire chaque étape un peu plus en détail.
Générer des clés privées et publiques
Si vous disposez d'un hébergement Linux et avez accès à Shell, générer des fichiers de clés est aussi simple que de décortiquer des poires ; il vous suffit d'exécuter 2 commandes avec vos droits d'utilisateur normaux :
Openssl genrsa -out test-private.pem 1024 openssl rsa -in test-private.pem -out test-public.pem -pubout
Respectivement, test-privé.pem Et test-public.pem- ce sont des clés privées et publiques. Vous devez les enregistrer dans un dossier qui ne sera pas accessible aux visiteurs du site ou à toute autre personne que vous.
S'il n'est pas possible d'exécuter des commandes dans le shell, alors pour générer des clés privées et publiques et les enregistrer dans des fichiers, vous pouvez utiliser le code suivant :
$domain = "test.ru" ; // votre domaine $privatekeyfile = "test-private.pem"; // nom du fichier dans lequel sera écrite la clé privée $publickeyfile = "test-public.pem"; // nom du fichier dans lequel sera écrite la clé publique if (file_exists($privatekeyfile)) ( echo "
Utiliser des clés existantes
"; $privatekey = file_get_contents($privatekeyfile); $publickey = file_get_contents($publickeyfile); ) else ( echo "Créer des clés"; $pk = openssl_pkey_new([ "digest_alg" => "sha256", "private_key_bits" => 2048, "private_key_type" => OPENSSL_KEYTYPE_RSA, ]); openssl_pkey_export_to_file($pk, $privatekeyfile); $pubKey = openssl_pkey_get_details($pk) ); $publickey = $pubKey["key"]; file_put_contents($publickeyfile, $publickey = file_get_contents($privatekeyfile);
Clé privée (gardez-la privée !) :
" . $clé privée . "" ; écho "
Clé publique :
" . $clé publique ."";
Attention! N'oubliez pas de vous assurer que le dossier dans lequel les fichiers seront enregistrés est accessible en écriture.
Ajouter un enregistrement DNS avec une clé publique
Un enregistrement DNS est nécessaire pour que les serveurs de messagerie qui recevront vos lettres puissent vérifier la signature sur la lettre en lisant l'enregistrement DNS de votre domaine. En règle générale, vous pouvez ajouter un enregistrement DNS dans le panneau de contrôle de votre domaine ou dans votre panneau de contrôle d'hébergement. Si vous ne savez pas comment ajouter une entrée, contactez le support de votre fournisseur d'hébergement.
Vous devez ajouter un enregistrement DNS comme celui-ci :
Nom de l'entrée : mail._domainkey.test.ru. (à la fin il y a un point ".")
Durée de vie : 3600 (ou selon ce qui sera la valeur par défaut)
Type de message : SMS
Signification: v=DKIM1; h=sha256; t = s ; p = VOTRE_PUBLIC_KEY
Dans le nom de l'entrée test.ru doit être remplacé par votre nom de domaine. Vous remplacez les mots "YOUR_PUBLIC_KEY" par le texte que vous avez reçu à l'étape précédente après "Public key", sans "-----BEGIN PUBLIC_KEY-----" et "-----END PUBLIC KEY- -- --", uniquement la clé elle-même. Dans ce cas, toutes les lignes de la clé sont nécessaires concaténer en une longue ligne afin qu'il n'y ait pas de sauts de ligne.
Configuration de la signature DKIM dans PHPMailer et envoi d'un email
Il ne reste plus qu'à effectuer quelques réglages PHPMailer avant d'envoyer la lettre et elle sera signée. Je pense que l'exemple suivant rendra tout clair :
// Inclut la bibliothèque use PHPMailer\PHPMailer\PHPMailer; nécessite "PHPMailer/PHPMailer.php" ; // Crée une lettre $mail = new PHPMailer; $mail->CharSet = "UTF-8" ; $mail->setFrom(" [email protégé]"); $mail->addAddress(" [email protégé]"); $mail->Sujet = "Ceci est un test"; $mail->msgHTML("
Ceci est un essai
"); // Configuration d'une signature DKIM $mail->DKIM_domain = "test.ru"; $mail->DKIM_private = "test-private.pem"; $mail->DKIM_selector = "mail"; // Envoyer $ mail->envoyer();Bien sûr test.ru vous devez changer votre nom de domaine, et test-privé.pem au chemin complet et au nom du fichier de clé privée créé lors de l’étape de génération de clé.
Désormais, vos e-mails envoyés via PHPMailer seront signés DKIM avec votre clé privée.
Pour qu'un certain site Web ait la possibilité de fonctionner de manière efficace et productive, sa création doit être abordée de manière aussi responsable et prudente que possible. Le choix du système qui sera utilisé pour créer une boutique en ligne mérite une attention particulière. Le fait est qu'une plateforme commerciale spécialisée dans la vente de biens ou de services doit permettre la mise en œuvre de toutes les fonctionnalités nécessaires et être simple à utiliser, tant pour les administrateurs impliqués dans la maintenance et le remplissage des sites que pour les clients des boutiques en ligne. De nombreuses personnes et entreprises confrontées à la question de choisir un CMS qui leur convient analysent s'il convient de choisir Magento ou OkayCMS. Comparons les fonctionnalités et les capacités de ces moteurs de sites Web.
Lorsqu'elle travaille sur son propre site Web, une personne ou une entreprise devra déployer beaucoup d'efforts - ce n'est que dans ce cas que vous pourrez compter sur des résultats positifs et obtenir un outil vraiment efficace. L’une des questions fondamentales à résoudre avant même de commencer à créer un site Web sera de savoir comment décider de l’option CMS la plus adaptée. Ensuite, nous comparerons deux CMS : Joomla ou OkayCMS, et ferons attention aux fonctionnalités de chacun d'eux.
Avoir votre propre site Web est l’une des exigences fondamentales pour une entreprise efficace et prospère. Les statistiques indiquent clairement une augmentation du nombre d'achats de biens divers et de commandes de services via Internet. Compte tenu de cela, la plupart des entreprises commerciales sont déjà conscientes de la nécessité de disposer de leur propre site Web. Cependant, le simple fait de disposer d’une ressource Internet ne suffit pas pour compter sur son efficacité, sa rentabilité et les bénéfices commerciaux attendus.
Lorsque vous vous préparez à créer votre propre site Web ou à ouvrir une boutique en ligne, vous devez prendre en compte et analyser de nombreux problèmes, ainsi que résoudre divers problèmes. Ce n'est que dans ce cas que vous pourrez compter sur le fait que votre projet apportera des résultats positifs et pourra pleinement répondre à vos attentes. Parmi les différentes problématiques liées au développement d’une boutique en ligne, la question du choix d’un CMS mérite une attention particulière. Pour vous permettre de décider plus facilement du moteur optimal pour vous-même, dans
Lorsqu'ils envisagent de créer leur propre site Internet pour une future boutique en ligne, un assez grand nombre de personnes et même des entreprises spécialisées dans la vente sont confrontées à un choix difficile et extrêmement important : lequel des CMS existants choisir. Si vous réfléchissez à ce qu'il faut choisir : PrestaShop ou OkayCMS, nous vous proposons de lire cet article, dans lequel nous comparerons ces deux systèmes de création de sites Internet, notamment de boutiques en ligne.
2019-08-05
Bonjour, cher visiteur !
Veuillez me pardonner le retard dans la mise à jour du blog. Mais il existe une explication tout à fait compréhensible à cela. Après tout, c'était l'été, la datcha, les invités, la forêt, l'eau et bien plus encore, ce qui ne m'a pas permis d'aborder les problématiques de création d'un site internet. Mais maintenant, je me suis un peu libéré, les invités sont partis et je pense que maintenant je pourrai certainement y prêter attention.
Ainsi, après que dans le dernier article nous ayons connecté le courrier de notre domaine à l'un des services de messagerie, voyons maintenant comment vous pouvez envoyer du courrier électronique depuis le site. De plus, de manière à ce que nos courriers ne finissent pas dans le SPAM, mais soient livrés de manière fiable et avec un degré de probabilité élevé à nos destinataires.
En général, il existe une fonction mail() intégrée pour envoyer des lettres en PHP. Mais il convient de noter que malgré la simplicité de cette méthode (dans ce cas, pour envoyer des lettres il suffit de spécifier une seule ligne de code avec certains paramètres), l'utilisation de cette option présente un inconvénient important lié au problème du SPAM. .
Le fait est que les filtres anti-SPAM des serveurs de messagerie côté destinataire ne favorisent pas vraiment les courriers envoyés via la fonction mail(). Et dans la plupart des cas, ces messages sont filtrés voire supprimés avant de parvenir au destinataire.
Et afin d'éliminer autant que possible de tels cas, une autre option est généralement utilisée, dans laquelle les lettres sont envoyées comme si elles avaient été effectuées par un service de messagerie tiers.
Cette méthode est appelée envoi de courrier via SMTP avec autorisation. Ce que nous examinerons aujourd'hui en utilisant l'exemple de la soumission d'un formulaire retour. De plus, pour cela nous utiliserons la bibliothèque PHPMailer assez connue et populaire, qui permet d'organiser tout simplement l'envoi de courriers via SMTP.
- Comment nous enverrons les lettres de commentaires
- Créer un formulaire de commentaires
- Installation de la bibliothèque PHPMailer
- Nous créons un script pour envoyer du courrier via SMTP
- Vérification de l'envoi d'e-mails
- Fichiers sources site
Comment nous enverrons les lettres de commentaires
Avant de commencer travaux pratiques Après avoir envoyé des lettres de commentaires, nous déciderons d’abord de la manière dont nous procéderons.
Le formulaire de feedback est conçu pour permettre à l'utilisateur de communiquer avec l'administrateur du site pour lui transmettre son message. Généralement, ce formulaire se compose de plusieurs champs et d'un bouton « Soumettre ».
En principe, pour envoyer un email, il suffit d'utiliser seulement quelques champs qui fournissent suffisamment d'informations sur l'utilisateur et le contenu du message, tels que :
- "Nom" - pour saisir le nom de l'expéditeur du message ;
- "E-mail" - pour l'adresse e-mail expéditeur;
- « Objet du message » ;
- "Texte du message".
Bien que vous puissiez en ajouter d’autres. Par exemple, un numéro de téléphone, si cela est vraiment nécessaire.
Dans notre cas, ces lettres seront envoyées à l’adresse de l’administrateur du site depuis une véritable boîte aux lettres avec autorisation sur le service de messagerie auquel notre domaine est connecté.
Puisque dans l'article précédent, nous nous sommes concentrés sur la vérification de la connexion du courrier de domaine au service Yandex.Mail, nous enverrons du courrier pour cette option. Bien que ce ne soit pas important. Ci-dessous, vous verrez les options qui, une fois modifiées, vous permettront d'envoyer des e-mails via le serveur de messagerie Mail.ru.
En tant que véritable boîte aux lettres à partir de laquelle les lettres seront envoyées, nous utiliserons le compte d'un utilisateur de messagerie de domaine nouvellement créé, par exemple avec l'adresse [email protégé]. Et nous enverrons ces lettres à boîte aux lettres administrateur [email protégé], que nous avons créé précédemment dans l'article précédent.
Ainsi, l'expéditeur de la lettre du formulaire de feedback sera la boîte aux lettres [email protégé]., et le destinataire - [email protégé]. Dans ce cas, toutes les informations sur l'utilisateur qui a envoyé le message avec son contenu seront transmises dans le corps de la lettre envoyée.
Créer un formulaire de commentaires
Après avoir décidé de la procédure d'envoi des lettres, nous allons maintenant créer un formulaire de commentaires avec lequel nous le ferons.
Ci-dessous le code HTML de ce formulaire, que nous placerons sur la page "Contacts" (fichier kontakty.php dans le répertoire des articles).