Trimiterea unui e-mail din PHP folosind SMTP (cu atașament). Trimiterea de scrisori (SMTP vs. mail PHP) Trimiterea de mail prin servicii de mail smtp

22.09.2022 Știri

Pentru ca un anumit site web să aibă posibilitatea de a funcționa eficient și productiv, crearea lui trebuie abordată cât mai responsabil și cu atenție. Alegerea sistemului care va fi folosit pentru crearea unui magazin online merită o atenție deosebită. Cert este că o platformă comercială specializată în vânzarea de bunuri sau servicii trebuie să permită implementarea tuturor funcționalităților necesare și să fie ușor de utilizat, atât pentru administratorii implicați în întreținerea și completarea site-urilor, cât și pentru clienții magazinelor online. Mulți oameni și companii care se confruntă cu întrebarea de a alege un CMS potrivit pentru ei înșiși analizează dacă să aleagă Magento sau OkayCMS. Să comparăm caracteristicile și capacitățile acestor motoare de site-uri web.

Când lucrați pe propriul site web, o persoană sau o companie va trebui să depună mult efort - doar în acest caz puteți conta pe rezultate pozitive și obținerea unui instrument cu adevărat eficient. Una dintre întrebările fundamentale care trebuie rezolvate chiar înainte de a începe crearea unui site web va fi cum să decideți asupra celei mai potrivite opțiuni CMS. În continuare, vom compara două CMS: Joomla sau OkayCMS și vom acorda atenție caracteristicilor fiecăruia dintre ele.

A avea propriul site web este una dintre cerințele fundamentale pentru o afacere eficientă și cu succes. Statisticile indică în mod clar o creștere a numărului de achiziții de diverse bunuri și comenzi de servicii prin internet. Ținând cont de acest lucru, majoritatea companiilor comerciale sunt deja conștiente de necesitatea de a avea propriul site web. Cu toate acestea, simplul fapt de a avea o resursă de internet nu este suficient pentru a conta pe eficacitatea, profitabilitatea și beneficiile de afaceri așteptate.

Când vă pregătiți să vă creați propriul site web sau să deschideți un magazin online, trebuie să luați în considerare și să analizați multe probleme și, de asemenea, să decideți diverse sarcini. Doar in acest caz te poti baza pe faptul ca proiectul tau va aduce rezultate pozitive si va putea sa iti satisfaca pe deplin asteptarile. Dintre diversele probleme legate de dezvoltarea unui magazin online, problema alegerii unui CMS merită o atenție deosebită. Pentru a vă fi mai ușor să decideți asupra motorului optim pentru dvs., în interior

Atunci când plănuiesc să-și creeze propriul site web pentru un viitor magazin online, un număr destul de mare de oameni și chiar companii specializate în vânzări se confruntă cu o problemă dificilă și extrem de alegere importantă: ce CMS existent să alegeți? Daca te gandesti ce sa alegi: PrestaShop sau OkayCMS, iti sugeram sa citesti acest articol, in care vom compara aceste doua sisteme de creare a site-urilor de internet, in special a magazinelor online.

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 SMTP servere de mail. 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 mesajelor. (sau UTF-8, etc.) $config [ "smtp_from"] = "mashintop.ru"; //Numele dvs. - sau numele site-ului dvs. Va fi afișat când va fi citit în câmpul "De la" $config["smtp_debug"] = fals; //Dacă doriți pentru a vedea mesajele de eroare, specificați adevărat în loc de fals $config["smtp_port"] = "25"; // Port de lucru. Nu schimbați dacă nu sunteți sigur. if($service=="yandex") ( $config[ "smtp_searcher"] = "yandex. ru"; $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"; $header.="Tip de conținut: text/html; 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); fputs($smtp_conn, „EHLO „. $ config["smtp_searcher"]."rn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 250) (printează "EHLO salut eroare"; fclose($smtp_conn) ; ieșire; ) fputs($smtp_conn,"AUTH LOGINrn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 334) (printează "serverul nu a permis autorizarea să înceapă"; fclose ($ smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_username"]."")."rn"); $code = substr(get_data($smtp_conn),0,3000) ; dacă ($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"); $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; ) ) returnează $date; ) $text_email = " Tocmai ați adăugat un anunț pe site-ul mashintop.ru. O puteți vizualiza aici
Cheia dvs.: ".$key."

Prin utilizarea cheia dată veți putea să vă gestionați 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 în cele din 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.



Î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 pdf, txt sau fișier docîn scrisoarea ta.

Configurarea scriptului este destul de simplă, tot ce aveți nevoie este login-ul și parola expeditorului E-mail din care vor fi trimise scrisori.

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->clearRecipients(); $mail->clearCC(); $mail->clearBCC(); $mail->clearAttachments(); ) else ( echo „A apărut o eroare în timp ce 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.

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 o mașină 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 de rețea utilizat pe scară largă, conceput pentru transmiterea de e-mailuri prin rețele TCP/IP. Și toate cele populare au astfel de protocoale. servicii poștale.

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.

În primul rând, trebuie să modificați unele valori în șablonul de script.
la - schimba in adresa poștală unde 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ă 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 previne.

Pentru a configura trimiterea de e-mail prin SMTP mail ru, trebuie pur și simplu să înlocuiți parametrii Yandex cu parametri 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 în care va fi totul informatie necesara pentru instrucțiuni suplimentare.

In caz contrar 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.