Alimentarea foii cu PHP vikoryst și SMTP (cu file). Încărcați e-mail prin SMTP de pe un server local Încărcați o foaie php smtp

Alimentarea foii cu PHP vikoryst și SMTP (cu file). Încărcați e-mail prin SMTP de pe un server local Încărcați o foaie php smtp

2019-08-05

Bună, dragul meu ghid!

Vă rog să mă iertați că am încurcat noul blog. Să avem o explicație foarte clară. Cumva, vara, dacha, oaspeți, pădure, apă și o mulțime de alte lucruri care nu mi-au permis să mă ocup de crearea site-ului. De îndată ce oaspeții s-au adunat puțin, au plecat și cred că acum pot cu siguranță să arăt cuiva respectul cuvenit.

Ei bine, din moment ce am conectat anterior e-mailul domeniului nostru la unul dintre serviciile de e-mail, acum ne întrebăm cum putem forța un e-mail de pe site. Mai mult, pentru ca listele noastre să nu fie irosite către SPAM, ci să fie livrate în mod fiabil, cu un nivel ridicat de încredere, destinatarilor noștri.

În cele din urmă, pentru a adăuga foi în PHP, a fost implementată funcția mail(). Cu toate acestea, trebuie remarcat faptul că, indiferent de simplitatea acestei metode (în care opțiunea de a adăuga foi este suficientă pentru a introduce un singur rând de cod cu parametrii de bază), implementarea acestei opțiuni are un dezavantaj semnificativ, din cauza problema SPAM-ului.

În dreapta este că filtrul anti-SPAM al serverelor de e-mail din partea gazdă nu interferează cu listele trimise prin funcția mail(). Și mai ales, astfel de notificări sunt filtrate, altfel dispar fără să ajungă la destinatar.

Și pentru a dezactiva pe cât posibil astfel de situații, alegeți o altă opțiune în care să funcționeze trimiterea foilor, în loc să utilizați un serviciu de e-mail terță parte.

Această metodă se numește trimiterea de e-mailuri prin SMTP cu autorizare. Ce suntem astăzi și uitați-vă la aplicarea managementului formularelor strigătul clopotului. Mai mult, în acest scop am dori să folosim binecunoscuta și populara bibliotecă PHPMailer, care vă permite să organizați pur și simplu trimiterea foilor prin SMTP.

  • Yak mi nadsilatimemo frunze zvorotnogo z'vyazku
  • Crearea formei unei legături de guler
  • Instalarea bibliotecii PHPMailer
  • Formați un script pentru trimitere prin SMTP
  • Verificăm trimiterea e-mailului
  • Fișiere de ieșire site-ul web

Yak mi nadsilatimemo frunze zvorotnogo z'vyazku

Înainte de asta, cum să procedezi roboți practici De la întărirea frunzelor gulerului, mănunchiul este important, deoarece este cerobitimemo.

Formularul formularului de contact este destinat astfel încât persoana care contactează administratorul site-ului să-și poată transmite informațiile. Vă rugăm să rețineți că acest formular constă din multe câmpuri și butonul „Adăugați”.

În principiu, pentru a trimite un e-mail, este suficient să selectați doar câteva câmpuri pentru a oferi suficiente informații despre schimbul și schimbarea informațiilor, cum ar fi:

  • „Nume” – pentru a introduce numele directorului de notificare;
  • „E-mail” - pentru adresă prin e-mail director;
  • „Temă de informare”;
  • „Textul mesajului”.

Dacă doriți, puteți adăuga altele. De exemplu, numărul de telefon, ce, cum, ce, ce este necesar.

În versiunea noastră, astfel de liste sunt încărcate pe adresa administratorului site-ului dintr-un ecran de mail real cu autorizare pe serviciul de mail la care este conectat domeniul nostru.

Deoarece articolul anterior s-a concentrat pe inversarea conectării e-mailului de domeniu la serviciul Yandex.Mail, atunci vom supraalimenta e-mailul pentru această opțiune. Nu vreau, dar avem principii. Aceste opțiuni vor fi marcate mai jos, dacă le modificați, puteți forța un e-mail prin; server de mail Mail.ru.

Deoarece ecranul poștal este real, din cauza căruia frunzele sunt întărite, vom vikoristovat înregistrarea în cloud a managerului de cont poștal de domeniu nou creat, să spunem cu adresa [email protected]. Și vom întări frunzele pe Captură de ecran poștală administrator [email protected], pe care l-am creat anterior la statistica din față.

Astfel, expeditorul foii cu forma unui link de guler va fi un ecran postal [email protected]., și suntem posedați - [email protected]. În acest caz, toate informațiile despre corespondent, care a trimis informații de la locul său, vor fi transmise în corpul foii de mai sus.

Crearea formei unei legături de guler

După ce am luat în considerare însăși ordinea întăririi foilor, acum creăm forma unui liant pliat, de dragul acestui proces.

Mai jos este codul HTML al acestui formular, pe care îl postăm pe pagina „Contacte” (fișier kontakty.php în catalogul articolelor).

    "articol" >

    Contacte

    Link la gateway

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

    Forma gulerului

    Puteți intra în contact cu toate propunerile dvs. de alimente, nutriție și afaceri prin intermediul formularului de mai jos.

    "bloc de contact" >

    "intrare de contact" >

    "text" id = "nume de contact" nume = "nume de contact" titlu = „Ar trebui să fiu rus și să conțin cel puțin 3 caractere” model = "{3,}" necesar >

  1. "contact gol" >

    "intrare de contact" >

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

  2. "subiect de contact" >

  3. "contact-comentare" >

  4. "buton de contact" >

    "Trimite" nume = "buton de contact" valoare = "Adăuga" >

Fig. 1 Cod HTML pentru forma indicativului de apel

După cum pare, forma legăturii gulerului este desenată aici, vă puteți minuna de următoarea captură de ecran.

În acest fel, este creat formularul necesar. Și acum puteți merge la procesarea alimentelor și consolidarea datelor sub formă de notificare poștală.

Instalarea bibliotecii PHPMailer

După cum sa menționat mai devreme, pentru a trimite e-mailuri vom folosi biblioteca PHPMailer pentru a vă permite să trimiteți cu ușurință e-mailuri prin protocolul SMTP cu autorizare pe un serviciu de e-mail terță parte.

Pentru a-l instala trebuie sa incantati fisierele necesare. Puteți câștiga din serviciul web GitHub, vikoryst și Composer (manager de depozit de pachete pentru PHP). Sau pur și simplu, accesați fișierele necesare într-o manieră extrem de serioasă.

captura de ecran 73

Mai jos este pagina serviciului web GitHub, unde este postată biblioteca originală PHPMailer.

Crimeea, Voi păstra versiunea 6.0.7, care a fost salvat la momentul scrierii acestui articol, puteți descărca din materialele disponibile.

Dacă trebuie vreodată să eliminați fișierul arhivă, dezarhivați-l și apoi plasați folderul PHPMailer-master extras împreună în rădăcina site-ului. Cu toate acestea, pentru simplitate, îl puteți redenumi în PHPMailer. Mai jos se află în locul folderului PHPMailer, aflat în directorul rădăcină al site-ului.

Astfel, am instalat biblioteca PHPMailer. După aceea, putem începe să formulăm scriptul, pentru ajutor suplimentar de pe site-ul nostru, vă rugăm să ne contactați.

Formați un script pentru trimitere prin SMTP

Pentru a crea un script, este suficient să urmați rapid recomandările de descărcare a PHPMailer, îndreptate către pagina GitHub, pe care am folosit-o pentru a descărca biblioteca.

Ele, aparent, înseamnă că primul script trebuie să importe clase PHPMailer din spațiul de nume global. Și sunt date linii specifice ale codului parolei. Și, de asemenea, a fost aplicată aplicarea puterii și metodelor PHPMailer, inclusiv pentru opțiunea de trimitere a e-mailului prin SMTP.

Dacă acest lucru nu este suficient, puteți obține rapid documentație care descrie toate puterile și metodele bibliotecii.

captura de ecran 74

Mai jos este codul pentru scriptul pentru a trimite formularul gateway-ului prin autorizare SMTP. Toate rândurile pe care le conține PHPMailer sunt date cu explicații și afișate în culori strălucitoare.

Reshta, inclusiv fragmente care reprezintă extragerea și prelucrarea datelor din formular, pe care anterior am avut ocazia să le studiem în alte colecții, a indicat cenuşă întunecată. Ele au fost discutate în detaliu mai devreme în articol, dedicat nutriției în sine, din extragerea și verificarea datelor din formularul în PHP. Am aflat, de asemenea, despre funcția universală a instrumentului de verificare și prelucrare a datelor din formular check_symbol().

Acest script se află în același fișier kontakty.php în care am format forma link-ului guler.

    //----Script de trimis prin SMTP pentru ajutor suplimentar PHPMailer----

    //Importă clase PHPMailer în spațiul de nume global. Mirosurile sunt în partea de sus a scenariului și nu în mijlocul funcției

    utilizare PHPMailer\PHPMailer\PHPMailer;

    utilizare PHPMailer\PHPMailer\Exception;

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

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

    $nume = simbol_verificare ($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”, „1”, „0”);

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

    $comentar = simbol_verificare ($comentar, „Textul mesajului”, "1" , "0" );

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

    $alert = „Datele din formular nu au fost trimise. Au fost dezvăluite următoarele declarații:\n”.$alerta;

    include„alert.php”;

    altfel {

    //Conexiuni la bibliotecă

    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]" ; //Adrese poștale pentru trimiterea foii

    $to = " [email protected]" ; //Adresele posesorului

    $mail -> isSMTP(); //Suport pentru protocolul SMTP

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

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

    $mail -> Nume utilizator = " [email protected]" ; //Conectați-vă pentru un e-mail de domeniu conectat la un serviciu de e-mail terță parte (în acest caz în 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"; //Koduvannya

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

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

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

    $mail -> Subiect = „Forma gulerului a fost corectată”; //Subiect foaie (antet)

    $mail -> Corp = "

    Numele directorului: $nume

    Adresele directorului: $email

    Subiect: $subiect

    Notă: $comentare

    " ; //În loc de foaie

    $mail -> AltBody = „Text alternativ pentru foaie”; //Este disponibilă o foaie alternativă deoarece clientul poștal nu acceptă formatul HTML

    $mail -> SMTPDebug = 0; // Funcționalitatea SMTP este activată: 0 - VMK (pentru wiki obișnuit), 1 = notificare client, 2 - notificare client și server

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

    $alert = "Mesaj trimis"; //Afișează o notificare în caseta de dialog a browserului despre succesul încărcării foii

    altfel {

    $alert = "Amendament, foaia poate fi trimisă: ".$mail -> ErrorInfo ; //Anunț despre acordul de pace

    include„alert.php”;

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

Aparent, toate rândurile care implică direct trimiterea de notificări poștale, în care sunt necesare metodele și puterea necesare, sunt însoțite de comentarii. Nu are sens să repeți acest lucru, dar te poți concentra doar pe unele dintre ele, care ar necesita explicații suplimentare, dar și:

1. Datorită faptului că foaia este procesată de un serviciu de e-mail terță parte, există setări care corespund unui anumit server SMTP. În acest caz, pentru opțiunea de server Yandex.Post, valorile autorităților actuale sunt fixe:

  • Autoritate Gazdă(poz. 28) - adresele serverului de e-mail cu valorile smtp.yandex.ru;
  • Autoritate SMTPSecure
  • Autoritate Port

Aceste valori ale autorităților au fost preluate de pe pagina Yandex.Help, afișată în următoarea captură de ecran.

Alternativ, astfel de informații pot fi obținute din alte resurse. Pentru a face acest lucru, este suficient să introduceți o anumită intrare în sistemul de căutare, de exemplu: „Server smtp Yandex”. Puteți ști cât de bună este calitatea acestei alimente.

Ajustări similare pot fi făcute prin alte servere SMTP. Mai jos este o captură de ecran a paginii de ajutor Mail.ru, care arată cum este configurat serverul SMTP pentru serviciul de e-mail Mail.ru.

Și astfel, dacă se folosește un server SMTP terț Mail.ru, puterea clasei PHPMailer va fi afectată:

  • Autoritate Gazdă(poz. 28) – adrese de server de mail (smtp.mail.ru);
  • Autoritate SMTPSecure(poz. 32) - protocol de criptare (ssl);
  • Autoritate Port(Poz.33) - Port server SMTP (465).

O abordare similară ar trebui stabilită pentru alte servicii poștale.

2. La Yakost Nume de utilizator(poz. 30) este necesar să se indice adresa exactă a ecranului de e-mail al domeniului. În acest episod, ca logare din ecranul poștal, unde trimiți foi, vei vedea „ [email protected]".

Cu toate acestea, pentru a mări listele vikory, este necesar să folosiți înregistrarea cloud nu pentru adresa poștală a domeniului, ci pentru adresa direct din fața serviciului poștal, de exemplu " [email protected]", atunci autentificarea este responsabilă doar pentru partea din adresă până la semnul "@". Acest tip de autentificare are valoarea "feedback".

3. PHPMailer a transferat putere SMTPDebug(poz.50), care vă permite să afișați o gamă diferită de beneficii pe ecranul browserului. Această abilitate simplifică semnificativ detectarea problemelor cu un script bine dezvoltat.

În modul normal, când valoarea este setată la 0, afișarea informațiilor de raportare despre spălare este dezactivată. Dacă există probleme cu livrarea corespondenței sau dacă este mai bine, pentru a afișa mai multe informații despre livrare, puteți utiliza alte valori.

Pentru a ne minuna cum arată în practică, vom introduce acum o mică măsură în ajustări. De exemplu, parola pentru un e-mail de domeniu (autoritate Parola, Poz.31). Și, de asemenea, pentru eliberarea raportului de informații despre grațiere, ne vom instala imediat în autorități SMTPDebug(poz.50) valoarea 1. După ce totul este ajustat și verificat, activați modul de ajustare SMTP, înlocuind 1 cu 0.

În partea finală a scenariului, după inserarea tuturor controalelor și metodelor necesare, există o metodă de întărire a foii trimite()) (Poz.51). І ce foaie va fi trimisă, І metoda trimite() pentru obiect $mail Dacă este adevărat, atunci în caseta de dialog a browserului prin modificare $alerta va fi afișată o notificare despre succesul forței post (poz. 52).

Din păcate, deoarece e-mailul nu a putut fi trimis din niciun motiv și, aparent, metoda nu a putut returna adevărul, un astfel de sistem este însoțit de notificări suplimentare despre modificare (punctul 55).

Verificăm trimiterea e-mailului

După ce am creat un script pentru trimiterea e-mailurilor, este imperativ să ne minunăm de rezultatul „creativității” noastre. Ei au mințit pe toți cei de aici și nu au primit niciun favor.

În acest scop, vom încerca, conform intenției, să trimitem un formular de notificare administratorului site-ului. Mai jos este o captură de ecran a formularului de retur cu câmpurile completate înainte de trimitere.

Și aici este afișat rezultatul editării formularelor.

Da, din notificarea din caseta de dialog a browserului, reiese clar că foaia nu poate fi trimisă din cauza unei probleme de conexiune SMTP.

Ale, fragmente din contagiunea puterii SMTPDebug(poz.50) i se atribuie valoarea 1, apoi putem analiza informațiile din raport despre modificare și putem determina motivul acesteia.

Următoarea captură de ecran arată că atunci când a fost încercată conexiunea, autentificarea a fost compromisă, ceea ce înseamnă că a fost corectată o autentificare sau o parolă incorectă.

După ștergerea incorecității parolei (anterior, parola incorectă a fost verificată pentru a putea verifica informațiile suplimentare despre modificare), vom încerca din nou să trimitem e-mailul.

Cândva, totul a trecut în depărtare și am primit notificări despre livrarea cu succes a e-mailului. Evident, pe lângă modificările în funcție de timp introduse în mod evident în parola pentru e-mailul domeniului, nu ni s-a permis să acceptăm alte modificări.

Pentru a ne asigura că foaia a fost livrată cu succes către destinatar, vă vom trimite adresa poștală [email protected] O să mă minunez de rezultat.

Aparent, foaia este de la adresa [email protected], pentru care am fost nevoiți să trimitem o notificare poștală la numele Gateway Link, site-ul a ajuns cu succes la administratorul site-ului. În acest caz, în corpul foii există tot conținutul pe care l-am format în script cu datele care au fost extrase din forma gulerului și însuși:

  • Numele regizorului: Mykola;
  • Adresele directorului: [email protected];
  • Subiect: Verificarea puterii corespondenței;
  • Notificare: notificare de testare.

Acum, după verificarea cu succes a e-mailului, puteți activa modul de îmbunătățire SMTP, recunoscând autoritățile SMTPDebug(Poz.50) valoare 0.

În acest fel, am decis să creăm un instrument pentru trimiterea de e-mailuri prin SMTP cu autorizație de la un server de e-mail terț.

De exemplu, în starea actuală ne întrebăm cum să întărim foile de confirmare pentru actualizarea datelor contului titularului contului înregistrat.

Fișiere de ieșire ale site-ului web

Fișierele de ieșire ale site-ului cu actualizări, care au fost compilate în acest articol, pot fi descărcate din materialele suplimentare furnizate:

  • Fișiere în directorul www
  • Tabelele bazei de date MySQL

În unele cazuri, la testarea sau diagnosticarea roboților de e-mail, administratorul de e-mail trebuie să verifice distribuția foilor prin serverele lor Exchange (și nu doar altele) de la gazdele anterioare. Deoarece serverul nu necesită autorizare (server open-relay), puteți trimite e-mail. Cu toate acestea, în majoritatea țărilor, serverele de e-mail necesită autorizare pentru a procesa corespondența. În ce aplicație vom arăta cum să folosiți consola telnet pentru a selecta tipul de autentificare AUTH LOGIN pe serverul SMTP și a trimite o foaie.

LOGIN AUT– în terminologia Exchange – aceasta este autentificarea de bază, dacă numele și parola utilizatorului contului sunt transmise printr-o rețea codificată de un algoritm baza64 uite. Pe majoritatea serverelor interne Exchange, administratorii nu activeazăDe bază Autentificare

. Puteți verifica acest suport în setările conectorului de recepție. Notă

. Apreciem că un atacator, atunci când accesează un canal de legătură, poate accesa cu crawlere și decripta cu ușurință datele codificate Base64 ale unui client. Prin urmare, această metodă de autorizare este recomandată a fi utilizată exclusiv în conturile private de corporații.

Pentru a autoriza pe serverul de mail folosind AUTH LOGIN suplimentar, trebuie sa schimbam numele de utilizator si parola utilizatorului, din care va fi incarcata foaia in format Base64. Puteți utiliza scripturi suplimentare și servicii online. Folosesc site-ul https://www.base64encode.org/. Numele lui koristuvach:testuser@contoso. com , codificarea Base64 a produs:

dGVzdHVzZXJAY29udG9zby5jb20= $ Parola:sus3RsTr) ng - În Base64JHVwM1

Acum, în linia de comandă pentru Telnet suplimentar, ne conectăm la portul 25 (SMTP) al serverului nostru de e-mail (comanda introdusă este vizibilă în culorile albastre):

telnet mail.contoso.com 25

Cum este Exchange, ne îndreptăm atenția către educație;

Să ne prezentăm:

ehlo sender.contoso.com

Serverul returnează o listă de tipuri de autorizare și capabilități care sunt acceptate. Cum determinați autorizarea de bază (AUTH LOGIN) î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

LOGIN AUT

Serverul se face vinovat de:
334 VXNlcm5hbWU6

Acum inserăm numele clientului în format Base64, așa cum am codificat anterior:
, codificarea Base64 a produs:

Serverul se face vinovat de:

334 UGFzc3dvcmQ6.

Acum este momentul să introduceți o parolă în format Base64:
JHVwM1JzVHIpbmc=

Dacă aveți parola pentru contul dvs., serverul va fi confirmat.
235 2.7.0 Autentificare reușită

Ca nu:

535 5.7.8 Eroare: autentificarea eșuată: UGFzc3dvcmQ6

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

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; se termina cu.
de la: TestUserovich
către: TheAdmin< [email protected] >
Subiect: BASE SMTP Test autentificat prin Telnet
Acesta este testul
.
250 2.6.0 Poștă pusă în coadă pentru livrare

PĂRĂSI

221 2.0.0 Închiderea conexiunii.
Conexiune închisă de către gazda externă.

În acest moment, întreaga foaie de test poate fi livrată cu succes în cutia destinatarului.

Caut de multă vreme o soluție pentru a forța listele de clienți nu prin funcția mail() din PHP, ci prin servere de mail SMTP. Nu există atât de multă varietate de informații pe Internet și cele care nu funcționează exact așa, sau nu funcționează deloc. Așa că am adunat totul și mi-am scris codul, gata de plecare, așa cum este prezentat pe site-uri.

De ce forțați-l prin SMTP și nu prin mail()

Răspunsul meu este simplu - în fiecare oră prin serverul meu, virușii trimiteau tone de foi, ceea ce ducea la BANU-ul adreselor mele IP de la mulți maileri, de exemplu, de pe gmail.com, iar din conexiunea cu aceștia, corespondenții puteau să fure. foile, așa că sa întâmplat shukati alternativă și știu – nu SMTP

Poate te pot întreba, care este scenariul meu care fură de la alții care zac prin spații deschise?! Vіdpovim

  1. Funcționează prin e-mail yandex, rambler, mail (gmail nu s-a putut ajuta)
  2. Cod nebun. Pentru a o ajusta, este suficient să vă amintiți câteva rânduri.
  3. Întărește foile în format HTML

Axa scenariului important, pe care nu o cunosc pe internet, dar din piele am luat tot ce era necesar. Și haideți să aruncăm o privire la cod.

Funcția smtpmail($mail_to, $subject, $message, $service="yandex") ( $config["smtp_charset"] = "windows-1251"; //informații de codificare. (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 "Cine" $config["smtp_debug"] = false;//Orice doriți. Dacă doriți să primiți notificări, introduceți true în loc de false $config["smtp_port"] = "25" // Nu modificați portul robot dacă nu este specificat = "yandex.ru"; = " [email protected]$config["smtp_username"] = "mashintop"; //Schimbați captura de ecran de e-mail cu numele dvs. $config["smtp_host"] = "smtp.yandex.ru"; //server pentru post power $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 captura de ecran de e-mail cu numele dvs. $config["smtp_host"] = "smtp.rambler.ru"; //server pentru post power $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 captura de ecran de e-mail cu numele dvs. $config["smtp_host"] = "smtp.mail.ru"; //server pentru post power $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 captura de ecran de e-mail cu numele dvs. $config["smtp_host"] = "smtp.gmail.com"; //server pentru livrarea energiei $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 cu serverele a eșuat”; fclose($smtp_conn); ieșire;) $data = get_data($smtp_conn) fputs($smtp_conn,"EHLO); "; . $config["smtp_searcher"]."rn"); $code = substr(get_data($smtp_conn),0,3000;) fputs($smtp_conn,"AUTH LOGINrn"); ($smtp_conn),0,3000); if($code != 334) (printează „serverul nu a permis emiterea de autorizare”; ($smtp_conn); exit;) fputs($smtp_conn,base64_encode("". $config[ "smtp_username"]."")."rn"); $code = substr(get_data($smtp_conn),0,3000) ; "; fclose( $smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_parola"].""). "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ă „server suportat de 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 acceptă DATE”; fclose($smtp_conn); exit;) fputs($smtp_conn,$header."rn".$message."rn.rn"); $cod = substr(get_data($smtp_conn), 0.3000); if($code != 250) (printează „depunerea foii”; fclose($smtp_conn); exit;) fputs($smtp_conn,”QUITrn”); fclose($smtp_conn); ) funcția get_data($smtp_conn) ( $date=""; while($str = fgets($smtp_conn,515)) ( $date .= $str; if(substr($str,3,1) == " " ) ( break; ) ) return $date ) $text_email = " Chiar ai adăugat confuziei de pe site-ul mashintop.ru. Vă puteți minuna de Yogo aici
Cheia dvs.: ".$key."

Cu ajutorul acestei chei îți vei putea depăși confuzia.

$text_email .= " "; smtpmail (" [email protected]", "Cheia pentru a vă conecta la mashintop.ru", $text_email, "yandex"); // wikiristymo Yandex smtpmail(" [email protected]", "Cheia anunțului pe mashintop.ru", $text_email, "mail"); // vikorist mail smtpmail(" [email protected]„Cheie pentru public pe mashintop.ru”, $text_email, „rambler”); // vikorystmo rambler smtpmail(" [email protected]", "Cheie pentru accesul mashintop.ru", $text_email, "gmail"); // și axa gmail nu funcționează:(

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

Acum să ne uităm la câteva elemente pe care aș dori să le arăt respectul meu.

De exemplu, suntem respinși când încercăm să trimitem prin SMTP către Google. De acum înainte, iată textul memorandumului:

Pentru a fi 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 permite autorizarea să înceapă”; fclose($smtp_conn); ieșire;)

Pot pune o masă specifică în pungă

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

Ce înseamnă exact asta – nu știu, dar chiar nu-mi pasă ce legătură are cu conexiunile furate sau neprotejate. Încă nu știu cum să o rezolvăm;

Setări de instalare prin SMTP

Problemele apar atunci când managerii de site sunt blocați cu problema trimiterii de e-mail către un site pe CMS Joomla. De exemplu, atunci când o foaie este presată prin forma unui guler, pot apărea următorul tip de margele: "Nu am putut iniția funcția de mail" sau „Este imposibil să dai clic pe funcția de e-mail”. Aceasta este, de asemenea, o posibilă opțiune pentru întărirea foii fără apariția semnelor, dar rezultatul nu va ajunge tot la destinatar.

De ce sunt probleme cu poșta? Pentru a confirma sursa de alimentare, trebuie să parcurgeți următorul traseu în panoul serverului: „Sistem” - „Setări” - fila „Server” - secțiunea „Setări de postare”.

CMS Joomla are trei mecanisme de încărcare a foilor: PHP Mail, Sendmail și SMTP. PHP Mail este analizat, ceea ce cauzează adesea probleme, care sunt legate în principal de setările de găzduire.

Venind din versiunea atent aranjată: fie contactând furnizorul de găzduire pentru ajutor, fie folosind metoda vikorist de încărcare a foilor Sendmail sau SMTP. Folosesc rețeaua SMTP.

Setări de instalare pentru ajutor suplimentar SMTP

SMTP (Simple Mail Transfer Protocol) este un protocol de rețea pentru transmiterea de poștă electronică. Pentru a utiliza SMTP, trebuie să setați corect setările pentru serverul de e-mail care va fi utilizat.

Pentru a revizui setările SMTP, trebuie să selectați „SMTP” în „Metoda de forțare”. Să aruncăm o privire la modul de configurare a serverelor de e-mail populare: Yandex, Mail, Gmail, Rambler și Yahoo.

Configurarea SMTP pentru Yandex

  1. E-mail către site: captură de ecran poștală pe yandex.ru, de exemplu: [email protected]
  2. Protejați SMTP: SSL
  3. Port server SMTP: 465
  4. Im'ya koristuvach SMTP: autentificare captură de ecran pe yandex.ru, de exemplu: khasanov (fără @yandex.ru)
  5. Server SMTP: smtp.yandex.ru

Setări SMTP pentru Mail

  1. E-mail către site: captură de ecran poștală pe mail.ru, de exemplu: [email protected]
  2. Director de foi: intrarea care este afișată de destinatar în câmpul „Director”.
  3. Porniți priza: uvk./wmk. funcţiile de distribuţie în masă a foilor
  4. Autorizare pe serverul SMTP: Da
  5. Protejați SMTP: SSL
  6. Port server SMTP: 465
  7. Sunt un koristuvach SMTP: captură de ecran poștală pe mail.ru, de exemplu: [email protected]
  8. Parola pentru SMTP: parola din captura de ecran de e-mail
  9. Server SMTP: smtp.mail.ru

Setări SMTP pentru Gmail

  1. E-mail către site: e-mail captură de ecran la gmail.com, de exemplu: [email protected]
  2. Director de foi: intrarea care este afișată de destinatar în câmpul „Director”.
  3. Porniți priza: uvk./wmk. funcţiile de distribuţie în masă a foilor
  4. Autorizare pe serverul SMTP: Da
  5. Protejați SMTP: SSL
  6. Port server SMTP: 465
  7. Sunt koristuvach SMTP: captură de ecran poștală pe gmail.com, de exemplu: [email protected]
  8. Parola pentru SMTP: parola din captura de ecran de e-mail
  9. Server SMTP: smtp.gmail.com

Configurarea SMTP pentru Rambler

  1. E-mail către site: captură de ecran poștală pe rambler.ru, de exemplu: [email protected]
  2. Director de foi: intrarea care este afișată de destinatar în câmpul „Director”.

PHPMailer este o bibliotecă foarte utilă și populară pentru trimiterea de notificări prin e-mail despre site-ul dvs. Acest articol oferă configurația de bază a bibliotecii și aplicarea codului pentru informații. PHPMailer are în sortimentul său probabil tot ce poate fi folosit în procesul de mail: trimitere în diferite moduri, prin diferite servere, incl. prin smtp, vă puteți cripta și semna datele, astfel încât acestea să nu ajungă în spam sau orice altceva.

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

Acum voi trece prin câteva aplicații simple, astfel încât să puteți înțelege cum să porniți paginile cu ajutorul PHPMailer.

Împingeți foile prin funcția mail() folosind PHPMailer

Dacă doriți să încărcați pagini în găzduirea dvs. prin serverul dvs. de e-mail, atunci totul este simplu și arată cam așa:

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

Eu zbor!

Aceasta este foaia de testare.

"); // Sent if ($mail->send()) ( echo "Trimite lista!"; ) else ( echo "Trimite: " . $mail->ErrorInfo; )

Cel mai important, totul este simplu: conectăm biblioteca, ne amintim cui, cui, subiectul, textul foii și îl trimitem. Extinderea foilor în acest fel va fi procesată numai de la adresa de corespondență a domeniului dvs. (deoarece nu sunt legate de alte companii de corespondență).

Încărcarea foilor prin SMTP utilizând PHPMailer suplimentar în aplicațiile Yandex și Google

Puteți trimite foaia, de asemenea, prin alte expedieri, de exemplu, prin Yandex. Codul arată cam așa:

// Includeți biblioteca PHPMailer folosiți PHPMailer \ PHPMailer \ PHPMailer; utilizați PHPMailer\PHPMailer\SMTP; necesită „PHPMailer/PHPMailer.php”; necesită „PHPMailer/SMTP.php”; // Creați o foaie $mail = new PHPMailer(); $mail->isSMTP(); // Pornire prin SMTP $mail->Host = "smtp.yandex.ru"; // Adresele serverului SMTP $mail->SMTPAuth = true; // Activează autentificarea SMTP $mail->Username = "login"; // Numele tău personal (fără domeniul @) $mail->Password = "parolă"; // 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("

Eu zbor!

Aceasta este foaia de testare.

"); // Sent if ($mail->send()) ( echo "Trimite lista!"; ) else ( echo "Trimite: " . $mail->ErrorInfo; )

Încărcarea foilor prin Google Există o avertizare: aveți nevoie de un cont Google cloud permite accesul la programe care nu sunt de încredere. Pentru a face acest lucru, trebuie să accesați contul dvs. de cont https://myaccount.google.com, să accesați securitatea, să accesați secțiunea „Programe nesigure care vă pot accesa contul” și acolo să comutați la „Permis”. La momentul scrierii, acest articol este https://myaccount.google.com/u/0/lesssecureapps.

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

Dacă lansați mai întâi programul de trimitere prin smtp, atunci trebuie să fiți atenți înainte de a trimite $mail->SMTPDebug = 1; Pentru a elimina toate notificările de la client și serverul smtp, atunci. Pe ecran este afișat întregul proces de conectare, autorizare etc., ceea ce este foarte important pentru funcționarea programului dumneavoastră.

Supraîncărcarea foii cu atașamente pentru PHPMailer suplimentar

Totul este ușor de înțeles aici, trebuie doar să utilizați metoda Vickory adauga atasament. Îmi voi îndrepta fundul, demonstrând imediat o grămadă de capabilități avansate:

// Includeți biblioteca PHPMailer folosiți PHPMailer \ PHPMailer \ PHPMailer; utilizați PHPMailer\PHPMailer\Exception; necesită „PHPMailer/PHPMailer.php”; necesită „PHPMailer/Exception.php”; // Creați o foaie $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__); // selectează "corpul" al fisierului $mail->AltBody = "Foaie cu textul original" // fisa cu textul original, deoarece clientul nu suporta html $mail->addAttachment("my_file.txt" // ataseaza un fisier $). mail->addAttachment("phpmailer) .jpg"; // atașarea unui alt fișier // Sent if ($mail->send()) ( echo "Trimite lista!"; ) else ( echo "Trimite: " . $mail ->ErrorInfo )

Adresele proprietarilor pot fi adăugate folosind addAddress. Sau, dacă este necesar, puteți șterge și toate adresele proprietarilor folosind metoda clearAddresses(). Puteți șterge toate depozitele cu ajutor clearAttachments().

De asemenea, poți deveni vikorist AdaugăImagine încorporată Pentru a adăuga un atașament la fișă (numiți imaginea), acesta este destinat utilizării în codul html și nu va fi disponibil pentru descărcare. Imaginile Butt Vikoristan într-o foaie nu sunt disponibile pentru descărcare:

// Includeți biblioteca PHPMailer folosiți PHPMailer \ PHPMailer \ PHPMailer; necesită „PHPMailer/PHPMailer.php”; //Crearea unei foi $mail=new PHPMailer; $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

// Trimis $mail->send();

În acest fel, poți învinge foi cu poze, care nu sunt incluse în corpul foii, altfel nu pot fi descărcate ca atașament. Această imagine poate fi modificată în orice loc din codul html al foii, trebuie doar să specificați adresa URL și cid-ul imaginii așa cum ați modificat-o în AddEmbeddedImage.

Criptarea e-mailurilor semnate și criptate prin PHPMailer

De regulă, PHPMailer criptează toate mesajele trimise. Criptarea unei foi poate fi activată numai atunci când foaia a fost criptată prin SMTP folosind următorul cod:

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

Şchob semnați foaia cu o semnătură DKIM, este necesar să anulați numărul de acțiuni:

  • 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 încărca foaia

Acum voi descrie pielea mai detaliat.

Generarea de chei publice și private

Dacă aveți găzduire Linux și acces la Shell, atunci generarea fișierelor cheie este la fel de simplă ca și decojirea perelor, trebuie doar să introduceți 2 comenzi cu drepturile de bază ale managerului de cont:

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

Aparent, test-privat.pemі test-public.pem- acestea sunt chei private și publice. Trebuie să le salvați într-un folder, deoarece nu vor fi disponibile pentru vizitatorii site-ului sau pentru oricine altcineva în afară de dvs.

Deoarece nu este posibil să introduceți o comandă în shell, să generați chei private și publice și să le salvați în fișiere, puteți utiliza rapid 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"; // Denumiți fișierul în care va fi scrisă cheia publică dacă (file_exists($privatekeyfile)) ( echo "

Wikoristannya cheile existente

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

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 ils($pk); $publickey = $pubKey["cheie"]; file_put_contents($publickeyfile, $publickey); $privatekey = file_get_contents($privatekeyfile); ) echo "

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

" . $privatekey ."
"; ecou"

Cheie publică:

" . $publickey ."
";

Respect! Nu uitați să verificați dacă folderul în care sunt salvate fișierele este inscriptibil.

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

Înregistrarea DNS este necesară pentru ca serverele de e-mail care vor accepta listele dvs. să poată verifica semnătura de pe foaie citind înregistrarea DNS pentru domeniul dvs. De regulă, o înregistrare DNS poate fi adăugată la panoul de server de către domeniul dvs. sau în panoul de server prin găzduire. Dacă nu știți cum să adăugați o înregistrare, obțineți asistență de la furnizorul dvs. de găzduire.

Trebuie să adăugați o înregistrare DNS la vizualizarea curentă:

Lasă-mă să notez: mail._domainkey.test.ru. (De exemplu, punctul „.”)

TTL: 3600 (altfel vei fi prins)

Tip post: TXT

Sens: v = DKIM1; h = sha256; t=s; p=CHEIA_PUBLICĂ_VOASTRĂ

În numele înregistrării test.ru Trebuie să-l înlocuiți cu numele domeniului dvs. Veți înlocui cuvintele „YOUR_PUBLIC_KEY” cu textul pe care l-ați văzut în față după „Public Key”, fără „-----BEGIN PUBLIC KEY-----” și „-----END PUBLIC KEY- -- --", Doar cheia în sine. Prin urmare, toate rândurile de chei sunt necesare alăturați-vă într-un rând lung, astfel încât să nu existe repetări ale rândului.

Ajustarea semnăturii DKIM în PHPMailer și consolidarea foii

Acum nu mai este necesar să configurați PHPMailer înainte de a trimite foaia și va fi semnată. Cred că va fi clar când este îndreptat fundul:

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

Testul Tse

"); // Configurarea semnăturii DKIM $mail->DKIM_domain = "test.ru"; $mail->DKIM_private = "test-private.pem"; $mail->DKIM_selector = "mail"; // Trimis de $ mail- >trimite();

am realizat test.ru Sunteți responsabil pentru schimbarea numelui de domeniu în test-privat.pemÎn primul rând, veți introduce fișierul cheii private create în etapa de generare a cheii.

Acum, e-mailurile trimise prin PHPMailer vor fi semnate cu o semnătură DKIM cu cheia dumneavoastră privată.

 

 

Tse tsikavo: