Principii de funcționare PHP mail și smtp. Trimiterea de e-mailuri (SMTP vs

Acasă / hard disk-uri

Trimiterea de e-mailuri prin SMTP de pe un server local vă permite să testați trimiterea de mesaje de pe un site situat pe mașina locală sau, mai simplu, un server local. Pentru a face acest lucru, puteți utiliza orice serviciu de e-mail Yandex, Google sau mail.ru.

În primul rând, SMTP (Simple Mail Transfer Protocol) este un protocol utilizat pe scară largă protocol de rețea, destinat transmiterii e-mail pe rețelele TCP/IP. Și toate serviciile de e-mail populare au astfel de protocoale.

Odată cu apariția serverelor locale, nu a mai fost nevoie să alegeți un furnizor de găzduire pentru a verifica performanța scripturilor individuale sau a sistemelor cms, cu atât mai puțin să plătiți pentru asta. Este mult mai ușor să testați totul pe un computer și apoi puteți arăta tuturor ceea ce ați „făcut”.

Multe dintre aceste servere au deja încorporate softwareși funcționalitatea necesară pentru a lucra cu mail, trebuie doar să o configurați corect.

Pentru a verifica funcționalitatea unui astfel de e-mail, este necesar minim:

  • Puteți utiliza Openserver ca server local.
  • Și un script simplu, al cărui șablon poate fi găsit chiar mai jos.
  • Puteți utiliza orice server de e-mail.

Trimiterea e-mailului php prin configurarea scriptului SMTP

Un șablon de script simplu care poate fi copiat mai jos sau descărcat de pe sute de site-uri similare, trebuie editat.

Mai întâi trebuie să modificați unele valori în șablonul de script.
la — schimbați la adresa poștală la care va fi trimis mesajul e-mail.
subiect — subiectul scrisorii
mesaj — mesajul în sine sau corpul scrisorii.

Exemplu de script-ul meu:

Puteți, desigur, să extindeți puțin funcționalitatea și să faceți ca scriptul să afișeze un mesaj despre trimiterea e-mailurilor. Deși de fapt serverul SMTP este cel care face trimiterea, iar scriptul generează doar mesajul.

De exemplu, puteți scrie asta:

Toate valorile înlocuite trebuie să fie între ghilimele, altfel scriptul va genera o eroare. După aceasta, puteți salva scriptul în folderul serverului local.

De exemplu: domenii/trimite/index.phpși începeți configurarea trimiterii de e-mail prin SMTP opensserver.

Poșta va ajunge la orice adresă care va fi specificată în script în loc de valoare 'la' , dar acest mail va fi procesat și trimis exact de SMTP-ul care va fi specificat în setările openserver.

  1. Pornirea serverului
  2. Deschideți modulul openserver cu setări în meniul „e-mail”.
  3. Completem toate câmpurile așa cum se arată în imagine, în timp ce înlocuim numele de utilizator, e-mailul expeditorului și parola dintr-o cutie poștală reală pe Yandex.

Salvăm setările și după ce serverul este repornit, puteți accesa scriptul în sine. Din folderul „Site-urile mele”, deschideți folderul „trimitere” în care se află scriptul index.php salvat anterior.

De îndată ce acest script este accesat, informațiile vor apărea într-o nouă fereastră de browser care indică faptul că scriptul s-a finalizat.

După aceasta, ar trebui să vă verificați cutie poştală, a cărui adresă a fost specificată în scenariu, dacă scrisoarea a sosit.

Dacă nu este acolo, înseamnă că ceva nu este configurat corect sau scrisoarea a ajuns în dosarul de spam.

Toate celelalte setări arată similar, dar pentru orice eventualitate Informații suplimentare nu va răni.

Pentru a configura trimiterea de e-mail prin SMTP mail ru, trebuie pur și simplu să înlocuiți parametrii Yandex cu parametrii mail ru.

Și pentru a nu reconstrui de fiecare dată server local, cel mai bine este să configurați diferite profiluri openserver. Cum se face acest lucru este prezentat în tutorialul video.

În acest caz, va fi suficient să încărcați pur și simplu profilul și toate setările care au fost specificate pentru acest profil vor fi disponibile după repornirea serverului. Este un lucru foarte convenabil și funcționează foarte simplu.

Pentru fiecare profil (nu contează deloc cum se va numi), trebuie făcute propriile setări, cu excepția cazului în care, desigur, intenționați să utilizați scripturi, sisteme cms și aplicații cu parametri diferiți.
Dacă nu, atunci vă puteți descurca cu setările implicite.

Cât despre SMTP mail ru, totul este identic aici.

Datele Yandex sunt modificate în date mail ru

Se trimite mail prin smtp google

Pentru a configura trimiterea e-mailurilor prin Google SMTP, este nevoie de puțin efort.

În primul rând, crearea unui profil în Google este mai dificilă decât în ​​alte sisteme Yandex și mail ru
În al doilea rând, sistemul nu va lăsa pur și simplu scrisoarea să treacă, chiar dacă furnizați informațiile dvs. de conectare. Pentru început, ea va trimite o scrisoare care conține toate informațiile necesare despre instrucțiuni suplimentare.

Altfel Pentru Google este configurat exact în același mod. Doar toate datele se schimbă.

Pentru a configura trimiterea e-mailurilor prin alt SMTP, toate datele vor fi aproximativ aceleași.

Dacă totul a funcționat pentru tine și scrisorile au ajuns la destinatarul specificat, atunci totul a fost făcut corect. Ar fi grozav dacă ai împărtăși experiențele tale în comentarii.

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.

Loc acest dosar la rădăcina site-ului dvs.

Apoi, introduceți www.YourDomain/test.php în bara de adrese. Dacă o scrisoare este primită la adresa de e-mail 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 lipsuri această metodă Este de remarcat faptul că lucrarea nu este permanentă această metodă. Pot exista întreruperi în trimiterea e-mailurilor pe partea de găzduire.

Principalul dezavantaj al acestei metode este că toate scrisorile primite de 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 acestuia î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.

Setări pentru trimiterea e-mailurilor prin SMTP

Există cazuri în care creatorii de site-uri web se confruntă cu o problemă cu e-mailul site-ului folosind CMS-ul Joomla. De exemplu, atunci când trimiteți o scrisoare prin formular feedback Pot apărea următoarele tipuri de erori: „Nu s-a putut instanția funcția de e-mail” sau „Eșuat la apelarea funcției de e-mail”. De asemenea, este posibil să trimiteți o scrisoare fără erori, dar ca urmare aceasta tot nu ajunge la destinatar.

De ce apar aceste probleme cu poșta? Pentru a răspunde la această întrebare, trebuie să mergeți la următoarea cale din panoul de control: „Sistem” - „Setări generale” - fila „Server” - secțiunea „Setări e-mail”.

CMS Joomla oferă trei mecanisme pentru trimiterea de scrisori: PHP Mail, Sendmail și SMTP. În mod implicit, este folosit PHP Mail, care deseori provoacă probleme, care sunt legate în principal de setările găzduirii utilizate.

Pe baza celor de mai sus, concluzionăm: fie apelăm la furnizorul de găzduire pentru ajutor, fie folosim metoda Sendmail sau SMTP de a trimite scrisori. Să ne concentrăm pe utilizarea SMTP.

Setări pentru trimiterea de e-mailuri folosind SMTP

SMTP (Simple Mail Transfer Protocol) este un protocol de rețea utilizat pentru transferul de e-mail. Pentru a utiliza SMTP, trebuie să configurați corect setările serverului de e-mail specific care va fi utilizat.

Pentru a vedea Setări SMTP, trebuie să selectați „SMTP” în „Metoda de trimitere”. Să ne uităm la fiecare setare a serverelor de e-mail populare: Yandex, Mail, Gmail, Rambler și Yahoo.

Setări SMTP pentru Yandex

  1. E-mail de site: căsuța poștală pe yandex.ru, de exemplu: [email protected]
  2. Securitate SMTP: SSL
  3. Port server SMTP: 465
  4. Nume de utilizator SMTP: conectare la cutia poștală pe yandex.ru, de exemplu: khasanov (fără @yandex.ru)
  5. Server SMTP: smtp.yandex.ru

Setări SMTP pentru Mail

  1. E-mail de site: căsuță poștală pe mail.ru, de exemplu: [email protected]
  2. Expeditorul scrisorii: intrarea care va fi afișată de destinatar în câmpul „Expeditor”.
  3. Dezactivați corespondența: activat/dezactivat. funcții de corespondență în masă
  4. Autorizare pe serverul SMTP: Da
  5. Securitate SMTP: SSL
  6. Port server SMTP: 465
  7. Nume de utilizator SMTP: cutie poștală pe mail.ru, de exemplu: [email protected]
  8. Parola SMTP: parola cutiei poștale
  9. Server SMTP: smtp.mail.ru

Setări SMTP pentru Gmail

  1. E-mail de site: căsuța poștală la gmail.com, de exemplu: [email protected]
  2. Expeditorul scrisorii: intrarea care va fi afișată de destinatar în câmpul „Expeditor”.
  3. Dezactivați corespondența: activat/dezactivat. funcții de corespondență în masă
  4. Autorizare pe serverul SMTP: Da
  5. Securitate SMTP: SSL
  6. Port server SMTP: 465
  7. Nume de utilizator SMTP: căsuța poștală gmail.com, de exemplu: [email protected]
  8. Parola SMTP: parola cutiei poștale
  9. Server SMTP: smtp.gmail.com

Setări SMTP pentru Rambler

  1. E-mail de pe site: căsuța poștală la rambler.ru, de exemplu: [email protected]
  2. Expeditorul scrisorii: intrarea care va fi afișată de destinatar în câmpul „Expeditor”.

PHPMailer este o bibliotecă foarte convenabilă și populară pentru trimiterea de mesaje e-mail de pe site-ul dvs. web. Acest articol descrie setările de bază ale bibliotecii și oferă exemple de cod pentru trimiterea mesajelor. PHPMailer are în sortimentul său poate tot ce ți-ai putea dori de la lucrul cu e-mailul: trimiterea în moduri diferite, prin diferite servere, inclusiv prin smtp, abilitatea de a cripta și semna scrisorile, astfel încât acestea să nu ajungă în spam și multe altele.

Puteți descărca biblioteca PHPMailer de la https://github.com/PHPMailer/PHPMailer (butonul „Clonați sau descărcați”).

În primul rând, mă voi uita la câteva exemple simple pentru a clarifica cum să trimiteți e-mailuri folosind PHPMailer.

Trimiterea de e-mailuri prin funcția mail() folosind PHPMailer

Dacă doriți să trimiteți e-mailuri de la găzduirea dvs. prin intermediul dvs server de mail, atunci totul este destul de simplu și va arăta cam așa:

// Includeți biblioteca PHPMailer, utilizați PHPMailer\PHPMailer\PHPMailer; necesită „PHPMailer/PHPMailer.php”; // Creați o scrisoare $mail = new PHPMailer(); $mail->setFrom(" [email protected]", "Ivan Ivanov"); // de la care (e-mail și nume) $mail->addAddress(" [email protected]", "Vasya Petrov"); // cui (e-mail și nume) $mail->Subject = "Test"; // subiectul scrisorii // text html litere $mail->msgHTML("

Buna ziua!

Aceasta este o scrisoare de testare.

"); // Trimite dacă ($mail->send()) ( echo "Mesaj trimis!"; ) else ( echo "Eroare: " . $mail->ErrorInfo; )

După cum puteți vedea, totul este destul de simplu: conectăm biblioteca, completăm de la cine, cui, subiectul și textul scrisorii și o trimitem. Trimiterea de e-mailuri în acest fel va funcționa numai de la adresele de e-mail din domeniul dvs. (cu excepția cazului în care acestea sunt legate de alți e-mailuri).

Trimiterea de e-mailuri prin SMTP folosind PHPMailer folosind exemplul Yandex și Google

De asemenea, puteți trimite o scrisoare printr-un alt expeditor, de exemplu, prin Yandex. Codul va arăta cam așa:

// Includeți biblioteca PHPMailer, utilizați PHPMailer\PHPMailer\PHPMailer; utilizați PHPMailer\PHPMailer\SMTP; necesită „PHPMailer/PHPMailer.php”; necesită „PHPMailer/SMTP.php”; // Creați o scrisoare $mail = new PHPMailer(); $mail->isSMTP(); // Trimitere prin SMTP $mail->Host = "smtp.yandex.ru"; // Adresa serverului SMTP $mail->SMTPAuth = true; // Activează autentificarea SMTP $mail->Username = "login"; // numele tau de utilizator (fara domeniu si @) $mail->Password = "parola"; // parola dvs. $mail->SMTPSecure = "ssl"; // criptare ssl $mail->Port = 465; // portul de conexiune $mail->setFrom(" [email protected]", "Ivan Ivanov"); // de la care $mail->addAddress(" [email protected]", "Vasya Petrov"); // căruia $mail->Subject = "Test"; $mail->msgHTML("

Buna ziua!

Aceasta este o scrisoare de testare.

"); // Trimite dacă ($mail->send()) ( echo "Mesaj trimis!"; ) else ( echo "Eroare: " . $mail->ErrorInfo; )

Trimiterea de e-mailuri prin Google are o avertizare: trebuie cont google permite accesul la aplicații care nu sunt de încredere. Pentru a face acest lucru, trebuie să vă conectați la contul dvs. https://myaccount.google.com, să mergeți la securitate, să accesați secțiunea „Aplicații neîncrezătoare care au acces la contul dvs.” și să comutați la „Permis” acolo. La momentul scrierii, această pagină este https://myaccount.google.com/u/0/lesssecureapps.

$mail->Host = "smtp.gmail.com"; // Adresa serverului SMTP $mail->SMTPAuth = true; // Activează autentificarea SMTP $mail->Username = "login"; // numele dvs. de utilizator $mail->Password = "parola"; // parola dvs. $mail->SMTPSecure = "ssl"; // criptare ssl $mail->Port = 465; // port de conectare

Dacă lansați programul pentru trimitere prin smtp pentru prima dată, atunci este recomandabil să îl utilizați suplimentar înainte de a trimite $mail->SMTPDebug = 1; pentru a primi toate mesajele de la client și serverul smtp, de ex. Pe ecran va fi afișat întregul proces de conectare, autorizare etc., ceea ce este foarte util pentru depanarea programului dumneavoastră.

Trimiterea unui e-mail cu un atașament folosind PHPMailer

Totul este destul de simplu aici, trebuie doar să folosești metoda addAttachment. Voi da un exemplu și, în același timp, voi demonstra încă câteva caracteristici suplimentare:

// Includeți biblioteca PHPMailer, utilizați PHPMailer\PHPMailer\PHPMailer; utilizați PHPMailer\PHPMailer\Exception; necesită „PHPMailer/PHPMailer.php”; necesită „PHPMailer/Exception.php”; // Creați o scrisoare $mail = PHPMailer nou; $mail->CharSet = "UTF-8"; $mail->setFrom(" [email protected]", "Ivan Ivanov"); // de la care $mail->addReplyTo(" [email protected]", "Ivan Ivanov"); // adresa de returnare $mail->addAddress(" [email protected]", "Vasya Petrov"); // căruia $mail->Subject = "Test"; // subiect $mail->msgHTML(file_get_contents("contents.html"), __DIR__); // obține "corpul" a scrisorii din fișierul $mail->AltBody = "Scrisoare text simplu" // scrisoarea text simplu dacă clientul nu acceptă html $mail->addAttachment("my_file.txt" // atașează un fișier $mail-); >addAttachment("phpmailer) .jpg" // atașați al doilea fișier // Trimiteți if ($mail->send()) ( echo „Mesaj trimis!”; ) else ( echo „Eroare: „ . $mail- >ErorInfo )

Puteți adăuga mai multe adrese de destinatari utilizând addAddress. Sau, dacă este necesar, puteți, dimpotrivă, să ștergeți toate adresele destinatarilor folosind metoda clearAddresses(). Puteți șterge toate atașamentele folosind clearAttachments().

De asemenea, puteți utiliza AdaugăImagine încorporată pentru a adăuga un atașament (de obicei o imagine) la e-mail, care este destinat să fie folosit în cod html și nu va fi disponibil pentru descărcare. Un exemplu de utilizare a unei imagini într-o scrisoare care nu este disponibilă pentru descărcare:

// Includeți biblioteca PHPMailer, utilizați PHPMailer\PHPMailer\PHPMailer; necesită „PHPMailer/PHPMailer.php”; //Creează o scrisoare $mail = PHPMailer nou; $mail->IsHTML(true); $mail->setFrom(" [email protected]", "Ivan Ivanov"); $mail->addAddress(" [email protected]", "Vasya Petrov"); $mail->Subject = "Test"; $mail->AddEmbeddedImage("phpmailer.jpg","testImage"); $mail->Body = "

Imagine în cod html

"; // Trimite $mail->send();

Deci poți trimite litere cu imagini, care sunt doar în corpul scrisorii, dar nu pot fi descărcate ca atașament. Aceste imagini pot fi folosite oriunde în codul html al scrisorii, trebuie doar să specificați cidul imaginii pe care l-ați folosit în AddEmbeddedImage în loc de adresa URL.

Trimiterea de e-mailuri semnate și criptate prin PHPMailer

În mod implicit, PHPMailer criptează toate mesajele trimise. Puteți dezactiva criptarea e-mailurilor numai atunci când trimiteți e-mailuri prin SMTP folosind codul:

$mail->SMTPSecure = false; $mail->SMTPAutoTLS = false;

La semnați scrisoarea cu semnătura DKIM, trebuie să efectuați mai mulți pași:

  • Generați chei private și publice pentru domeniul dvs
  • Adăugați o înregistrare DNS pentru un domeniu TXT cu o cheie publică
  • Configurați semnătura DKIM în PHPMailer înainte de a trimite un e-mail

Acum voi descrie fiecare pas mai detaliat.

Generarea de chei publice și private

Dacă aveți găzduire Linux și aveți acces la Shell, atunci generarea fișierelor cheie este la fel de ușoară ca și decojirea perelor, trebuie să rulați doar 2 comenzi cu drepturile dvs. normale de utilizator:

Openssl genrsa -out test-private.pem 1024 openssl rsa -in test-private.pem -out test-public.pem -pubout

Respectiv, test-privat.pemŞi test-public.pem- acestea sunt chei private și publice. Trebuie să le salvați într-un folder care nu va fi accesibil vizitatorilor site-ului sau oricui altcineva, cu excepția dvs.

Dacă nu este posibil să executați comenzi în shell, atunci pentru a genera chei private și publice și a le salva în fișiere, puteți utiliza următorul cod:

$domain = "test.ru"; // domeniul dvs. $privatekeyfile = "test-private.pem"; // numele fișierului în care va fi scrisă cheia privată $publickeyfile = "test-public.pem"; // numele fișierului în care va fi scrisă cheia publică dacă (file_exists($privatekeyfile)) ( echo "

Utilizarea cheilor existente

"; $privatekey = file_get_contents($privatekeyfile); $publickey = file_get_contents($publickeyfile); ) else ( echo "

Creați chei"; $pk = openssl_pkey_new([ "digest_alg" => "sha256", "private_key_bits" => 2048, "private_key_type" => OPENSSL_KEYTYPE_RSA, ]); openssl_pkey_export_to_file($pk, $spubltaileypkey_de_fișier($spubltaileypkey_de_deschide); ); $publickey = $pubKey["key"]; file_put_contents($publickeyfile, $publickey = file_get_contents);

Cheie privată (păstrați aceasta privată!):

" . $privatekey ."
"; ecou"

Cheie publică:

" . $publickey ."
";

Atenţie! Nu uitați să vă asigurați că folderul în care vor fi salvate fișierele poate fi scris.

Adăugarea unei înregistrări DNS cu o cheie publică

Este necesară o înregistrare DNS pentru ca serverele de e-mail care vor primi scrisorile dumneavoastră să poată verifica semnătura scrisorii citind înregistrarea DNS a domeniului dumneavoastră. De obicei, puteți adăuga o înregistrare DNS în panoul de control al domeniului sau în panoul de control al găzduirii. Dacă nu știți cum să adăugați o intrare, contactați asistența furnizorului dvs. de găzduire.

Trebuie să adăugați o înregistrare DNS ca aceasta:

Nume intrare: mail._domainkey.test.ru. (la sfârșit există un punct ".")

TTL: 3600 (sau oricare va fi implicit)

Tip post: TXT

Sens: v=DKIM1; h=sha256; t=s; p=YOUR_PUBLIC_KEY

În numele intrării test.ru trebuie înlocuit cu numele dvs. de domeniu. Înlocuiți cuvintele „YOUR_PUBLIC_KEY” cu textul pe care l-ați primit la pasul anterior după „Public Key”, fără „-----BEGIN PUBLIC KEY-----” și „-----END PUBLIC KEY- -- --", doar cheia în sine. În acest caz, sunt necesare toate liniile cheii se concatenează într-o singură linie lungă astfel încât să nu existe întreruperi de linie.

Configurarea semnăturii DKIM în PHPMailer și trimiterea unui e-mail

Acum nu mai rămâne decât să faceți câteva setări PHPMailer înainte de a trimite scrisoarea și aceasta va fi semnată. Cred că următorul exemplu va clarifica totul:

// Includeți biblioteca folosiți PHPMailer\PHPMailer\PHPMailer; necesită „PHPMailer/PHPMailer.php”; // Creați o scrisoare $mail = PHPMailer nou; $mail->CharSet = "UTF-8"; $mail->setFrom(" [email protected]"); $mail->addAddress(" [email protected]"); $mail->Subject = "Acesta este un test"; $mail->msgHTML("

Acesta este un test

"); // Configurarea unei semnături DKIM $mail->DKIM_domain = "test.ru"; $mail->DKIM_private = "test-private.pem"; $mail->DKIM_selector = "mail"; // Trimite $ mail- >trimite();

Desigur test.ru ar trebui să vă schimbați numele de domeniu și test-privat.pem la calea completă și numele fișierului cheie privată care a fost creat în etapa de generare a cheii.

Acum, e-mailurile tale trimise prin PHPMailer vor fi semnate DKIM cu cheia ta privată.

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 .

Faptul 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șiere sursă site-ul

Cum vom trimite scrisori de feedback

Înainte de a începe munca practica După ce trimitem scrisori de feedback, vom decide mai întâi cum o vom face.

Formularul de feedback este conceput pentru a permite utilizatorului să comunice cu administratorul site-ului și să transmită mesajul acestuia. 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”;
  • „Textul mesajului”.

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

    Feedback

    "contact" 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 = "email de contact" nume = "email 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 foarte mult trimiterea de e-mailuri prin Protocolul SMTP cu autorizare pe un serviciu de poștă terță parte.

Pentru a-l instala trebuie să descărcați fisierele 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.

Pe langa asta, ultima 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 mesaj" , "1" , "0" );

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

    $comentar = simbol_verificare ($comentar, „Textul mesajului”, "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 = „Mesajul 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 puteți 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 Parolă, 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()) (poz. 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 considerare 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 află 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 autentificare sau a unei parole incorecte.

După eliminarea nepotrivirii parolei (anterior se folosea 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 e-mail 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 alocarea 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 articolul următor, 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

© 2024 ermake.ru -- Despre repararea PC-ului - Portal de informații