Code d'autorisation SMTP. Envoi d'emails (SMTP vs mail PHP). Comment envoyer des e-mails avec ASP

L'envoi de messages anonymes depuis des serveurs d'hébergement virtuels Windows étant interdit, l'envoi de courriers doit se faire via un serveur SMTP, pour lequel il est également possible d'utiliser notre système de messagerie.

Comment envoyer des emails en utilisant PHP ?

Utiliser n'importe quelle classe PHP prenant en charge l'autorisation sur le serveur SMTP. Par exemple, vous pouvez utiliser l'ensemble de classes PHPMailer.

Vous pouvez également utiliser notre exemple, qui implémente l'envoi de lettres via un serveur SMTP, qui nécessite une autorisation. Par conséquent, n'oubliez pas d'ajouter les détails d'accès appropriés au script, par exemple :

// Si vous devez afficher le journal de la session SMTP, vous pouvez décommenter la ligne suivante. // $_SERVER["debug"] = vrai ; fonction MailSmtp ($reciever, $subject, $content, $headers, $debug = 0) ( $smtp_server = "smtp.site"; // Adresse du serveur SMTP$smtp_port = 25 ; //Port du serveur SMTP$smtp_user = " [email protégé]" ; // Nom d'utilisateur pour l'autorisation sur le serveur SMTP$smtp_password = "pAsSwORd" ; // Mot de passe d'autorisation sur le serveur SMTP$mail_from = " [email protégé]" ; // Boîte aux lettres à partir de laquelle la lettre est envoyée$sock = fsockopen ($smtp_server, $smtp_port, $errno, $errstr, 30) ; $str = fgets ($chaussette, 512) ; if (! $sock ) ( printf ( "Le socket n'est pas créé\n" ); exit(1 ); ) smtp_msg ($sock , "HELO " . $_SERVER [ "SERVER_NAME" ]); smtp_msg($sock, "CONNEXION AUTHIQUE"); smtp_msg ($sock, base64_encode ($smtp_user)); smtp_msg ($sock, base64_encode ($smtp_password)); smtp_msg ($sock , "MAIL DE :<" . $mail_from . ">" ); smtp_msg ($sock, "RCPT TO :<" . $reciever . ">" ); smtp_msg ($sock , "DATA" ); $headers = "Sujet : " . $subject . "\r\n" . $headers ; $data = $headers . "\r\n\r\n" . $content . "\r\n." ; smtp_msg ($sock , $data ); smtp_msg ($sock , "QUIT" ); fclose ($sock ); ) fonction smtp_msg ($sock , $msg ) ( si ( ! $sock ) ( printf ("Socket cassé!\n" ); exit(1 ); ) if (isset($_SERVER [ "debug" ]) && $_SERVER [ "debug" ]) ( printf ( "Envoyer de notre part : %s
" , nl2br (htmlspecialchars ($msg )); ) fputs ($sock , " $msg \r\n" ); $str = fgets ($sock , 512 ); if (! $sock ) ( printf ( "Le socket est down\n" ); exit(1); ) else ( if (isset($_SERVER [ "debug" ]) && $_SERVER [ "debug" ]) ( printf ("Obtenu du serveur : %s
" , nl2br (htmlspecialchars ($str )); ) $e = exploser (" " , $str ); $code = array_shift ($e ); $str = imploser ( " " , $e ); if ($code > 499 ) ( printf ( "Problèmes avec la conversation SMTP.

Code %d.
Messages
"
, $code , $str ); sortie(1); ) ) ) ?>

Téléchargez un exemple de script prêt à l'emploi avec la fonction MailSmtp() : smtpauth.php.sample

Vous pouvez utiliser la fonction MailSmtp() décrite ci-dessus pour remplacer directement la fonction mail() ; prenons un exemple de la forme la plus simple en PHP :

// En-têtes de message, ils définissent l'encodage du message, les champs De, À, etc.$headers = "Version MIME : 1.0\r\n" ; $en-têtes .= "Type de contenu : texte/html ; charset=windows-1251\r\n"; $headers .= "À : $à \r\n" ; $en-têtes .= "De : Nom de l'expéditeur " ; // mail ($à, $sujet, $message, $en-têtes); require_once "smtpauth.php" ; MailSmtp ($à, $sujet, $message, $en-têtes) ; ) ?>
À qui: Sujet: Texte: 
 
 

Pour ce formulaire travaillé sans la fonction mail(), nous avons inclus le fichier smtpauth.php via require_once et appelé la fonction MailSmtp() qui y est décrite, avec des arguments similaires à mail(). En parallèle, nous avons commenté l'appel mail() lui-même dans le code pour éviter les erreurs lors de l'exécution du script.

Comment envoyer des e-mails en utilisant ASP.NET ?

Si vous utilisez la version 2.0, utilisez la classe MailMessage Système.Net.Mail), bien décrit.

Vous trouverez ci-dessous des exemples de son utilisation pour les langages C# et VisualBasic :

Exemple pour le langage C# :

<% @Page Language="c#" %> <% @Import Namespace="System.Net.Mail" %> <% @Import Namespace="System.Net" %> <% MailMessage message = new MailMessage(); // création d'une nouvelle lettre message.À.Ajouter(" [email protégé]"); // ajout de l'adresse du destinataire message.From = new MailAddress("de@ domaine.tld", "Nom de l'expéditeur"); // précisant le nom et l'adresse de l'expéditeur message.Sujet = "Sujet du message"; // précisant le sujet de la lettre message.BodyEncoding = System.Text.Encoding.UTF8; // spécifiant l'encodage des lettres message.IsBodyHtml = false; // spécifiant le format de la lettre (true - HTML, false - pas HTML) message.Body = "Texte du message"; // précisant le texte (corps) de la lettre Client SmtpClient = new SmtpClient("smtp.site",25); // création d'une nouvelle connexion au serveur "smtp.site" client.DeliveryMethod = SmtpDeliveryMethod.Network; // définit la méthode d'envoi des messages client.EnableSsl = false; // désactive la nécessité d'utiliser une connexion sécurisée au serveur client.UseDefaultCredentials = false; // désactive l'utilisation des détails d'autorisation par défaut client.Credentials = new NetworkCredential("postmaster@ domaine.tld", "***mot de passe***"); // précisant les détails nécessaires (nom d'utilisateur et mot de passe) pour l'autorisation sur le serveur SMTP client.Send(message); // envoyer le message %>

Téléchargez un exemple de formulaire complété démontrant l'utilisation cette méthode: MailForm.aspx.

Exemple pour le langage VisualBasic :

<% @Page Language="VB" Debug="true" %> <% @Import Namespace="System.Net.Mail" %> <% @Import Namespace="System.Net" %> <% Dim smtpMssg AS new MailMessage smtpMssg.From = New MailAddress ("admin@domaine.tld", "Nom_de l'expéditeur") smtpMssg.To.Add (" [email protégé]") " ajout de l'adresse du destinataire smtpMssg.Subject = "Objet de l'e-mail" "indication de l'objet de la lettre smtpMssg.Body = "Texte du message" " indication du texte (corps) de la lettre smtpMssg.BodyEncoding = Système.Text.Encoding.UTF8 " indication de l'encodage des lettres smtpMssg.IsBodyHtml = faux " indication du format de la lettre (vrai - HTML, faux - pas HTML) Dim SmtpMail en tant que nouveau SmtpClient("smtp.site", 25) " déclaration d'un nouvel objet de type "SmtpClient" SmtpMail.DeliveryMethod = SmtpDeliveryMethod.Network "indication du mode de livraison de la lettre SmtpMail.UseDefaultCredentials = False "désactiver l'utilisation des informations d'autorisation par défaut" SmtpMail.EnableSsl = Faux " désactive la nécessité d'utiliser une connexion sécurisée au serveur SmtpMail.Credentials = new NetworkCredential("postmaster@ domaine.tld", "***mot de passe***") "indiquant les détails nécessaires (nom d'utilisateur et mot de passe) pour l'autorisation sur le serveur SMTP SmtpMail.Send(smtpMssg) "envoyer un message %>

Il existe également une classe SmtpMail obsolète (et obsolète) (utilisant l'espace de noms Système.Web.Mail). Ci-dessous un exemple de son utilisation pour le langage VisualBasic :

<% @Page Language="VB" Debug="true" %> <% @Import Namespace="System.Web" %> <% @Import Namespace="System.Web.Mail" %> <% Dim smtpMssg = new MailMessage " déclaration d'un nouvel objet de type "MailMessage" smtpMssg.From = "Nom_expéditeur domaine.tld>" "Indication du nom et de l'adresse de l'expéditeur smtpMssg.To = "admin@ domaine.tld" "indication de l'adresse du destinataire smtpMssg.BodyFormat = MailFormat.Text " indication du format de la lettre smtpMssg.BodyEncoding = Encodage.UTF8 "indiquant le codage des lettres smtpMssg.Subject = "Objet de l'e-mail" "indication de l'objet de la lettre smtpMssg.Body = "Texte du message" "indication du texte de la lettre smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",1) "indiquant la nécessité d'une autorisation SMTP sur le serveur smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "admin@ domaine.tld") "nom d'utilisateur pour l'autorisation smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "***password***") "mot de passe pour l'autorisation SmtpMail.SmtpServer = "smtp.site" " en précisant l'adresse du serveur SMTP SmtpMail.Send(smtpMssg) "envoyer un message %>

Comment envoyer des emails en utilisant ASP ?

Veuillez noter que lors de l'utilisation de notre serveur smtp, une autorisation est requise, alors n'oubliez pas d'ajouter les détails d'accès appropriés au script, par exemple :

<% iConfig = Server.CreateObject("CDO.Configuration") Set iConfig = Server.CreateObject("CDO.Configuration") With iConfig.Fields .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.сайт" .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 .Item("http://schemas.microsoft.com/cdo/configuration/languagecode") = "ru" .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "postmaster@domaine.tld" .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "mot de passe" .La mise à jour se termine par Set cdoMessage = CreateObject("CDO.Message") Avec cdoMessage Set .Configuration = iConfig .From = "Tester l'utilisateur domaine.tld>" .À = "Utilisateur " .Subject = "Bonjour, utilisateur" .TextBody = "J'écris ce message à partir d'un script ASP." .Send End With Set cdoMessage = Nothing Set iConfig = Nothing %>

Certains CMS disposent déjà d’outils intégrés d’envoi de correspondance ou de modules correspondants ; regardons les plus populaires.

WordPress

Pour ce CMS il existe un module spécial « WP Mail SMTP », un exemple de sa configuration est décrit sur la page du module.

Faites attention à l'illustration de l'exemple : dans notre système de messagerie, il est nécessaire d'utiliser le port 25 et le cryptage SSL n'est pas requis.

Joomla

Dans le panneau d'administration, allez dans la section « Paramètres généraux », sélectionnez l'onglet « Serveur ». Dans le champ « Mail », vous devez sélectionner la méthode d'envoi comme « Serveur SMTP », dans les champs « Adresse du serveur SMTP » et « Connexion SMTP » et « Mot de passe SMTP » spécifiez les détails appropriés du système de messagerie, par exemple : smtp.site, box@votre_domaine et correspondant mot de passe.

Drupal

Ce CMS possède également son propre module pour travailler avec un serveur SMTP, basé sur le PHPMailer. Vous pouvez télécharger ce module sur sa page du site du CMS Drupal, une description de l'installation du module est disponible dans l'archive qui l'accompagne.

NetCat

Ce CMS n'a pas de fonctions intégrées pour travailler avec un serveur SMTP. Pour envoyer du courrier à l'aide des scripts du site, nous pouvons vous proposer d'utiliser notre solution ; pour la connecter vous devez effectuer les étapes suivantes :

  • Téléchargez une archive avec les fichiers nécessaires depuis notre site Web ( send_auth_mail.php Et mail.inc.php) et décompressez-le sur votre ordinateur ;
  • Modifier le fichier send_auth_mail.phpà partir de l'archive, en y indiquant les détails de la connexion au serveur SMTP souhaité :

    • $mail_smtpServeur = "smtp.site"; (Adresse du serveur SMTP)
    • $mail_port = "25" ; (port de connexion)
    • $mail_nom d'utilisateur = "[email protégé]" ; (nom d'utilisateur pour l'autorisation sur le serveur SMTP)
    • $mail_mot de passe = "Mot de passe"; (mot de passe pour l'autorisation sur le serveur SMTP)
  • Créer une copie de sauvegarde du fichier domaine.tld/www/netcat/admin/mail.inc.php;
  • Telecharger des fichiers send_auth_mail.php Et mail.inc.php vers le site virtuel dans l'annuaire domaine.tld/www/netcat/admin/

domaine.tld doit être remplacé par votre nom de domaine.

La solution proposée fonctionne avec tous les modules NetCat qui utilisent les fonctions standards de ce CMS pour envoyer du mail.

Pendant longtemps, je cherchais une solution pour envoyer des lettres aux utilisateurs non pas via la fonction mail() de PHP, mais via des serveurs de messagerie SMTP. Il n'y a pas beaucoup d'informations variées sur Internet, et celles qui s'y trouvent ne fonctionnent pas tout à fait correctement, voire ne fonctionnent pas du tout. Par conséquent, j'ai tout rassemblé et écrit mon propre code, basé sur ceux prêts à l'emploi présentés sur les sites.

Pourquoi envoyer via SMTP et non par mail()

Ma réponse est assez simple : pendant un certain temps, des virus ont envoyé des tonnes de lettres via mon serveur, ce qui a conduit à l'interdiction de mon adresse IP par de nombreux services de messagerie, notamment gmail.com, et dans le cadre de cela, les utilisateurs pouvaient recevoir des lettres, donc je j'ai dû chercher une alternative, et je l'ai trouvée - c'est SMTP

Vous pourriez être intéressé de savoir pourquoi mon script est meilleur que d’autres qui traînent à l’air libre ?! je vais répondre

  1. Cela fonctionne avec Yandex, Rambler, Mail (gmail n'a pas pu gagner)
  2. Code clair. Pour le configurer, changez simplement quelques lignes
  3. Envoie des e-mails au format HTML

Voici les avantages de mon script, que je n'ai trouvé nulle part sur Internet, mais de chacun j'ai pris tout ce dont j'avais besoin. Alors, regardons le code.

Fonction smtpmail($mail_to, $subject, $message, $service="yandex") ( $config["smtp_charset"] = "windows-1251"; //encodage du message. (ou UTF-8, etc.) $config [ "smtp_from"] = "mashintop.ru"; //Votre nom - ou le nom de votre site. Sera affiché lors de la lecture dans le champ "De" $config["smtp_debug"] = false; //Si vous le souhaitez pour voir les messages d'erreur, spécifiez true au lieu de false $config["smtp_port"] = "25"; // Port de travail. Ne modifiez pas si vous n'êtes pas sûr. if($service=="yandex") ( $config[ "smtp_searcher"] = "yandex. ru"; $config["smtp_email"] = " [email protégé]"; $config["smtp_username"] = "mashintop"; //Changement du nom de votre boîte aux lettres. $config["smtp_host"] = "smtp.yandex.ru"; //serveur d'envoi de mail $config[" smtp_password "] = "moi_parol"; //Changer le mot de passe ) elseif($service=="rambler") ( $config["smtp_searcher"] = "rambler.ru"; $config["smtp_email"] = " [email protégé]"; $config["smtp_username"] = "mashintop"; //Changement du nom de votre boîte aux lettres. $config["smtp_host"] = "smtp.rambler.ru"; //serveur d'envoi de mail $config[" smtp_password "] = "moi_parol"; //Changer le mot de passe ) elseif($service=="mail") ( $config["smtp_searcher"] = "mail.ru"; $config["smtp_email"] = " [email protégé]"; $config["smtp_username"] = "mashintop"; //Changement du nom de votre boîte aux lettres. $config["smtp_host"] = "smtp.mail.ru"; //serveur d'envoi de mail $config[" smtp_password "] = "moi_parol"; //Changer le mot de passe ) elseif($service=="gmail") ( $config["smtp_searcher"] = "gmail.com"; $config["smtp_email"] = " [email protégé]"; $config["smtp_username"] = "alexeybertram"; //Changement du nom de votre boîte mail. $config["smtp_host"] = "smtp.gmail.com"; //serveur d'envoi de mail $config[" smtp_password "] = "moi_parol"; //Changer le mot de passe ) $header="Date: ".date("D, j M Y G:i:s")." +0700rn"; $header.="De : =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$config[" smtp_from"]."")))."?=<".$config["smtp_email"].">rn"; $header.="X-Mailer : La chauve-souris ! (v3.99.3) Professionalrn"; $header.="Répondre à : =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode(" ".$config["smtp_from"]."")))."?=<".$config["smtp_email"].">rn"; $header.="Priorité X : 3 (Normal)rn"; $header.="ID du message :<172562218.".date("YmjHis")."@".$config["smtp_searcher"].">rn"; $header.="À : =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("")))."? =<$mail_to>rn"; $header.="Sujet : =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$subject."" )))."?=rn"; $header.="Version MIME : 1.0rn"; $header.="Type de contenu : texte/html; charset=windows-1251rn"; $header.="Content-Transfer-Encoding: 8bitrn"; $smtp_conn = fsockopen("".$config["smtp_host"]."", $config["smtp_port"],$errno , $errstr, 10); if(!$smtp_conn) (imprimer "la connexion des serveurs a échoué"; fclose($smtp_conn); exit;) $data = get_data($smtp_conn); fputs($smtp_conn,"EHLO ". $ config["smtp_searcher"]."rn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 250) (imprimer "EHLO bonjour erreur"; fclose($smtp_conn) ; exit; ) fputs($smtp_conn,"AUTH LOGINrn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 334) (imprimer "le serveur n'a pas autorisé l'autorisation à démarrer"; fclose ($ smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_username"]."")."rn"); $code = substr(get_data($smtp_conn),0,3000) ; if ($code != 334) (print "erreur d'accès à cet utilisateur"; fclose($smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_password"].""). "rn" ); $code = substr(get_data($smtp_conn),0,3000); if($code != 235) (imprimer "mauvais mot de passe"; fclose($smtp_conn); exit;) fputs($smtp_conn,"MAIL FROM:".$config["smtp_email"]."rn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 250) (print "le serveur a refusé la commande MAIL FROM"; fclose($smtp_conn); exit;) fputs($smtp_conn,"RCPT TO:".$mail_to."rn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 250 AND $code != 251) (print "Le serveur n'a pas accepté la commande RCPT TO"; fclose($smtp_conn); exit;) fputs($smtp_conn,"DATArn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 354) (print "le serveur n'a pas accepté les DONNÉES"; fclose($smtp_conn); exit;) fputs($smtp_conn,$header."rn".$message."rn.rn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 250) (imprimer "erreur d'envoi de la lettre"; fclose($smtp_conn); exit;) fputs($smtp_conn,"QUITrn"); fclose($smtp_conn); ) fonction get_data($smtp_conn) ( $data=""; while($str = fgets($smtp_conn,515)) ( $data .= $str; if(substr($str,3,1) == " " ) ( break; ) ) return $data; ) $text_email = " Vous venez d'ajouter une annonce sur le site mashintop.ru. Vous pouvez voir ça ici
Votre clé : ".$key."

Grâce à cette clé, vous pouvez gérer votre annonce.

"; $text_email .= " "; smtpmail(" [email protégé]", "La clé de l'annonce sur mashintop.ru", $text_email, "yandex"); //utilisez Yandex smtpmail(" [email protégé]", "La clé de l'annonce sur mashintop.ru", $text_email, "mail"); //utilisez l'e-mail smtpmail(" [email protégé]", "La clé de l'annonce sur mashintop.ru", $text_email, "rambler"); //utilisez le rambler smtpmail(" [email protégé]", "La clé de la publicité sur mashintop.ru", $text_email, "gmail"); // mais gmail ne fonctionne pas :(

C'est tout, le script terminé est entre vos mains, copiez-le simplement, modifiez les valeurs du tableau $config et tout fonctionnera bien.

Examinons maintenant quelques éléments sur lesquels j'aimerais me concentrer.

Par exemple, l'erreur que nous obtenons lorsque nous essayons d'envoyer via SMTP à Google. Initialement, nous voyons ce texte d'erreur :

Pour voir quelque chose de plus précis, modifions un peu le code

Fputs($smtp_conn,"AUTH LOGINrn"); $code = substr(get_data($smtp_conn),0.3000); écho $code; if($code != 334) (imprimer "le serveur n'a pas autorisé le démarrage de l'autorisation"; fclose($smtp_conn); exit;)

Et à la fin nous obtenons une erreur très spécifique

530 5.7.0 Doit d'abord émettre une commande STARTTLS. x4sm16408296lbn.2 - gsmtp

Je ne sais pas exactement ce que cela signifie, mais je pense que cela a quelque chose à voir avec une connexion sécurisée et non sécurisée. Je ne sais pas encore comment m’en débarrasser, donc Gmail reste invaincu pour le moment.



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 des e-mails 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 l'envoi d'un formulaire de commentaires. 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 du site

Comment nous enverrons les lettres de commentaires

Avant de commencer le travail pratique d'envoi de lettres de commentaires, décidons d'abord comment nous allons le faire.

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 de l'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 dans la boîte aux lettres de l'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).

    "article" >

    Contacts

    Retour

    "contact" action = "#" méthode = "poste" >

    Formulaire de commentaires

    Pour toutes questions, demandes et propositions commerciales, vous pouvez nous contacter en utilisant le formulaire de commentaires ci-dessous.

    "bloc contact" >

    "entrée-contact" >

    "texte" identifiant = "Nom du contact" nom = "Nom du contact" titre = "Le nom doit être en russe et contenir au moins 3 caractères" motif = "{3,}" requis >

  1. "contact vide" >

    "entrée-contact" >

    "e-mail" identifiant = "Email du contact" nom = "Email du contact" requis >

  2. "sujet-contact" >

  3. "contact-commentaire" >

  4. "bouton contact" >

    "soumettre" nom = "bouton contact" valeur = "Envoyer" >

Fig.1 Code HTML du formulaire de commentaires

Vous pouvez voir à quoi ressemble finalement le formulaire de commentaires présenté ici dans la capture d'écran suivante.

Ainsi, la forme souhaitée est créée. Et maintenant, vous pouvez passer aux questions de traitement et d'envoi de données sous forme d'e-mail.

Installation de la bibliothèque PHPMailer

Comme indiqué précédemment, pour envoyer du courrier, nous utiliserons la bibliothèque PHPMailer, ce qui simplifiera considérablement l'envoi de courrier électronique via le protocole SMTP avec autorisation sur un service de messagerie tiers.

Pour l'installer, vous devez télécharger les fichiers nécessaires. Cela peut être fait à partir du service Web GitHub à l'aide de Composer (un gestionnaire de dépendances de packages pour PHP). Ou téléchargez simplement les fichiers nécessaires de la manière habituelle.

capture d'écran 73

Vous trouverez ci-dessous la page du service Web GitHub, où est marqué le lien vers le téléchargement régulier de la bibliothèque PHPMailer.

De plus, la dernière version 6.0.7, enregistrée au moment de la rédaction de cet article, peut être téléchargée à partir des documents joints.

Dans tous les cas, le fichier d'archive résultant doit être décompressé, après quoi le dossier PHPMailer-master extrait avec tout son contenu doit être placé à la racine du site. En même temps, par souci de simplicité, vous pouvez le renommer PHPMailer. Ci-dessous se trouve le contenu du dossier PHPMailer placé dans le répertoire racine du site.

Nous avons donc installé la bibliothèque PHPMailer. Après quoi, nous pouvons commencer à créer un script avec lequel nous enverrons des messages électroniques depuis notre site Web.

Nous créons un script pour envoyer du courrier via SMTP

Pour composer le script, il suffit d'utiliser les recommandations d'utilisation de PHPMailer données sur la page GitHub, que nous avons précédemment utilisées pour télécharger la bibliothèque.

Ils indiquent notamment qu'au début du script, il est nécessaire d'importer les classes PHPMailer dans l'espace de noms global. Et des lignes spécifiques de code correspondant sont données. Il existe également des exemples d'utilisation des propriétés et des méthodes de PHPMailer, notamment pour la possibilité d'envoyer du courrier via SMTP.

Mais si cela ne suffit pas, vous pouvez également utiliser la documentation, qui contient une description de toutes les propriétés et méthodes de cette bibliothèque.

capture d'écran 74

Vous trouverez ci-dessous le code de script pour envoyer du courrier à partir du formulaire de commentaires via SMTP avec autorisation. Où toutes les lignes liées à PHPMailer sont données avec explication et mises en évidence sur un fond clair.

Le reste de la partie, y compris les fragments liés à la réception et au traitement des données du formulaire, que nous devions auparavant utiliser dans d'autres processeurs, est indiqué par un fond sombre. Ils ont été abordés plus en détail plus tôt dans un article consacré spécifiquement aux problèmes d'obtention et de vérification des données d'un formulaire en PHP. Où nous avons également parlé de la fonction utilisateur universelle pour valider et traiter les données du formulaire check_symbol().

Nous placerons ce script dans le même fichier kontakty.php dans lequel nous avons précédemment créé le formulaire de commentaires.

    //----Script pour envoyer du courrier via SMTP en utilisant PHPMailer----

    //Importez les classes PHPMailer dans l'espace de noms global. Ils doivent être en haut du script, pas à l'intérieur de la fonction

    utiliser PHPMailer\PHPMailer\PHPMailer ;

    utiliser PHPMailer\PHPMailer\Exception ;

    si (!vide($_POST["bouton-contact" ])) (

    $name = $_POST["nom-contact" ];

    $name = check_symbol ($name, "Name" , "1" , "/^+\z/iu" );

    $email = $_POST["contact-email" ];

    $email = check_symbol ($email, "E-mail" , "1" , "/^+@(+\.)+(2,6)\z/i");

    $sujet = $_POST["contact-sujet" ];

    $subject = check_symbol ($subject, "Message Subject" , "1" , "0" );

    $commentaire = $_POST["contact-commentaire" ];

    $commentaire = check_symbol ($commentaire, "Texte du message", "1" , "0" );

    si (!vide($GLOBALS["alerte" ])) (

    $alerte = "Les données du formulaire n'ont pas été envoyées. Les erreurs suivantes ont été trouvées :\n".$alerte;

    inclure"alerte.php" ;

    autre {

    //Connexion de la bibliothèque

    exiger"PHPMailer/src/PHPMailer.php" ;

    exiger"PHPMailer/src/Exception.php" ;

    exiger"PHPMailer/src/SMTP.php" ;

    $mail = nouveau PHPMailer(); //Initialisation de la classe

    $de = " [email protégé]" ; //Adresse email à partir de laquelle la lettre est envoyée

    $à = " [email protégé]" ; //Adresse du destinataire

    $mail -> estSMTP(); //Utiliser le protocole SMTP

    $mail -> Hôte = "smtp.yandex.ru" ; //Adresse du serveur de messagerie

    $mail -> SMTPAuth = vrai ; //Activer le mode d'autorisation

    $mail -> Nom d'utilisateur = " [email protégé]" ; //Connexion à partir d'un domaine de messagerie connecté à un service de messagerie tiers (dans ce cas, Yandex.Mail)

    $mail -> Mot de passe = "27MrDon89" ; //Mot de passe pour la messagerie du domaine

    $mail -> SMTPSecure = "ssl" ; //Protocole de chiffrement

    $mail -> Port = "465" ; //Port du serveur SMTP

    $mail -> CharSet = "UTF-8" ; //Codage

    $mail -> setFrom ($from, "Administrateur" ); //Adresse et nom de l'expéditeur

    $mail -> addAddress ($to, "Administrateur" ); //Adresse et nom du destinataire

    $mail -> estHTML ( vrai ); //Définir le format de l'e-mail sur HTML

    $mail -> Sujet = "Formulaire de commentaires soumis"; //Objet de l'e-mail (titre)

    $mail -> Corps = "

    Nom de l'expéditeur: $nom

    L'adresse de l'expéditeur: $email

    Objet du message: $sujet

    Contenu du message: $commentaire



    " ; //Contenu du message

    $mail -> AltBody = "Texte de lettre alternatif"; //E-mail alternatif si le client de messagerie ne prend pas en charge le format HTML

    $mail -> SMTPDebug = 0 ; //Activer le débogage SMTP : 0 - désactivé (pour une utilisation normale), 1 = messages client, 2 - messages client et serveur

    si($mail -> envoyer()) (

    $alerte = "Message envoyé"; //Affiche un message dans la boîte de dialogue du navigateur concernant l'envoi réussi de la lettre

    autre {

    $alerte = "Erreur, l'e-mail ne peut pas être envoyé : ".$mail -> ErreurInfo ; // Afficher un message d'erreur

    inclure"alerte.php" ;

Fig.5 Script pour l'envoi d'e-mails via SMTP avec autorisation

Comme vous pouvez le constater, toutes les lignes directement liées à l'envoi d'un e-mail, dans lesquelles sont précisées les méthodes et propriétés nécessaires, sont accompagnées de commentaires. Cela n'a donc aucun sens de se répéter, mais nous ne pouvons nous attarder que sur certains d'entre eux, qui nécessitent en effet des explications complémentaires, à savoir :

1. Étant donné que la lettre est envoyée depuis un service de messagerie tiers, les paramètres correspondant au serveur SMTP spécifique sont appliqués ici. Dans ce cas, pour le cas d'utilisation du serveur Yandex.Mail, les valeurs de propriété suivantes sont appliquées :

  • Propriété Hôte(pos.28) - Adresse du serveur de messagerie avec la valeur smtp.yandex.ru ;
  • Propriété SMTPSécurisé
  • Propriété Port

Ces valeurs de propriété ont été extraites de la page Yandex.Help présentée dans la capture d'écran suivante.

Mais ces informations peuvent également être obtenues à partir d’autres ressources. Pour ce faire, saisissez simplement la requête appropriée dans un moteur de recherche, par exemple : « Serveur smtp Yandex ». Où trouver un grand nombre de références sur cette question.

De la même manière, les valeurs des paramètres peuvent être obtenues à partir d'autres serveurs SMTP. Vous trouverez ci-dessous une capture d'écran de la page d'aide Mail.ru, qui affiche les paramètres du serveur SMTP du service de messagerie Mail.ru.

Et ainsi, dans le cas de l'utilisation de Mail.ru comme serveur SMTP tiers, les valeurs suivantes des propriétés de la classe PHPMailer doivent être appliquées :

  • Propriété Hôte(pos.28) - Adresse du serveur de messagerie (smtp.mail.ru) ;
  • Propriété SMTPSécurisé(pos.32) - Protocole de cryptage (ssl) ;
  • Propriété Port(pos. 33) - Port du serveur SMTP (465).

Une approche similaire devrait être appliquée à d’autres services de messagerie.

2. En propriété Nom d'utilisateur(pos. 30) il est nécessaire d'indiquer l'adresse complète de la boîte aux lettres du domaine. Dans ce cas, " [email protégé]".

Cependant, si vous utilisez un compte autre qu'un compte de messagerie de domaine pour envoyer des lettres, mais une adresse directement liée au service de messagerie, par exemple " [email protégé]", alors le login ne doit être que la partie de l'adresse jusqu'au signe "@". Dans ce cas, le login aurait la valeur "feedback".

3. PHPMailer fournit une propriété SMTPDébogage(pos. 50), qui permet d'afficher différents niveaux d'erreurs sur l'écran du navigateur. Cette fonctionnalité simplifie grandement la recherche de problèmes lors du débogage d'un script.

Généralement, en mode normal, avec la valeur définie sur 0, la sortie d'informations détaillées sur l'erreur est désactivée. Mais si des problèmes surviennent lors de l'envoi du courrier ou lors du débogage, il est possible d'utiliser d'autres valeurs pour afficher des informations plus significatives sur l'erreur.

Afin de voir à quoi cela ressemble en pratique, introduisons temporairement une erreur dans les paramètres. Par exemple, dans le mot de passe de messagerie du domaine (propriété Mot de passe, pos.31). Et aussi pour afficher des informations détaillées sur l'erreur, définies temporairement dans la propriété SMTPDébogage(pos.50) valeur 1. Après, lorsque tout sera débogué et vérifié, nous désactiverons le mode de débogage SMTP, en remplaçant 1 par 0.

Dans la dernière partie du script, après avoir spécifié toutes les propriétés et méthodes nécessaires, la méthode est utilisée pour envoyer la lettre envoyer()) (pos. 51). Et si la lettre est envoyée, et la méthode envoyer() pour objet $mail renvoie vrai, puis dans la boîte de dialogue du navigateur via la variable $alerte Un message concernant l'envoi réussi du courrier s'affichera (pos. 52).

Si, pour une raison quelconque, le courrier n'a pas pu être envoyé et, par conséquent, la méthode n'a pas pu renvoyer vrai, alors cet état sera accompagné d'un message d'erreur correspondant (pos. 55).

Vérification de l'envoi d'e-mails

Après avoir créé un script pour envoyer du courrier, nous devons naturellement examiner le résultat de notre « créativité ». Avons-nous tout pris en compte ici et n’avons-nous commis aucune erreur ?

Pour ce faire, essayons, comme prévu, d'envoyer un message de l'utilisateur à l'administrateur du site à partir du formulaire de commentaires. Vous trouverez ci-dessous une capture d'écran du formulaire de commentaires avec les champs remplis avant son envoi.

Et voici le résultat de la soumission du formulaire.

Où, d'après le message dans la boîte de dialogue du navigateur, il ressort clairement que la lettre ne peut pas être envoyée en raison d'un problème avec la connexion SMTP.

Mais puisque désormais la propriété SMTPDébogage(pos. 50) reçoit la valeur 1, nous pouvons alors voir des informations détaillées sur l'erreur qui s'est produite et découvrir la raison de son apparition.

La capture d'écran suivante montre que lors de la tentative de connexion, une erreur d'authentification a été détectée, c'est-à-dire l'utilisation d'un identifiant ou d'un mot de passe incorrect.

Après avoir éliminé l'incompatibilité du mot de passe (auparavant, un mot de passe incorrect était utilisé pour pouvoir vérifier la sortie d'informations supplémentaires sur l'erreur), nous essaierons d'envoyer à nouveau le courrier.

Cette fois, tout a semblé bien se passer et nous avons reçu un message indiquant que le courrier avait été envoyé avec succès. Apparemment, à l'exception de l'erreur temporaire délibérément saisie dans le mot de passe de messagerie du domaine, nous n'avons commis aucune autre erreur.

Mais afin de nous assurer que la lettre a bien été remise au destinataire, entrons le courrier avec l'adresse [email protégé] et regardez le résultat.

Comme vous pouvez le voir, la lettre de l'adresse [email protégé], à partir duquel nous avons envoyé un e-mail portant le nom "Feedback" parvenu avec succès à l'administrateur du site. Dans le même temps, le corps de la lettre contient tout le contenu que nous avons généré dans le script à partir des données reçues du formulaire de commentaires, à savoir :

  • Nom de l'expéditeur : Nikolaï ;
  • L'adresse de l'expéditeur: [email protégé];
  • Objet du message : Vérification de l'envoi du courrier ;
  • Contenu du message : Message de test.

Désormais, après avoir vérifié avec succès l'envoi du courrier, vous pouvez désactiver le mode de débogage SMTP en attribuant la propriété SMTPDébogage(pos.50) valeur 0.

Ainsi, nous avons réalisé la tâche de créer un outil d'envoi de courrier via SMTP avec autorisation utilisant un serveur de messagerie tiers.

Par exemple, dans le prochain article, nous verrons comment envoyer des e-mails de confirmation pour récupérer les données du compte utilisateur enregistré.

Fichiers sources du site

Les fichiers sources du site avec les mises à jour effectuées dans cet article peuvent être téléchargés à partir des documents supplémentaires ci-joints :

  • fichiers du répertoire www
  • Tables de base de données MySQL

En PHP, il est très courant d'utiliser des scripts qui automatisent le processus d'envoi de lettres. Dans cet article, nous examinerons un script simple qui envoie des lettres aux destinataires via SMTP ( Protocole de transfert de courrier simple ). Il serait trop facile de se limiter à cette seule fonctionnalité ; le script prend également en charge les pièces jointes, c'est-à-dire que vous pouvez joindre un fichier pdf, txt ou doc ​​à votre lettre.

La configuration du script est assez simple : tout ce dont vous avez besoin est le login et le mot de passe de l'expéditeur pour l'e-mail à partir duquel les lettres seront envoyées.

Le script fonctionne avec la classe km_smtp_class.php, l'avantage de la classe est qu'elle prend en charge divers protocoles SSL et TLS qui assurent un transfert de données sécurisé.

Voici le script lui-même :

"smtp.mail.ru", "SMTP_port" => "25", "SMTP_email" => " [email protégé]", "SMTP_pass" => "1111111", "SMTP_type" => "null"); // Email du destinataire $Receiver = " [email protégé]"; // Sujet du message $Subject = "Envoi d'un email depuis PHP"; // Texte du message (en HTML) $Text = "Bonjour !
Message envoyé depuis le script Mowshon Site Web : http://site"; // Pièce jointe dans la lettre - l'adresse du fichier $Attachment = ""; /* $mail = new KM_Mailer(server, port, user, password, type); */ /* Le type peut être : null, tls ou ssl */ $mail = new KM_Mailer($SenderConfig["SMTP_server"], $SenderConfig["SMTP_port"], $SenderConfig["SMTP_email"], $SenderConfig["SMTP_pass"], $ SenderConfig[" SMTP_type"]); if($mail->isLogin) ( // Joindre un fichier if($Attachment) ($mail->addAttachment($Attachment);) // Ajouter plus de destinataires $mail->addRecipient( " [email protégé]"); $mail->addRecipient(" [email protégé]"); /* $mail->send(De, Pour, Objet, Texte, Objet = facultatif) */ $SendMail = $mail->send($SenderConfig["SMTP_email"], $Receiver, $Subject, $Text ); // Effacer la liste des destinataires $mail->clearRecipients(); $mail->clearCC(); $mail->clearBCC(); $mail->clearAttachments(); ) else ( echo "Une erreur s'est produite lors de connexion au serveur SMTP"; ) ?>

La configuration du script est basée principalement sur le tableau $SenderConfig, ici nous devons spécifier le SMTP : serveur, port, login et mot de passe email. Décrivons chaque clé du tableau :

SMTP_server - Adresse du serveur SMTP (adresse individuelle pour différents e-mails)

Courrier Mail.ru : Port smtp.mail.ru : 25, 587 et 465 (avec cryptage SSL)

Courrier Yandex : Port smtp.yandex.ru : 25 587 465 (port SSL)

Courrier du randonneur : Port mail.rambler.ru : 25 587 465 (port SSL)

Yahoo Mail: Port SSL smtp.mail.yahoo.com : 465

(Si vous avez besoin de l'adresse des serveurs smtp qui ne figurent pas dans la liste, écrivez dans les commentaires)

SMTP_port - Nous l'avons déjà décrit ci-dessus pour chaque serveur smtp.

SMTP_email - l'utilisateur serait plus précis, mais pour plus de clarté j'ai écrit un e-mail, nous indiquons l'adresse e-mail.

SMTP_pass - Mot de passe pour l'e-mail spécifié comme valeur dans la clé SMTP_email


SMTP_type - NULL par défaut. Le protocole par lequel les lettres seront envoyées. Protocoles : SSL et TLS

Vous pouvez ajouter des pièces jointes à une lettre en spécifiant simplement l'adresse complète du fichier dans la variable $Attachment (/var/patch/to/file/File.pdf)

Si vous avez des questions, écrivez-les dans les commentaires ci-dessous.

Courrier PHP

Cette fonction est implémentée par défaut comme l'envoi d'Email. Cette fonctionnalité ne nécessite pas de serveur tiers pour transférer les e-mails. Afin de vérifier l'exactitude de cette fonction, créez simplement un fichier test.php dans le dossier avec le site et placez-y le code suivant :

Où à la place "E-MAILDESTINATAIRE" Entrez l'e-mail auquel la lettre doit être envoyée.

Placez ce fichier à la racine de votre site.

Ensuite, saisissez www.YourDomain/test.php dans la barre d'adresse. Si une lettre est reçue à l'e-mail spécifié, alors votre hébergement fonctionne correctement avec la fonction d'envoi de lettres " Courrier PHP". Il est possible que la lettre se soit retrouvée dans le spam, elle doit donc également être vérifiée.

Si la lettre est arrivée dans un codage incompréhensible, modifiez la ligne : "Vérification de l'envoi du courrier" sur "Vérification de l'envoi du courrier", "Content-type:text/html;charset=utf-8".

Et répétez l'envoi de la lettre via la barre d'adresse de votre navigateur.

Si après les manipulations ci-dessus la lettre test ne parvient pas au destinataire final, vous devez contacter le support technique de votre hébergeur.

Parmi les inconvénients de cette méthode, il convient de noter que cette méthode ne fonctionne pas de manière cohérente. Il peut y avoir des interruptions dans l’envoi des emails du côté de l’hébergement.

Le principal inconvénient de cette méthode est que toutes les lettres envoyées aux e-mails des clients ne seront pas reconnues par les services de messagerie (gmail, mail.ru, yandex.ru) car elles ont été envoyées directement depuis votre site Web.

Le service de messagerie Gmail affiche ces lettres avec un point d'interrogation et la signature : "Le système Gmail n'a pas pu confirmer que cette lettre a été envoyée depuis le domaine VotreDomaine. Il s'agit peut-être d'un spam."

Pour éviter cette situation .

SMTP (protocole de transfert de courrier simple)

SMTP - protocole de transfert de courrier. Au total, pour configurer la transmission du courrier à l'aide de ce protocole, vous avez besoin du serveur SMTP lui-même. L'option la plus courante pour utiliser le courrier d'entreprise (domaine) yandex.ru en tant que serveur SMTP est https://pdd.yandex.ru/.

Il faut avant tout compte (mail) Yandex, sur la base duquel des e-mails seront créés pour votre domaine : « commande@VotreDomaine » « info@VotreDomaine »... Le compte principal ne sera visible nulle part et est utilisé uniquement pour créer des e-mails de domaine basés sur celui-ci à l'avenir.

Après autorisation dans votre compte personnel Yandex, un domaine mail est créé sur le lien https://pdd.yandex.ru/. Il s'agit de l'adresse e-mail du domaine que les utilisateurs verront dans le champ « Expéditeur ».

Le champ "Expéditeur" est obligatoire lors de l'envoi d'emails via SMTP. Utiliser SMTP pour envoyer des lettres, une combinaison de " Domaine" - "E-mail", les lettres sont ainsi reconnues par les services postaux.


Parmi les inconvénients de cette méthode, il convient de noter l'impossibilité de « charger » un portrait de messagerie de domaine, puisque les services de messagerie eux-mêmes ne proposent pas encore cette fonctionnalité.




Haut