Cod de autorizare smtp. Trimiterea de e-mailuri (SMTP vs. mail PHP). Cum se trimite e-mailuri folosind ASP

Deoarece trimiterea de mesaje anonime de pe serverele virtuale de găzduire Windows este interzisă, trimiterea de scrisori ar trebui să se facă prin intermediul unui server SMTP, pentru care este posibil să folosim și sistemul nostru de e-mail.

Cum se trimit e-mailuri folosind PHP?

Folosind orice clasă PHP care acceptă autorizarea pe serverul smtp. De exemplu, puteți utiliza setul de clase PHPMailer.

De asemenea, puteți folosi exemplul nostru, care implementează trimiterea de scrisori folosind un server smtp, care necesită autorizare. Prin urmare, nu uitați să adăugați detaliile de acces adecvate la script, de exemplu:

// Dacă trebuie să afișați jurnalul de sesiune SMTP, puteți decomenta următoarea linie. // $_SERVER["depanare"] = adevărat; function MailSmtp ($reciever, $subject, $content, $headers, $debug = 0) ( $smtp_server = "smtp.site"; // Adresa serverului SMTP$smtp_port = 25 ; // Port server SMTP$smtp_user = " [email protected]" ; // Nume de utilizator pentru autorizare pe serverul SMTP$smtp_password = "parolă" ; // Parola pentru autorizare pe serverul SMTP$mail_from = " [email protected]" ; // Cutia poștală din care este trimisă scrisoarea$sock = fsockopen ($smtp_server, $smtp_port, $errno, $errstr, 30); $str = fgets ($sock, 512); if (! $sock ) ( printf ("Socket nu este creat\n" ); exit(1 ); ) smtp_msg ($sock , "HELO " . $_SERVER [ "SERVER_NAME" ]); smtp_msg($sock, "AUTH LOGIN"); smtp_msg ($sock, base64_encode ($smtp_user)); smtp_msg ($sock, base64_encode ($smtp_parola)); smtp_msg ($sock , „MAIL FROM:<" . $mail_from . ">" ); smtp_msg ($sock , "RCPT TO:<" . $reciever . ">" ); smtp_msg ($sock , "DATE" ); $headers = "Subiect: " . $subiect . "\r\n" . $headers ; $date = $headers . "\r\n\r\n" . $conținut . „\r\n ; _SERVER [ „depanare” ]) && $_SERVER [ „depanare” ]) ( printf ( „Trimite de la noi: %s
" , nl2br (htmlspecialchars ($msg )); ) fputs ($sock , " $msg \r\n" ); $str = fgets ($sock , 512 ); if (! $sock ) ( printf ( "Socket este jos\n" ); ieșire(1); ) else ( if (isset($_SERVER [ "depanare" ]) && $_SERVER [ "depanare" ]) ( printf ("Ați primit de la server: %s
" , nl2br (htmlspecialchars ($str )); ) $e = explode (" " , $str ); $cod = array_shift ($e ); $str = implod ( " " , $e ); dacă ($cod > 499 ) ( printf ( „Probleme cu conversația SMTP.

Codul %d.
Mesaj %s
"
, $cod , $str ); ieșire(1); ) ) ) ?>

Descărcați un exemplu de script gata făcut cu funcția MailSmtp(): smtpauth.php.sample

Puteți utiliza funcția MailSmtp() descrisă mai sus pentru a înlocui direct funcția mail() să luați în considerare un exemplu de cea mai simplă formă în PHP:

// Anteturile mesajelor, ele definesc codificarea mesajului, câmpurile De la, Către etc.$headers = "Versiune MIME: 1.0\r\n" ; $headers .= „Tip de conținut: text/html; set de caractere=windows-1251\r\n”; $headers .= "Către: $la \r\n" ; $headers .= „De la: numele expeditorului " ; // mail ($la, $subiect, $mesaj, $anteturi); require_once "smtpauth.php"; MailSmtp ($to, $subiect, $mesaj, $anteturi); ) ?>
La care: Subiect: Text: 
 
 

Pentru a acest formular a funcționat fără funcția mail(), am inclus fișierul smtpauth.php prin require_once și am numit funcția MailSmtp() descrisă în acesta, cu argumente similare cu mail(). În același timp, am comentat apelul mail() în cod pentru a evita erorile la executarea scriptului.

Cum se trimit e-mailuri folosind ASP.NET?

Dacă utilizați versiunea 2.0, atunci utilizați clasa MailMessage System.Net.Mail), bine descris.

Mai jos sunt exemple de utilizare a acestuia pentru limbajele C# și VisualBasic:

Exemplu pentru limbajul C#:

<% @Page Language="c#" %> <% @Import Namespace="System.Net.Mail" %> <% @Import Namespace="System.Net" %> <% MailMessage message = new MailMessage(); // crearea unei noi litere mesaj.Pentru.Adăugare(" [email protected]"); // adăugarea adresei destinatarului mesaj.De la = new MailAddress("de la@ domeniu.tld", "Numele expeditorului"); // precizând numele și adresa expeditorului message.Subject = "Subiectul mesajului"; // precizând subiectul scrisorii message.BodyEncoding = System.Text.Encoding.UTF8; // specificând codificarea literelor mesaj.IsBodyHtml = fals; // specificând formatul literei (adevărat - HTML, fals - nu HTML) message.Body = „Textul mesajului”; // precizând textul (corpul) scrisorii Client SmtpClient = SmtpClient nou("smtp.site",25); // creează o nouă conexiune la serverul „smtp.site” client.DeliveryMethod = SmtpDeliveryMethod.Network; // definește metoda de trimitere a mesajelor client.EnableSsl = false; // dezactivează necesitatea utilizării unei conexiuni securizate la server client.UseDefaultCredentials = false; // dezactivează utilizarea detaliilor de autorizare implicite client.Credentials = new NetworkCredential("postmaster@ domeniu.tld", "***parola***"); // specificarea detaliilor necesare (nume utilizator și parola) pentru autorizarea pe serverul SMTP client.Trimite(mesaj); // Trimite un mesaj %>

Descărcați un exemplu de formular completat care demonstrează utilizarea aceasta metoda: MailForm.aspx.

Exemplu pentru limbajul 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@domeniu.tld", "Nume_expeditor") smtpMssg.To.Add (" [email protected]") " adăugând adresa destinatarului smtpMssg.Subject = „Subiectul e-mailului” „indicarea subiectului scrisorii smtpMssg.Body = „Textul mesajului” " indicarea textului (corpului) scrisorii smtpMssg.BodyEncoding = System.Text.Encoding.UTF8 " indicație a codificării literei smtpMssg.IsBodyHtml = fals " indicarea formatului literei (adevărat - HTML, fals - nu HTML) Dim SmtpMail ca SmtpClient nou ("smtp.site", 25) " declararea unui nou obiect de tip "SmtpClient" SmtpMail.DeliveryMethod = SmtpDeliveryMethod.Network „indicarea modului de livrare a scrisorilor SmtpMail.UseDefaultCredentials = Fals „dezactivarea utilizării acreditărilor de autorizare în mod implicit” SmtpMail.EnableSsl = Fals " dezactivează necesitatea utilizării unei conexiuni securizate la server SmtpMail.Credentials = new NetworkCredential("postmaster@ domeniu.tld", "***parola***") „indicând detaliile necesare (nume de utilizator și parolă) pentru autorizarea pe serverul SMTP SmtpMail.Send(smtpMssg) " trimiterea unui mesaj %>

Există, de asemenea, o clasă SmtpMail depreciată (și depreciată) (folosind spațiul de nume System.Web.Mail). Mai jos este un exemplu de utilizare a acestuia pentru limbajul VisualBasic:

<% @Page Language="VB" Debug="true" %> <% @Import Namespace="System.Web" %> <% @Import Namespace="System.Web.Mail" %> <% Dim smtpMssg = new MailMessage " declararea unui nou obiect de tip "MailMessage" smtpMssg.From = „Nume_expedient domeniu.tld>" „Indicarea numelui si adresei expeditorului smtpMssg.To = "admin@ domeniu.tld" " indicarea adresei destinatarului smtpMssg.BodyFormat = MailFormat.Text „indicarea formatului scrisorii smtpMssg.BodyEncoding = Encoding.UTF8 „indicând codificarea literei smtpMssg.Subject = „Subiectul e-mailului” „indicarea subiectului scrisorii smtpMssg.Body = „Textul mesajului” " indicarea textului scrisorii smtpMssg.Fields.Add ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",1) „indicand necesitatea autorizarii SMTP pe server smtpMssg.Fields.Add ("http://schemas.microsoft.com/cdo/configuration/sendusername", "admin@" domeniu.tld") „nume de utilizator pentru autorizare smtpMssg.Fields.Add ("http://schemas.microsoft.com/cdo/configuration/sendpassword", "***parola***") „parola pentru autorizare SmtpMail.SmtpServer = „smtp.site” "specificând adresa serverului SMTP SmtpMail.Send(smtpMssg) " trimiterea unui mesaj %>

Cum se trimit e-mailuri folosind ASP?

Vă rugăm să rețineți că atunci când utilizați serverul nostru smtp, este necesară autorizarea, așa că nu uitați să adăugați detaliile de acces adecvate la script, de exemplu:

<% 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@domeniu.tld" .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "parolă" .Actualizare Încheiere cu Set cdoMessage = CreateObject("CDO.Message") Cu set cdoMessage .Configuration = iConfig .From = „Testează utilizatorul domeniu.tld>" .To = "Utilizator " .Subject = "Bună, utilizator" .TextBody = "Scriu acest mesaj din scriptul ASP." .Send End With Set cdoMessage = Nimic Set iConfig = Nimic %>

Unele CMS au deja instrumente încorporate pentru trimiterea corespondenței sau modulele corespunzătoare, să ne uităm la cele mai populare.

Wordpress

Pentru acest CMS există un modul special „WP Mail SMTP”, un exemplu de configurare a acestuia este descris pe pagina modulului.

Fiți atenți la ilustrația din exemplu în sistemul nostru de e-mail, este necesar să folosiți portul 25 și nu este necesară criptarea SSL.

Joomla

În panoul de administrare, accesați secțiunea „Setări generale”, selectați fila „Server”. În câmpul „Poștă”, trebuie să selectați metoda de trimitere ca „Server SMTP”, în câmpurile „Adresă server SMTP” și „Autentificare SMTP” și „Parola SMTP” specificați detaliile adecvate ale sistemului de e-mail, de exemplu: smtp.site, caseta@domeniul_dvs si corespunzatoare parola.

Drupal

Acest CMS are, de asemenea, propriul modul pentru lucrul cu un server SMTP, bazat pe PHPMailer. Puteți descărca acest modul de pe pagina sa de pe site-ul CMS Drupal, o descriere a instalării modulului este disponibilă în arhivă.

NetCat

Acest CMS nu are funcții încorporate pentru lucrul cu un server SMTP. Pentru a trimite e-mail folosind scripturi de site, vă putem oferi să utilizați soluția noastră pentru a o conecta, trebuie să efectuați următorii pași:

  • Descărcați o arhivă cu fișierele necesare de pe site-ul nostru ( send_auth_mail.phpȘi mail.inc.php) și despachetați-l pe computer;
  • Editați fișierul send_auth_mail.php din arhivă, indicând în ea detaliile de conectare la serverul SMTP dorit:

    • $mail_smtpServer = "smtp.site"; (adresa serverului SMTP)
    • $mail_port = "25" ; (port de conectare)
    • $mail_username = "[email protected]" ; (nume de utilizator pentru autorizare pe serverul SMTP)
    • $mail_parola = "Parola"; (parola pentru autorizare pe serverul SMTP)
  • Creați o copie de rezervă a fișierului domain.tld/www/netcat/admin/mail.inc.php;
  • descărcați fișiere send_auth_mail.phpȘi mail.inc.php la site-ul virtual din director domain.tld/www/netcat/admin/

domeniu.tld ar trebui să fie înlocuit cu numele dvs. de domeniu.

Soluția propusă funcționează cu toate modulele NetCat care utilizează funcțiile standard ale acestui CMS pentru a trimite e-mail.

De multă vreme am căutat o soluție pentru a trimite scrisori către utilizatori nu prin funcția mail() din PHP, ci prin servere de mail SMTP. Nu există o mulțime de informații variate pe Internet și ceea ce este acolo nu funcționează destul de bine sau nu funcționează deloc. Prin urmare, am pus totul cap la cap și am scris propriul cod, pe baza celor gata făcute care sunt prezentate pe site-uri.

De ce trimiteți prin SMTP și nu prin e-mail()

Răspunsul meu este destul de simplu - de ceva timp, virușii au trimis tone de scrisori prin serverul meu, ceea ce a dus la interzicerea adresei mele IP de mulți maileri, în special gmail.com, iar în legătură cu aceasta, utilizatorii puteau primi scrisori, așa că am a trebuit să caut o alternativă și am găsit-o - acesta este SMTP

S-ar putea să fiți interesat de ce scenariul meu este mai bun decât alții care zac în aer liber?! voi raspunde

  1. Funcționează cu Yandex, Rambler, Mail (gmail nu a putut câștiga)
  2. Șterge codul. Pentru a-l configura, schimbați doar câteva rânduri
  3. Trimite e-mailuri în format HTML

Iată care sunt avantajele scriptului meu, pe care nu l-am găsit nicăieri pe internet, dar de la fiecare am luat tot ce aveam nevoie. Deci, să ne uităm la cod.

Funcția smtpmail($mail_to, $subject, $message, $service="yandex") ( $config["smtp_charset"] = "windows-1251"; //codarea mesajului. (sau UTF-8, etc.) $config [ "smtp_from"] = "mashintop.ru" //Numele dvs. - sau numele site-ului dvs. va fi afișat în câmpul "De la" când citiți $config["smtp_debug"] = false; pentru a vedea mesajele de eroare, specificați true în loc de false $config["smtp_port"] = "25" // Nu schimbați portul de lucru dacă nu sunteți sigur"; $config["smtp_email"] = ". [email protected]"; $config["smtp_username"] = "mashintop"; //Schimbați la numele căsuței dvs. poștale. $config["smtp_host"] = "smtp.yandex.ru"; //server pentru trimiterea e-mailului $config[" smtp_password "] = "moi_parol"; //Schimbați parola ) elseif($service=="rambler") ( $config["smtp_searcher"] = "rambler.ru"; $config["smtp_email"] = " [email protected]"; $config["smtp_username"] = "mashintop"; //Schimbați la numele căsuței dvs. poștale. $config["smtp_host"] = "smtp.rambler.ru"; //server pentru trimiterea e-mailului $config[" smtp_password "] = "moi_parol"; //Schimbați parola ) elseif($service=="mail") ( $config["smtp_searcher"] = "mail.ru"; $config["smtp_email"] = " [email protected]"; $config["smtp_username"] = "mashintop"; //Schimbați la numele căsuței dvs. poștale. $config["smtp_host"] = "smtp.mail.ru"; //server pentru trimiterea e-mailului $config[" smtp_password "] = "moi_parol"; //Schimbați parola ) elseif($service=="gmail") ( $config["smtp_searcher"] = "gmail.com"; $config["smtp_email"] = " [email protected]"; $config["smtp_username"] = "alexeybertram"; //Schimbați numele cutiei poștale. $config["smtp_host"] = "smtp.gmail.com"; //server pentru trimiterea e-mailului $config[" smtp_password "] = "moi_parol"; //Modifică parola ) $header="Data: ".date("D, j M Y G:i:s")." +0700rn"; $header.="De la: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$config[" smtp_from"]."")))."?=<".$config["smtp_email"].">rn"; $header.="X-Mailer: Liliacul! (v3.99.3) Professionalrn"; $header.="Răspuns la: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode(") ".$config["smtp_from"]."")))."?=<".$config["smtp_email"].">rn"; $header.="Prioritate X: 3 (Normal)rn"; $header.="ID-Mesaj:<172562218.".date("YmjHis")."@".$config["smtp_searcher"].">rn"; $header.="Către: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("")))."? =<$mail_to>rn"; $header.="Subiect: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$subiect."" )))."?=rn"; $header.="Versiune MIME: 1.0rn"; charset=windows-1251rn"; $header.="Codare de transfer de conținut: 8bitrn"; $smtp_conn = fsockopen("".$config["smtp_host"]."", $config["smtp_port"], $errno , $errstr, 10); if(!$smtp_conn) (printează „conexiunea de la servere a eșuat”; fclose($smtp_conn); exit;) $data = get_data($smtp_conn, „EHLO”; config["smtp_searcher"]."rn"); $code = substr(get_data($smtp_conn),0,3000; if($code != 250) (print "EHLO greeting error"; fclose($smtp_conn)); exit;) fputs($smtp_conn,"AUTH LOGINrn"); $code = substr(get_data($smtp_conn),0,3000 if($code != 334) (printează "serverul nu a permis autorizarea"; fclose ($smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_username"]."")."rn"); ); if($code != 334) (printează „eroare la accesarea acestui utilizator”; fclose($smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_conn"].""). "rn"); $code = substr(get_data($smtp_conn),0,3000 if($code != 235) (printează "parolă greșită"); fclose($smtp_conn); exit;) fputs($smtp_conn,"MAIL FROM:".$config["smtp_email"]."rn"); $cod = substr(get_data($smtp_conn),0.3000); if($code != 250) (printează „serverul a refuzat comanda MAIL FROM”; fclose($smtp_conn); exit;) fputs($smtp_conn,"RCPT TO:".$mail_to."rn"); $cod = substr(get_data($smtp_conn),0.3000); if($code != 250 AND $code != 251) (printează „Serverul nu a acceptat comanda RCPT TO”; fclose($smtp_conn); exit;) fputs($smtp_conn,"DATArn"); $cod = substr(get_data($smtp_conn),0.3000); if($code != 354) (printează „serverul nu a acceptat DATE”; fclose($smtp_conn); exit;) fputs($smtp_conn,$header."rn".$message."rn.rn"); $cod = substr(get_data($smtp_conn),0.3000); if($cod != 250) (printează „eroare la trimiterea scrisorii”; fclose($smtp_conn); exit;) fputs($smtp_conn,”QUITrn”); fclose($smtp_conn); ) funcția get_data($smtp_conn) ( $date=""; while($str = fgets($smtp_conn,515)) ( $date .= $str; if(substr($str,3,1) == " " ) ( break; ) ) return $date ) $text_email = " Tocmai ați adăugat un anunț pe site-ul mashintop.ru. O puteți vizualiza aici
Cheia dvs.: ".$key."

Folosind această cheie vă puteți gestiona anunțul.

"; $text_email .= " "; smtpmail(" [email protected]", "Cheia anunțului pe mashintop.ru", $text_email, "yandex"); //utilizați Yandex smtpmail(" [email protected]", "Cheia anunțului pe mashintop.ru", $text_email, "mail"); //utilizați e-mailul smtpmail(" [email protected]", "Cheia anunțului pe mashintop.ru", $text_email, "rambler"); //utilizați rambler smtpmail(" [email protected]", "Cheia reclamei pe mashintop.ru", $text_email, "gmail"); // dar Gmail nu funcționează :(

Asta e tot, scriptul terminat este în mâinile tale, doar copiați-l, schimbați valorile matricei $config și totul va funcționa bine.

Acum să ne uităm la câteva elemente pe care aș dori să mă concentrez.

De exemplu, eroarea pe care o primim atunci când încercăm să trimitem prin SMTP către Google. Inițial vedem acest text de eroare:

Pentru a vedea ceva mai specific, haideți să modificăm puțin codul

Fputs($smtp_conn,"AUTH LOGINrn"); $cod = substr(get_data($smtp_conn),0.3000); echo $cod; if($code != 334) (printează „serverul nu a permis autorizarea să înceapă”; fclose($smtp_conn); ieșire;)

Și până la urmă obținem o eroare foarte specifică

530 5.7.0 Mai întâi trebuie să emită o comandă STARTTLS. x4sm16408296lbn.2 - gsmtp

Nu știu ce înseamnă exact, dar cred că are ceva de-a face cu o conexiune sigură, nesecurizată. Încă nu știu cum să scap de el, așa că Gmail rămâne neînvins în acest moment.



2019-08-05

Bună, dragă vizitatoare!

Vă rog să mă iertați pentru întârzierea actualizării blogului. Dar există o explicație complet de înțeles pentru asta. La urma urmei, a fost vara, dacha, oaspeți, pădure, apă și multe altele, ceea ce nu mi-a permis să abordez problemele creării unui site web. Dar acum m-am eliberat puțin, oaspeții au plecat și cred că acum voi putea să acord cu siguranță atenția cuvenită acestui lucru.

Așadar, după ce în ultimul articol am conectat mail-ul domeniului nostru la unul dintre serviciile de mail, acum să vedem cum poți trimite email de pe site. Mai mult, în așa fel încât scrisorile noastre să nu ajungă în SPAM, ci să fie livrate în mod fiabil, cu un grad ridicat de probabilitate, destinatarilor noștri.

În general, există o funcție încorporată mail() pentru trimiterea de scrisori în PHP. Dar trebuie remarcat faptul că, în ciuda simplității acestei metode (în acest caz, pentru a trimite scrisori este suficient să specificați o singură linie de cod cu anumiți parametri), utilizarea acestei opțiuni are un dezavantaj semnificativ asociat cu problema SPAM-ului .

Cert este că filtrele anti-SPAM ale serverelor de e-mail din partea destinatarului nu prea favorizează scrisorile trimise prin funcția mail(). Și în cele mai multe cazuri, astfel de mesaje sunt filtrate sau chiar șterse înainte de a ajunge la destinatar.

Și pentru a elimina cât mai mult posibil astfel de cazuri, se folosește de obicei o altă opțiune, în care scrisorile sunt trimise ca și cum ar fi făcut de un serviciu de poștă terță parte.

Această metodă se numește trimiterea de e-mailuri prin SMTP cu autorizare. Pe care îl vom analiza astăzi folosind exemplul trimiterii unui formular de feedback. Mai mult, pentru aceasta vom folosi biblioteca PHPMailer destul de cunoscută și populară, care vă permite să organizați pur și simplu trimiterea de scrisori prin SMTP.

  • Cum vom trimite scrisori de feedback
  • Crearea unui formular de feedback
  • Instalarea bibliotecii PHPMailer
  • Creăm un script pentru trimiterea e-mailurilor prin SMTP
  • Se verifică trimiterea e-mailului
  • Fișierele sursă ale site-ului

Cum vom trimite scrisori de feedback

Înainte de a începe munca practică de trimitere a scrisorilor de feedback, să decidem mai întâi cum o vom face.

Formularul de feedback este conceput pentru a permite utilizatorului să comunice cu administratorul site-ului pentru a-și transmite mesajul. De obicei, acest formular constă din mai multe câmpuri și un buton „Trimite”.

În principiu, pentru a trimite un e-mail este suficient să folosiți doar câteva câmpuri care oferă suficiente informații despre utilizator și conținutul mesajului, cum ar fi:

  • „Nume” - pentru a introduce numele expeditorului mesajului;
  • „E-mail” - pentru adresa de e-mail a expeditorului;
  • "Subiectul mesajului";
  • "Mesaj text".

Deși puteți adăuga altele. De exemplu, un număr de telefon, dacă acest lucru este cu adevărat necesar.

În cazul nostru, astfel de scrisori vor fi trimise la adresa administratorului site-ului dintr-o cutie poștală reală cu autorizare pe serviciul de e-mail la care este conectat domeniul nostru.

Deoarece în articolul anterior ne-am concentrat pe verificarea conexiunii e-mail-ului de domeniu la serviciul Yandex.Mail, vom trimite e-mail pentru această opțiune. Deși acest lucru nu este important. Mai jos veți vedea acele opțiuni care, atunci când sunt modificate, vă vor permite să trimiteți e-mail prin serverul de mail Mail.ru.

Ca o adevărată cutie poștală din care vor fi trimise scrisorile, vom folosi contul unui utilizator de e-mail de domeniu nou creat, să zicem cu adresa [email protected]. Și vom trimite aceste scrisori la căsuța poștală a administratorului [email protected], pe care l-am creat anterior în articolul anterior.

Astfel, expeditorul scrisorii din formularul de feedback va fi cutia poștală [email protected]., iar destinatarul - [email protected]. În acest caz, toate informațiile despre utilizatorul care a trimis mesajul cu conținutul acestuia vor fi transmise în corpul scrisorii trimise.

Crearea unui formular de feedback

După ce ne-am hotărât asupra procedurii de trimitere a scrisorilor, acum vom crea un formular de feedback cu care vom face acest lucru.

Mai jos este codul HTML pentru acest formular, pe care îl vom plasa pe pagina „Contacte” (fișier kontakty.php în directorul articole).

    "articol" >

    Contacte

    Părere

    "a lua legatura" acțiune = "#" metoda = "post" >

    Formular de feedback

    Pentru toate întrebările, solicitările și propunerile de afaceri, ne puteți contacta folosind formularul de feedback de mai jos.

    "bloc de contact" >

    "intrare de contact" >

    "text" id = "nume de contact" nume = "nume de contact" titlu = „Numele trebuie să fie în rusă și să conțină cel puțin 3 caractere” model = "{3,}" necesar >

  1. "contact gol" >

    "intrare de contact" >

    "e-mail" id = "emailul de contact" nume = "emailul de contact" necesar >

  2. "subiect de contact" >

  3. "contact-comentare" >

  4. "buton de contact" >

    "Trimite" nume = "buton de contact" valoare = "Trimite" >

Fig.1 Codul HTML al formularului de feedback

Puteți vedea cum arată în cele din urmă formularul de feedback afișat aici în următoarea captură de ecran.

Astfel, se creează forma dorită. Și acum puteți trece la problemele procesării și trimiterii datelor sub forma unui mesaj de e-mail.

Instalarea bibliotecii PHPMailer

După cum sa menționat anterior, pentru a trimite e-mailuri vom folosi biblioteca PHPMailer, care va simplifica semnificativ trimiterea de e-mail prin protocolul SMTP cu autorizare pe un serviciu de e-mail terță parte.

Pentru a-l instala trebuie să descărcați fișierele necesare. Acest lucru se poate face din serviciul web GitHub folosind Composer (un manager de dependențe de pachete pentru PHP). Sau pur și simplu descărcați fișierele necesare în mod obișnuit.

captura de ecran 73

Mai jos este pagina serviciului web GitHub, unde este marcat linkul către descărcarea obișnuită a bibliotecii PHPMailer.

În plus, cea mai recentă versiune 6.0.7, care a fost salvată la momentul scrierii acestui articol, poate fi descărcată din materialele atașate.

În orice caz, fișierul arhivă rezultat ar trebui să fie despachetat, după care folderul PHPMailer-master extras cu tot conținutul său ar trebui plasat în rădăcina site-ului. În același timp, pentru simplitate, îl puteți redenumi PHPMailer. Mai jos este conținutul folderului PHPMailer plasat în directorul rădăcină al site-ului.

Astfel am instalat biblioteca PHPMailer. După care putem începe să creăm un script cu care vom trimite mesaje de e-mail de pe site-ul nostru.

Creăm un script pentru trimiterea e-mailurilor prin SMTP

Pentru a compune scriptul, este suficient să folosim recomandările de utilizare a PHPMailer date pe pagina GitHub, pe care le-am folosit anterior pentru a descărca biblioteca.

Ele, în special, indică faptul că la începutul scriptului este necesar să importați clase PHPMailer în spațiul de nume global. Și sunt date linii specifice de cod corespunzător. Există, de asemenea, exemple de utilizare a proprietăților și metodelor PHPMailer, inclusiv pentru opțiunea de a trimite e-mail prin SMTP.

Dar dacă acest lucru nu este suficient, atunci puteți utiliza și documentația, care conține o descriere a tuturor proprietăților și metodelor acestei biblioteci.

captura de ecran 74

Mai jos este codul de script pentru trimiterea e-mailurilor din formularul de feedback prin SMTP cu autorizare. Unde toate rândurile legate de PHPMailer sunt date cu explicație și evidențiate cu un fundal deschis.

Restul părții, inclusiv fragmentele legate de primirea și prelucrarea datelor din formular, pe care anterior trebuia să le folosim în alte procesoare, este indicată de un fundal întunecat. Acestea au fost discutate suficient de detaliat mai devreme într-un articol dedicat în mod specific problemelor de obținere și verificare a datelor dintr-un formular în PHP. Unde am vorbit și despre funcția de utilizator universală pentru validarea și prelucrarea datelor din formular check_symbol().

Vom plasa acest script în același fișier kontakty.php în care am creat anterior formularul de feedback.

    //----Script pentru trimiterea de mail prin SMTP folosind PHPMailer----

    //Importă clase PHPMailer în spațiul de nume global. Ele ar trebui să fie în partea de sus a scriptului, nu în interiorul funcției

    utilizare PHPMailer\PHPMailer\PHPMailer ;

    utilizare PHPMailer\PHPMailer\Exception ;

    dacă (!gol($_POST["butonul de contact" ])) (

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

    $nume = simbol_verificare ($nume, "Nume" , "1" , "/^+\z/iu" );

    $email = $_POST["e-mail de contact"];

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

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

    $subiect = simbol_verificare ($subiect, „Subiect al mesajului” , „1” , „0” );

    $comment = $_POST["contact-comentar"];

    $comentar = simbol_verificare ($comentar, "Mesaj text", "1" , "0" );

    dacă (!gol($GLOBALS[„alerta” ])) (

    $alert = „Datele formularului nu au fost trimise. Au fost găsite următoarele erori:\n”.$alerta;

    include"alert.php";

    altfel {

    //Conectarea bibliotecii

    cere„PHPMailer/src/PHPMailer.php” ;

    cere„PHPMailer/src/Exception.php” ;

    cere„PHPMailer/src/SMTP.php” ;

    $mail = nou PHPMailer(); //Inițializați clasa

    $de la = " [email protected]" ; //Adresa de e-mail de la care este trimisă scrisoarea

    $to = " [email protected]" ; //Adresa destinatarului

    $mail -> isSMTP(); //Utilizați protocolul SMTP

    $mail -> Host = "smtp.yandex.ru" ; //Adresa serverului de mail

    $mail -> SMTPAuth = Adevărat ; //Activați modul de autorizare

    $mail -> Nume utilizator = " [email protected]" ; //Conectați-vă de la un e-mail de domeniu conectat la un serviciu de e-mail terță parte (în acest caz, Yandex.Mail)

    $mail -> Parolă = "27MrDon89" ; //Parola pentru e-mailul domeniului

    $mail -> SMTPSecure = "ssl" ; //Protocol de criptare

    $mail -> Port = "465" ; //Port server SMTP

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

    $mail -> setFrom ($de la, „Administrator”); //Adresa și numele expeditorului

    $mail -> addAddress ($to, "Administrator"); //Adresa și numele destinatarului

    $mail -> isHTML ( Adevărat ); //Setați formatul de e-mail la HTML

    $mail -> Subiect = „Formular de feedback a fost trimis”; // Subiectul e-mailului (titlu)

    $mail -> Corp = "

    Numele expeditorului: $nume

    Adresa expeditorului: $email

    Subiectul mesajului: $subiect

    Conținutul mesajului: $comentare



    " ; //Conținutul mesajului

    $mail -> AltBody = „Text cu scrisoare alternativă”; //E-mail alternativ dacă clientul de e-mail nu acceptă formatul HTML

    $mail -> SMTPDebug = 0 ; //Activați depanarea SMTP: 0 - oprit (pentru utilizare normală), 1 = mesaje client, 2 - mesaje client și server

    dacă($mail -> trimite()) (

    $alert = "Mesaj trimis"; //Afișează un mesaj în caseta de dialog a browserului despre trimiterea cu succes a scrisorii

    altfel {

    $alert = "Eroare, e-mailul nu poate fi trimis: ".$mail -> ErrorInfo ; //Afișează un mesaj de eroare

    include"alert.php";

Fig.5 Script pentru trimiterea de e-mail prin SMTP cu autorizare

După cum puteți vedea, toate rândurile legate direct de trimiterea unui mesaj de e-mail, în care sunt specificate metodele și proprietățile necesare, sunt însoțite de comentarii. Prin urmare, nu are sens să ne repetăm, dar ne putem opri doar asupra unora dintre ele, care într-adevăr necesită explicații suplimentare, și anume:

1. Datorită faptului că scrisoarea este trimisă de la un serviciu de e-mail terță parte, aici se aplică setările corespunzătoare serverului SMTP specific. În acest caz, pentru cazul de utilizare al serverului Yandex.Mail, se aplică următoarele valori de proprietate:

  • Proprietate Gazdă(poz.28) - Adresa serverului de e-mail cu valoarea smtp.yandex.ru;
  • Proprietate SMTPSecure
  • Proprietate Port

Aceste valori de proprietate au fost preluate de pe pagina Yandex.Help prezentată în următoarea captură de ecran.

Dar astfel de informații pot fi obținute și din alte resurse. Pentru a face acest lucru, trebuie doar să introduceți interogarea corespunzătoare într-un motor de căutare, de exemplu: „Server smtp Yandex”. Unde pot găsi un număr mare de referințe pe această problemă.

În mod similar, valorile setărilor pot fi obținute de la alte servere SMTP. Mai jos este o captură de ecran a paginii de ajutor Mail.ru, care afișează setările serverului SMTP al serviciului de e-mail Mail.ru.

Și astfel, în cazul utilizării Mail.ru ca server SMTP terță parte, ar trebui aplicate următoarele valori ale proprietăților clasei PHPMailer:

  • Proprietate Gazdă(poz.28) - adresa serverului de mail (smtp.mail.ru);
  • Proprietate SMTPSecure(poz. 32) - Protocol de criptare (ssl);
  • Proprietate Port(poz. 33) - Port server SMTP (465).

O abordare similară ar trebui aplicată altor servicii de e-mail.

2. În proprietate Nume de utilizator(poz. 30) este necesar să se indice adresa completă a căsuței poștale de domeniu. În acest caz, " [email protected]".

Cu toate acestea, dacă utilizați un cont de e-mail fără domeniu pentru a trimite scrisori, dar o adresă legată direct de serviciul de e-mail, de exemplu " [email protected]", atunci autentificarea ar trebui să fie doar o parte a adresei până la semnul "@". În acest caz, autentificarea ar avea valoarea "feedback".

3. PHPMailer oferă o proprietate SMTPDebug(poz. 50), care vă permite să afișați diferite niveluri de erori pe ecranul browserului. Această caracteristică simplifică foarte mult găsirea problemelor la depanarea unui script.

De obicei, în modul normal, cu valoarea setată la 0, ieșirea informațiilor detaliate despre eroare este dezactivată. Dar dacă apar probleme cu trimiterea e-mailurilor sau în timpul depanării, este posibil să folosiți alte valori pentru a afișa informații mai semnificative despre eroare.

Pentru a vedea cum arată acest lucru în practică, să introducem temporar o eroare în setări. De exemplu, în parola de e-mail de domeniu (proprietatea Parola, poz.31). Și, de asemenea, pentru a afișa informații detaliate despre eroare, setate temporar în proprietate SMTPDebug(poz.50) valoarea 1. După ce, când totul este depanat și verificat, vom dezactiva modul de depanare SMTP, înlocuind 1 cu 0.

În partea finală a scriptului, după specificarea tuturor proprietăților și metodelor necesare, metoda este folosită pentru a trimite scrisoarea trimite()) (punctul 51). Și dacă scrisoarea este trimisă, și metoda trimite() pentru obiect $mail returnează true, apoi în dialogul browserului prin variabilă $alerta Va fi afișat un mesaj despre trimiterea cu succes a e-mailurilor (poz. 52).

Dacă, din anumite motive, e-mailul nu a putut fi trimis și, în consecință, metoda nu a putut returna adevărat, atunci această stare va fi însoțită de un mesaj de eroare corespunzător (poz. 55).

Se verifică trimiterea e-mailului

După ce am creat un script pentru trimiterea de e-mailuri, desigur, trebuie să ne uităm la rezultatul „creativității” noastre. Am luat în calcul totul aici și nu am făcut nicio greșeală?

Pentru a face acest lucru, să încercăm, conform intenției, să trimitem un mesaj de la utilizator către administratorul site-ului din formularul de feedback. Mai jos este o captură de ecran a formularului de feedback cu câmpurile completate înainte de a fi trimis.

Și iată rezultatul depunerii formularului.

Unde, din mesajul din caseta de dialog browser, este clar că scrisoarea nu poate fi trimisă din cauza unei probleme cu conexiunea SMTP.

Dar, de acum proprietatea SMTPDebug(poz. 50) i se atribuie valoarea 1, apoi putem vedea informații detaliate despre eroarea care a apărut și putem afla motivul apariției acesteia.

Următoarea captură de ecran arată că, atunci când încercați să vă conectați, a fost detectată o eroare de autentificare, adică utilizarea unei date de conectare sau a unei parole incorecte.

După eliminarea nepotrivirii parolei (anterior a fost folosită parola greșită pentru a putea verifica informațiile suplimentare despre eroare), vom încerca să trimitem din nou e-mailul.

De data aceasta totul părea să meargă bine și am primit un mesaj că e-mailul a fost trimis cu succes. Aparent, cu excepția erorii temporare introduse în mod deliberat în parola de e-mail a domeniului, nu am făcut alte greșeli.

Dar pentru a ne asigura că scrisoarea a fost efectiv livrată destinatarului, să introducem e-mailul cu adresa [email protected] si uita-te la rezultat.

După cum puteți vedea, scrisoarea de la adresă [email protected], din care am trimis un mesaj de email cu numele „Feedback” a ajuns cu succes la administratorul site-ului. În același timp, corpul scrisorii conține tot conținutul pe care l-am generat în script folosind datele primite din formularul de feedback și anume:

  • Numele expeditorului: Nikolay;
  • Adresa expeditorului: [email protected];
  • Subiectul mesajului: Verificarea trimiterii e-mailurilor;
  • Conținutul mesajului: mesaj de testare.

Acum, după ce ați verificat cu succes trimiterea e-mailurilor, puteți dezactiva modul de depanare SMTP prin atribuirea proprietății SMTPDebug(poz.50) valoare 0.

Astfel, am finalizat sarcina de a crea un instrument pentru trimiterea de e-mailuri prin SMTP cu autorizare folosind un server de e-mail terță parte.

De exemplu, în următorul articol, vom analiza cum să trimiteți e-mailuri de confirmare pentru a recupera datele contului de utilizator înregistrat.

Fișierele sursă ale site-ului

Fișierele sursă ale site-ului cu actualizările care au fost făcute în acest articol pot fi descărcate din materialele suplimentare atașate:

  • fisierele directoare www
  • Tabelele bazei de date MySQL

În PHP este destul de popular să folosești scripturi care automatizează procesul de trimitere a scrisorilor. În acest articol ne vom uita la un script simplu care trimite scrisori către destinatari prin SMTP( Protocol simplu de transfer de e-mail ). Ar fi prea ușor să ne limităm doar la această funcționalitate, scriptul acceptă și atașamente, adică poți atașa un fișier pdf, txt sau doc ​​în scrisoarea ta.

Configurarea scriptului este destul de simplă; tot ce aveți nevoie este login-ul și parola expeditorului pentru e-mailul din care vor fi trimise scrisorile.

Scriptul funcționează cu clasa km_smtp_class.php, lucrul bun despre clasă este că acceptă diverse protocoale SSL și TLS care oferă transfer securizat de date.

Iată scenariul în sine:

"smtp.mail.ru", "SMTP_port" => "25", "SMTP_email" => " [email protected]", "SMTP_pass" => "1111111", "SMTP_type" => "null"); // E-mailul destinatarului $Receiver = " [email protected]"; // Subiectul mesajului $Subject = "Trimiterea unui e-mail din PHP"; // Textul mesajului (în HTML) $Text = "Bună ziua!
Mesaj trimis din script Mowshon Website: http://site"; // Atașament în scrisoare - adresa fișierului $Attachment = ""; /* $mail = KM_Mailer nou (server, port, utilizator, parolă, tip); */ /* Tipul poate fi: null, tls sau ssl */ $mail = new KM_Mailer($SenderConfig["SMTP_server"], $SenderConfig["SMTP_port"], $SenderConfig["SMTP_email"], $SenderConfig["SMTP_pass"], $ SenderConfig["SMTP_type"]); if($mail->isLogin) ( // Atașați un fișier if($Attachment) ($mail->addAttachment($Attachment);) // Adăugați mai mulți destinatari $mail->addRecipient( " [email protected]"); $mail->addRecipient(" [email protected]"); /* $mail->send(De la, Pentru, Subiect, Text, Subiect = opțional) */ $SendMail = $mail->send($SenderConfig["SMTP_email"], $Receiver, $Subject, $Text ); // Șterge lista de destinatari $mail->clearBCC( $mail->clearAttachments( echo "A apărut o eroare la conectarea la serverul SMTP); );

Configurarea scriptului se bazează în principal pe matricea $SenderConfig, aici trebuie să specificăm SMTP:server, port, login și parola de e-mail. Să descriem fiecare cheie de matrice:

SMTP_server - adresa serverului SMTP (adresă individuală pentru diferite e-mailuri)

Mail.ru mail: Port smtp.mail.ru: 25, 587 și 465 (cu criptare SSL)

E-mail Yandex: Port smtp.yandex.ru: 25, 587 465 (port SSL)

Rambler mail: Port mail.rambler.ru: 25, 587 465 (port SSL)

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

(Dacă aveți nevoie de adresa serverelor smtp care nu sunt pe listă, scrieți în comentarii)

SMTP_port - L-am descris deja mai sus pentru fiecare server smtp.

SMTP_email - user ar fi mai precis, dar pentru claritate am scris e-mail, indicăm adresa de e-mail.

SMTP_pass - Parola pentru e-mail care a fost specificată ca valoare în cheia SMTP_email


SMTP_type - NULL implicit. Protocolul prin care vor fi trimise scrisorile. Protocoale: SSL și TLS

Puteți adăuga atașamente la o scrisoare specificând pur și simplu adresa completă a fișierului în variabila $Attachment (/var/patch/to/file/File.pdf)

Dacă aveți întrebări, scrieți-le în comentariile de mai jos.

Mail PHP

Această funcție este implementată implicit ca trimitere de e-mail. Această funcționalitate nu necesită un server terță parte pentru a redirecționa e-mailul. Pentru a verifica corectitudinea acestei funcții, trebuie doar să creați un fișier test.php în folderul cu site-ul și să plasați următorul cod acolo:

Unde în schimb "E-MAILDESTINATAR" Introduceți e-mailul la care trebuie trimisă scrisoarea.

Plasați acest fișier la rădăcina site-ului dvs.

Apoi, introduceți www.YourDomain/test.php în bara de adrese. Dacă o scrisoare este primită la e-mailul specificat, atunci găzduirea dvs. funcționează corect cu funcția de trimitere a scrisorilor " Mail PHP". Este posibil ca scrisoarea să ajungă în spam, așa că trebuie verificată și ea.

Dacă scrisoarea a ajuns într-o codificare de neînțeles, schimbați linia: "Se verifică trimiterea e-mailurilor" pe „Verificarea trimiterii e-mailurilor”, „Content-type:text/html;charset=utf-8”.

Și repetați trimiterea scrisorii prin bara de adrese a browserului dvs.

Dacă după manipulările de mai sus scrisoarea de testare nu ajunge la destinatarul final, trebuie să contactați suportul tehnic de găzduire.

Printre dezavantajele acestei metode, este de remarcat faptul că această metodă nu funcționează în mod constant. Pot exista întreruperi în trimiterea e-mailurilor pe partea de găzduire.

Principalul dezavantaj al acestei metode este că toate scrisorile trimise către e-mailurile clienților nu vor fi recunoscute de serviciile de e-mail (gmail, mail.ru, yandex.ru) deoarece au fost trimise direct de pe site-ul dvs.

Serviciul de e-mail Gmail afișează aceste scrisori cu un semn de întrebare și semnătura: „Sistemul Gmail nu a putut confirma că această scrisoare a fost trimisă de la domeniul YourDomain. Este posibil să fie spam”.

Pentru a evita această situație .

SMTP (Simple Mail Transfer Protocol)

SMTP - protocol de transfer de e-mail. În total, pentru a configura transmisia de e-mail folosind acest protocol, aveți nevoie de serverul SMTP în sine. Cea mai comună opțiune pentru utilizarea e-mail-ului corporativ (domeniu) yandex.ru ca server SMTP este https://pdd.yandex.ru/.

În primul rând este necesar cont (mail) yandex, pe baza cărora vor fi create e-mailuri pentru domeniul tău: „comanda@Domeniul Tău” „info@Domeniul Tău”... Contul principal nu va fi vizibil nicăieri și este folosit doar pentru a crea e-mailuri de domeniu pe baza lui în viitor.

După autorizarea în contul personal Yandex, este creat un e-mail de domeniu la linkul https://pdd.yandex.ru/. Acesta este e-mailul de domeniu pe care utilizatorii îl vor vedea în câmpul „Expeditor”.

Câmpul „Expeditor” este obligatoriu atunci când trimiteți e-mailuri prin SMTP. Folosind SMTP pentru a trimite scrisori, o combinație de „ Domeniu" - "E-mail", astfel literele sunt recunoscute de serviciile de poștă.


Printre dezavantajele acestei metode, este de remarcat imposibilitatea „încărcării” unui portret de e-mail de domeniu, deoarece serviciile de e-mail în sine nu oferă încă această funcționalitate.




Top