Trimiterea de e-mail prin smtp php. Trimiterea de e-mailuri prin SMTP de pe un server local

10.12.2021 Efecte foto

Î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 de date securizat.

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.

În unele cazuri, în scopul de a testa sau diagnostica funcționarea e-mailului, administratorul de e-mail trebuie să verifice trimiterea scrisorilor prin serverele sale Exchange (și nu numai) de la anumite gazde. Dacă serverul nu necesită autorizare (server open-relay), puteți trimite e-mail. Cu toate acestea, în majoritatea cazurilor, serverele de e-mail necesită autorizare pentru a trimite e-mail. În acest exemplu, vom arăta cum să efectuați autentificarea AUTH LOGIN pe un server SMTP în consola telnet și să trimitem o scrisoare.

Autentificare– în terminologia Exchange, aceasta este autentificarea de bază, atunci când numele de utilizator și parola sunt transmise prin rețea criptate folosind un algoritm baza64 formă. Pe majoritatea serverelor interne Exchange, administratorii nu dezactivează De bazăAutentificare. Puteți verifica suportul acestuia în setările conectorului de recepție.

Nota. Vă rugăm să rețineți că un atacator, atunci când accesează un canal de comunicare, poate intercepta și decripta cu ușurință acreditările de utilizator codificate în Base64. Prin urmare, această metodă de autorizare este recomandată a fi utilizată exclusiv în rețele private corporative.

Pentru a autoriza serverul de mail folosind AUTH LOGIN, trebuie să convertim numele de utilizator și parola utilizatorului de la care scrisoarea va fi trimisă în format Base64. Acest lucru se poate face folosind scripturi sau servicii online. Folosesc site-ul https://www.base64encode.org/.

Nume utilizator: testuser@contoso.com, în codificarea Base64 a rezultat: dGVzdHVzZXJAY29udG9zby5jb20=

Parolă: $ sus3RsTr)ng- în Base64 JHVwM1JzVHIpbmc=

Acum, în linia de comandă folosind Telnet, ne conectăm la portul 25 (SMTP) al serverului nostru de e-mail (voi evidenția comenzile introduse cu albastru):

telnet mail.contoso.com 25

Dacă este Exchange, va returna ceva de genul;

Să ne prezentăm:

ehlo sender.contoso.com

Serverul va returna o listă de tipuri și capabilități de autorizare acceptate. După cum puteți vedea, autorizarea de bază (AUTH LOGIN) este în listă.

250-mail.contoso.com Bună ziua
250 - DIMENSIUNEA 36700160
250-CONDUCERE
250-DSN
250-CODURI DE STARE ÎMBUNĂTĂTATE
250-STARTTLS
250-AUTH LOGIN
250-8BITMIME
250-BINARMIME
250 BĂRĂTIRE

Autentificare

Serverul ar trebui să răspundă:
334 VXNlcm5hbWU6

Acum inserăm numele de utilizator în format Base64, pe care l-am codificat mai devreme:
dGVzdHVzZXJAY29udG9zby5jb20=

Serverul ar trebui să răspundă:

334 UGFzc3dvcmQ6.

Acum este timpul să lipiți parola în format Base64:
JHVwM1JzVHIpbmc=

Dacă numele de utilizator și parola sunt corecte, serverul va răspunde.
235 2.7.0 Autentificare reușită

Dacă nu:

535 5.7.8 Eroare: autentificarea eșuată: UGFzc3dvcmQ6

Acum puteți completa câmpurile standard ale scrisorii:

mail de la: [email protected]
250 2.1.0 Expeditorul OK
rcpt la: [email protected]
250 2.1.5 Destinatar OK
date
354 Începeți introducerea e-mailului; termina cu .
de la: TestUserovich
către: TheAdmin< [email protected] >
Subiect: Test BASE SMTP autentificat prin Telnet
Acesta este testul
.
250 2.6.0 Poștă pusă în coadă pentru livrare

RENUNȚĂ

221 2.0.0 Închiderea conexiunii.
Conexiune închisă de gazda străină.

Asta e tot, scrisoarea de test ar trebui să fie livrată cu succes în căsuța poștală a destinatarului.

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ă multe informații variate pe Internet și ceea ce este disponibil 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 pe aici?! 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 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_password"].""). "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"); [email protected]$cod = substr(get_data($smtp_conn),0.3000); [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, 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 majoritatea cazurilor, 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”;
  • „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 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 în detaliu mai devreme într-un articol dedicat în mod special 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, „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țializarea clasei

    $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 de domeniu

    $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 alt cont decât un cont de e-mail de domeniu pentru a trimite scrisori, dar o adresă legată direct de serviciul de corespondență, 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, așa cum intenționăm, 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 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 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 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 directorului www
  • Tabelele bazei de date MySQL

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 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 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.