Php pašto ir smtp veikimo principai. Laiškų siuntimas (SMTP vs

Pradžia / Kietieji diskai

Laiškų siuntimas per SMTP iš vietinio serverio leidžia išbandyti žinučių siuntimą iš svetainės, esančios vietiniame kompiuteryje, arba paprasčiau, vietiniame serveryje. Norėdami tai padaryti, galite naudoti bet kurią pašto paslaugą „Yandex“, „Google“ arba „mail.ru“.

Visų pirma, SMTP (Simple Mail Transfer Protocol) yra plačiai naudojamas tinklo protokolas, skirtas perdavimui paštu TCP/IP tinkluose. Ir visos populiarios el. pašto paslaugos turi tokius protokolus.

Atsiradus vietiniams serveriams, nebereikėjo rinktis prieglobos paslaugų teikėjo, norint patikrinti atskirų scenarijų ar cms sistemų veikimą, o tuo labiau už tai mokėti. Daug lengviau viską išbandyti kompiuteryje, tada galėsite visiems parodyti, ką „padarėte“.

Daugelis šių serverių jau turi įtaisytus programinė įranga ir reikalingos funkcijos darbui su paštu, tereikia jį teisingai sukonfigūruoti.

Norint patikrinti tokio pašto funkcionalumą, būtinas minimumas:

  • „Openserver“ galite naudoti kaip vietinį serverį.
  • Ir paprastas scenarijus, kurio šabloną galite rasti žemiau.
  • Galite naudoti bet kurį pašto serverį.

Siunčiamas php paštas per SMTP scenarijaus sąranką

Reikia redaguoti paprastą scenarijaus šabloną, kurį galima nukopijuoti toliau arba atsisiųsti iš šimtų panašių svetainių.

Pirmiausia turite pakeisti kai kurias scenarijaus šablono reikšmes.
į — pakeisti į pašto adresą, kuriuo bus išsiųstas laiškas.
tema - laiško tema
žinutę — pats pranešimas arba laiško turinys.

Mano scenarijaus pavyzdys:

Žinoma, galite šiek tiek išplėsti funkcionalumą ir priversti scenarijų rodyti pranešimą apie laiškų siuntimą. Nors iš tikrųjų tai yra SMTP serveris, kuris siunčia, o scenarijus tik generuoja pranešimą.

Pavyzdžiui, galite parašyti taip:

Visos pakeistos reikšmės turi būti kabutėse, kitaip scenarijus išmes klaidą. Po to scenarijų galite įrašyti į vietinio serverio aplanką.

Pavyzdžiui: domenai/send/index.php ir pradėkite nustatyti laiškų siuntimą per SMTP opensrerver.

Paštas ateis bet kuriuo adresu, kuris bus nurodytas scenarijuje, o ne reikšmės "į" , tačiau šis laiškas bus apdorotas ir išsiųstas būtent tuo SMTP, kuris bus nurodytas openserver nustatymuose.

  1. Serverio paleidimas
  2. Atidarykite atvirojo serverio modulį su nustatymais meniu „paštas“.
  3. Mes užpildome visus laukus, kaip parodyta paveikslėlyje, o vartotojo vardą, siuntėjo el. paštą ir slaptažodį pakeičiame iš tikros pašto dėžutės „Yandex“.

Išsaugome nustatymus ir iš naujo paleidus serverį galite pasiekti patį scenarijų. Aplanke „Mano svetainės“ atidarykite aplanką „siųsti“, kuriame yra anksčiau išsaugotas index.php scenarijus.

Kai tik bus pasiektas šis scenarijus, naujame naršyklės lange pasirodys informacija, nurodanti, kad scenarijus baigtas.

Po to turėtumėte patikrinti savo pašto dėžutę, kurio adresas buvo nurodytas scenarijuje, ar laiškas atėjo.

Jei jo nėra, tai reiškia, kad kažkas neteisingai sukonfigūruota arba laiškas atsidūrė šiukšlių aplanke.

Visi kiti nustatymai atrodo panašiai, bet tik tuo atveju papildomos informacijos nepakenks.

Norėdami nustatyti pašto siuntimą per SMTP mail ru, tiesiog turite pakeisti „Yandex“ parametrus „mail ru“ parametrais.

Ir kad nereikėtų kaskart atstatyti vietinis serveris, geriausia konfigūruoti skirtingus atvirojo serverio profilius. Kaip tai padaryti, parodyta vaizdo pamokoje.

Tokiu atveju pakaks tiesiog įkelti profilį ir visi nustatymai, kurie buvo nurodyti šiam profiliui, bus pasiekiami iš naujo paleidus serverį. Tai labai patogus dalykas ir veikia labai paprastai.

Kiekvienam profiliui (visai nesvarbu, kaip jis bus vadinamas) turi būti nustatyti jo nustatymai, nebent, žinoma, planuojate naudoti scenarijus, cms sistemas ir programas su skirtingais parametrais.
Jei ne, galite tai padaryti naudodami numatytuosius nustatymus.

Kalbant apie SMTP paštą ru, čia viskas yra identiška.

„Yandex“ duomenys pakeisti į pašto ru duomenis

Laiškų siuntimas per smtp google

Norint nustatyti laiškų siuntimą per Google SMTP, reikia šiek tiek pastangų.

Pirma, sukurti profilį „Google“ yra sunkiau nei kitose „Yandex“ ir „mail ru“ sistemose
Antra, sistema tiesiog nepraleis laiško, net jei pateiksite savo prisijungimo informaciją. Pirmiausia ji išsiųs laišką, kuriame bus visa reikalinga informacija apie tolesnius nurodymus.

Priešingu atveju „Google“ jis sukonfigūruotas lygiai taip pat. Keičiasi tik visi duomenys.

Norint sukonfigūruoti pašto siuntimą per kitą SMTP, visi duomenys bus maždaug tokie patys.

Jei jums viskas pavyko ir laiškai pasiekė nurodytą adresatą, vadinasi, viskas buvo padaryta teisingai. Būtų puiku, jei pasidalintumėte savo patirtimi komentaruose.

Paštu PHP

Ši funkcija pagal numatytuosius nustatymus įdiegta kaip el. pašto siuntimas. Šiai funkcijai nereikia trečiosios šalies serverio, kad galėtų persiųsti el. Norėdami patikrinti šios funkcijos teisingumą, aplanke su svetaine tiesiog sukurkite failą test.php ir įdėkite ten šį kodą:

Kur vietoj "EL. PAŠTASGAVĖJAS“ Įveskite el. pašto adresą, kuriuo norite siųsti laišką.

Vieta šį failą jūsų svetainės šaknyje.

Tada adreso juostoje įveskite www.YourDomain/test.php. Jei laiškas gautas nurodytu el. pašto adresu, jūsų priegloba veikia tinkamai su laiškų siuntimo funkcija " paštu PHP. Gali būti, kad laiškas pateko į šiukšlių dėžę, todėl jį taip pat reikia patikrinti.

Jei laiškas gautas nesuprantama koduote, pakeiskite eilutę: "Tikrinamas laiškų siuntimas"įjungta „Tikrinamas laiškų siuntimas“, „Content-type:text/html;charset=utf-8“.

Ir pakartokite laiško siuntimą per naršyklės adreso juostą.

Jei po aukščiau nurodytų manipuliacijų bandomasis laiškas nepasiekia galutinio gavėjo, turite susisiekti su prieglobos technine pagalba.

Tarp trūkumų šis metodas Verta paminėti, kad darbas nėra nuolatinis šis metodas. Gali būti trikdžių siunčiant el. laiškus prieglobos pusėje.

Pagrindinis šio metodo trūkumas yra tas, kad visų laiškų, siunčiamų į klientų el. laiškus, pašto paslaugos (gmail, mail.ru, yandex.ru) neatpažins, nes jie buvo išsiųsti tiesiai iš jūsų svetainės.

„Gmail“ pašto paslauga rodo šias raides su klaustuku ir parašu: „Gmail sistema negalėjo patvirtinti, kad šis laiškas buvo išsiųstas iš domeno YourDomain. Tai gali būti šlamštas.

Norėdami išvengti šios situacijos .

SMTP (paprastas pašto perdavimo protokolas)

SMTP – pašto perdavimo protokolas. Iš viso, norint nustatyti pašto perdavimą naudojant šį protokolą, jums reikia paties SMTP serverio. Dažniausias įmonės (domeno) pašto yandex.ru kaip SMTP serverio naudojimo būdas yra https://pdd.yandex.ru/.

Visų pirma tai būtina paskyra (paštas) yandex, kurių pagrindu bus kuriami laiškai Jūsų domenui: “užsakymas@JūsųDomenas” “info@YourDomain”... Pagrindinė paskyra niekur nebus matoma ir naudojama tik kuriant domeno laiškus pagal ją ateityje.

Gavus leidimą asmeninėje „Yandex“ paskyroje, nuorodoje https://pdd.yandex.ru/ sukuriamas domeno paštas. Tai domeno el. pašto adresas, kurį vartotojai matys lauke „Siuntėjas“.

Laukas „Siuntėjas“ yra būtinas siunčiant el. laiškus per SMTP. SMTP naudojimas laiškams siųsti, derinys " Domenas“ – „El. paštas“, todėl laiškus atpažįsta pašto tarnybos.


Tarp šio metodo trūkumų verta paminėti, kad neįmanoma „įkelti“ domeno pašto portreto, nes pačios pašto paslaugos dar neteikia šios funkcijos.

Laiškų siuntimo SMTP nustatymai

Yra atvejų, kai svetainių kūrėjai susiduria su svetainės el. pašto problema naudojant Joomla TVS. Pavyzdžiui, siunčiant laišką per formą atsiliepimai Gali atsirasti šių tipų klaidų: „Nepavyko sukurti pašto funkcijos“ arba „Nepavyko paskambinti paštu funkcija“. Taip pat galima išsiųsti laišką be klaidų, tačiau dėl to jis vis tiek nepasiekia adresato.

Kodėl šios problemos kyla naudojant paštą? Norėdami atsakyti į šį klausimą, valdymo skydelyje turite eiti šiuo keliu: "Sistema" - "Bendrieji nustatymai" - "Serveris" skirtukas - "Pašto nustatymai".

CMS Joomla pateikia tris laiškų siuntimo mechanizmus: PHP Mail, Sendmail ir SMTP. Pagal numatytuosius nustatymus naudojamas PHP Mail, kuris dažnai sukelia problemų, kurios daugiausia susijusios su naudojamo prieglobos nustatymais.

Remdamiesi tuo, kas išdėstyta, darome išvadą: arba kreipiamės pagalbos į prieglobos paslaugų teikėją, arba laiškų siuntimui naudojame Sendmail arba SMTP metodą. Sutelkime dėmesį į SMTP naudojimą.

Laiškų siuntimo naudojant SMTP nustatymai

SMTP (Simple Mail Transfer Protocol) yra tinklo protokolas, naudojamas el. Norėdami naudoti SMTP, turite teisingai sukonfigūruoti konkretaus pašto serverio, kuris bus naudojamas, nustatymus.

Norėdami pamatyti SMTP nustatymai, skiltyje „Siuntimo būdas“ turite pasirinkti „SMTP“. Pažvelkime į kiekvieną populiarių pašto serverių nustatymą: „Yandex“, „Mail“, „Gmail“, „Rambler“ ir „Yahoo“.

„Yandex“ SMTP nustatymai

  1. Svetainės el. paštas: pašto dėžutė yandex.ru, pavyzdžiui: [apsaugotas el. paštas]
  2. SMTP sauga: SSL
  3. SMTP serverio prievadas: 465
  4. SMTP vartotojo vardas: pašto dėžutės prisijungimas yandex.ru, pavyzdžiui: khasanov (be @yandex.ru)
  5. SMTP serveris: smtp.yandex.ru

Pašto SMTP nustatymai

  1. Svetainės el. paštas: pašto dėžutė mail.ru, pavyzdžiui: [apsaugotas el. paštas]
  2. Laiško siuntėjas: įrašas, kurį gavėjas rodys laukelyje „Siuntėjas“.
  3. Išjungti siuntimą paštu: įjungti / išjungti. masinio pašto siuntimo funkcijos
  4. Autorizacija SMTP serveryje: Taip
  5. SMTP sauga: SSL
  6. SMTP serverio prievadas: 465
  7. SMTP vartotojo vardas: pašto dėžutė mail.ru, pavyzdžiui: [apsaugotas el. paštas]
  8. SMTP slaptažodis: pašto dėžutės slaptažodis
  9. SMTP serveris: smtp.mail.ru

SMTP nustatymai, skirti „Gmail“.

  1. Svetainės el. paštas: pašto dėžutė adresu gmail.com, pavyzdžiui: [apsaugotas el. paštas]
  2. Laiško siuntėjas: įrašas, kurį gavėjas rodys laukelyje „Siuntėjas“.
  3. Išjungti siuntimą paštu: įjungti / išjungti. masinio pašto siuntimo funkcijos
  4. Autorizacija SMTP serveryje: Taip
  5. SMTP sauga: SSL
  6. SMTP serverio prievadas: 465
  7. SMTP vartotojo vardas: gmail.com pašto dėžutė, pavyzdžiui: [apsaugotas el. paštas]
  8. SMTP slaptažodis: pašto dėžutės slaptažodis
  9. SMTP serveris: smtp.gmail.com

„Rambler“ SMTP nustatymai

  1. Svetainės el. paštas: pašto dėžutė adresu rambler.ru, pavyzdžiui: [apsaugotas el. paštas]
  2. Laiško siuntėjas: įrašas, kurį gavėjas rodys laukelyje „Siuntėjas“.

PHPMailer yra labai patogi ir populiari biblioteka el. pašto žinutėms iš jūsų svetainės siųsti. Šiame straipsnyje aprašomi pagrindiniai bibliotekos parametrai ir pateikiami pranešimų siuntimo kodų pavyzdžiai. „PHPMailer“ asortimente yra turbūt visko, ko galite norėti dirbant su paštu: siuntimą įvairiais būdais, per skirtingus serverius, įskaitant per smtp, galimybė užšifruoti ir pasirašyti jūsų laiškus, kad jie nepatektų į šlamštą ir dar daugiau.

PHPMailer biblioteką galite atsisiųsti iš https://github.com/PHPMailer/PHPMailer (mygtukas „Klonuoti arba atsisiųsti“).

Pirmiausia pažiūrėsiu į porą paprasti pavyzdžiai kad būtų aišku, kaip siųsti el. laiškus naudojant PHPMailer.

Laiškų siuntimas per mail() funkciją naudojant PHPMailer

Jei norite siųsti el. laiškus iš savo prieglobos per savo pašto serveris, tada viskas yra gana paprasta ir atrodys maždaug taip:

// Įtraukti PHPMailer biblioteką naudoti PHPMailer\PHPMailer\PHPMailer; reikalauti "PHPMailer/PHPMailer.php"; // Sukurti laišką $mail = new PHPMailer(); $mail->setFrom(" [apsaugotas el. paštas]", "Ivanas Ivanovas"); // kieno (el. pašto adresas ir vardas) $mail->addAddress(" [apsaugotas el. paštas]", "Vasya Petrov"); // kam (el. paštas ir vardas) $mail->Subject = "Test"; // laiško tema // html tekstas raidės $mail->msgHTML("

Sveiki!

Tai yra bandomasis laiškas.

"); // Siųsti if ($mail->send()) ( echo "Pranešimas išsiųstas!"; ) else ( echo "Klaida: " . $mail->ErrorInfo; )

Kaip matote, viskas gana paprasta: pajungiame biblioteką, užpildome iš ko, kam, laiško temą, tekstą ir išsiunčiame. Tokiu būdu el. laiškų siuntimas veiks tik iš jūsų domene esančių el. pašto adresų (nebent jie susieti su kitais el. pašto adresais).

Laiškų siuntimas per SMTP naudojant PHPMailer naudojant Yandex ir Google pavyzdį

Taip pat galite išsiųsti laišką per kitą pašto dėžutę, pavyzdžiui, per Yandex. Kodas atrodys maždaug taip:

// Įtraukti PHPMailer biblioteką naudoti PHPMailer\PHPMailer\PHPMailer; naudoti PHPMailer\PHPMailer\SMTP; reikalauti "PHPMailer/PHPMailer.php"; reikalauti "PHPMailer/SMTP.php"; // Sukurti laišką $mail = new PHPMailer(); $paštas->isSMTP(); // Siuntimas per SMTP $mail->Host = "smtp.yandex.ru"; // SMTP serverio adresas $mail->SMTPAuth = true; // Įjungti SMTP autentifikavimą $mail->Vartotojo vardas = "prisijungti"; // jūsų vartotojo vardas (be domeno ir @) $mail->Password = "slaptažodis"; // jūsų slaptažodis $mail->SMTPSecure = "ssl"; // ssl šifravimas $ paštas->Privadas = 465; // ryšio prievadas $mail->setFrom(" [apsaugotas el. paštas]", "Ivanas Ivanovas"); // iš kurio $mail->addAddress(" [apsaugotas el. paštas]", "Vasya Petrov"); // kam $mail->Subject = "Test"; $mail->msgHTML("

Sveiki!

Tai yra bandomasis laiškas.

"); // Siųsti if ($mail->send()) ( echo "Pranešimas išsiųstas!"; ) else ( echo "Klaida: " . $mail->ErrorInfo; )

Laiškų siuntimas per Google turi vieną įspėjimą: reikia google paskyra leisti prieiti prie nepatikimų programų. Norėdami tai padaryti, eikite į savo paskyrą https://myaccount.google.com, eikite į sauga, eikite į skyrių „Nepatikimos programos, turinčios prieigą prie jūsų paskyros“ ir ten perjunkite į „Leidžiama“. Rašymo metu šis puslapis yra https://myaccount.google.com/u/0/lesssecureapps.

$mail->Host = "smtp.gmail.com"; // SMTP serverio adresas $mail->SMTPAuth = true; // Įjungti SMTP autentifikavimą $mail->Vartotojo vardas = "prisijungti"; // jūsų vartotojo vardas $mail->Slaptažodis = "slaptažodis"; // jūsų slaptažodis $mail->SMTPSecure = "ssl"; // ssl šifravimas $ paštas->Privadas = 465; // ryšio prievadas

Jei pirmą kartą naudojate programą, skirtą siųsti per smtp, patartina naudoti papildomai prieš siunčiant $paštas->SMTPDebug = 1; gauti visus pranešimus iš kliento ir smtp serverio, t.y. Visas prisijungimo, autorizacijos ir tt procesas bus rodomas ekrane, o tai labai naudinga derinant programą.

Laiško su priedu siuntimas naudojant PHPMailer

Čia viskas gana paprasta, tereikia naudoti metodą pridėti Priedas. Pateiksiu pavyzdį ir tuo pačiu pademonstruosiu dar keletą papildomos funkcijos:

// Įtraukti PHPMailer biblioteką naudoti PHPMailer\PHPMailer\PHPMailer; naudoti PHPMailer\PHPMailer\Exception; reikalauti "PHPMailer/PHPMailer.php"; reikalauti "PHPMailer/Exception.php"; // Sukurti laišką $mail = new PHPMailer; $mail->CharSet = "UTF-8"; $mail->setFrom(" [apsaugotas el. paštas]", "Ivanas Ivanovas"); // iš kurio $mail->addReplyTo(" [apsaugotas el. paštas]", "Ivanas Ivanovas"); // grąžinimo adresas $mail->addAddress(" [apsaugotas el. paštas]", "Vasya Petrov"); // kam $mail->Subject = "Test"; // tema $mail->msgHTML(file_get_contents("contents.html"), __DIR__); // gauti "body" laiško iš failo $mail->AltBody = "Paprasto teksto laiškas" // paprasto teksto raidė, jei klientas nepalaiko html $mail->addAttachment("mano_failas.txt" // pridėti vieną failą $mail-); >addAttachment("phpmailer) .jpg"); // pridėti antrą failą // Send if ($mail->send()) ( echo "Pranešimas išsiųstas!"; ) else ( echo "Klaida: " . $mail- > ErrorInfo;

Galite pridėti kelis gavėjų adresus naudodami addAddress. Arba, jei reikia, galite, priešingai, išvalyti visus gavėjų adresus naudodami šį metodą ClearAddresses (). Galite išvalyti visus priedus naudodami išvalyti priedus ().

Taip pat galite naudoti AddEmbeddedImage laiško pridėti priedą (dažniausiai paveikslėlį), kuris skirtas naudoti html kode ir kurio nebus galima atsisiųsti. Paveikslėlio naudojimo laiške, kurio negalima atsisiųsti, pavyzdys:

// Įtraukti PHPMailer biblioteką naudoti PHPMailer\PHPMailer\PHPMailer; reikalauti "PHPMailer/PHPMailer.php"; //Sukurti laišką $mail = new PHPMailer; $paštas->IsHTML(tiesa); $mail->setFrom(" [apsaugotas el. paštas]", "Ivanas Ivanovas"); $paštas->adresas(" [apsaugotas el. paštas]", "Vasya Petrov"); $paštas->Subject = "Test"; $mail->AddEmbeddedImage("phpmailer.jpg","testImage"); $paštas->Body = "

Vaizdas html kode

"; // Siųsti $mail-> send();

Taigi galite siųsti raidės su vaizdais, kurie yra tik laiško tekste, bet negali būti atsisiunčiami kaip priedas. Šiuos vaizdus galima naudoti bet kurioje laiško html kode, tereikia nurodyti vaizdo cid, kurį naudojote AddEmbeddedImage, o ne URL adresą.

Pasirašytų ir užšifruotų laiškų siuntimas per PHPMailer

Pagal numatytuosius nustatymus PHPMailer užšifruoja visus išsiųstus pranešimus. El. laiškų šifravimą galite išjungti tik siųsdami el. laiškus per SMTP naudodami kodą:

$paštas->SMTPSecure = false; $paštas->SMTPAutoTLS = false;

Į laišką pasirašyti DKIM parašu, turite atlikti kelis veiksmus:

  • Generuokite privačius ir viešuosius savo domeno raktus
  • Pridėkite DNS įrašą TXT domenui su viešuoju raktu
  • Prieš siųsdami el. laišką, sukonfigūruokite DKIM parašą PHPMailer

Dabar kiekvieną žingsnį aprašysiu šiek tiek išsamiau.

Privačių ir viešųjų raktų generavimas

Jei turite „Linux“ prieglobą ir turite prieigą prie „Shell“, tada sugeneruoti pagrindinius failus yra taip pat paprasta, kaip išlukštenti kriaušes, su įprastomis vartotojo teisėmis paleisti tik 2 komandas:

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

Atitinkamai, testas-privatus.pem Ir test-public.pem- tai privatūs ir viešieji raktai. Turite juos išsaugoti aplanke, kurio negalės pasiekti svetainės lankytojai ar kas nors kitas, išskyrus jus.

Jei apvalkale neįmanoma vykdyti komandų, tada norėdami sugeneruoti privačius ir viešuosius raktus ir išsaugoti juos failuose, galite naudoti šį kodą:

$domenas = "test.ru"; // jūsų domenas $privatekeyfile = "test-private.pem"; // failo, kuriame bus įrašytas privatus raktas, pavadinimas $publickeyfile = "test-public.pem"; // failo, kuriame bus įrašytas viešasis raktas pavadinimas if (file_exists($privatekeyfile)) ( echo "

Naudojant esamus raktus

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

Sukurti raktus"; $pk = openssl_pkey_new([ "digest_alg" => "sha256", "private_key_bits" => 2048, "private_key_type" => OPENSSL_KEYTYPE_RSA, ]); openssl_pkey_export_to_file, $keyget_Keyple); ils ($ pk ; $viešasis raktas = $pubKey["raktas"];

Privatus raktas (išlikti privatus!):

". $privatekey."
"; aidas"

Viešasis raktas:

". $viešasis raktas."
";

Dėmesio! Nepamirškite įsitikinti, kad aplankas, kuriame bus saugomi failai, yra įrašomas.

DNS įrašo pridėjimas su viešuoju raktu

DNS įrašas reikalingas, kad pašto serveriai, kurie gaus jūsų laiškus, galėtų patikrinti laiško parašą skaitydami jūsų domeno DNS įrašą. Paprastai galite pridėti DNS įrašą savo domeno valdymo skydelyje arba prieglobos valdymo skydelyje. Jei nežinote, kaip pridėti įrašą, susisiekite su prieglobos paslaugų teikėjo palaikymo komanda.

Turite pridėti tokį DNS įrašą:

Įrašo pavadinimas: mail._domainkey.test.ru. (pabaigoje yra taškas ".")

TTL: 3600 (arba kuris bus numatytasis)

Įrašo tipas: TXT

Reikšmė: v=DKIM1; h = sha256; t=s; p=YOUR_PUBLIC_KEY

Įrašo pavadinime test.ru turi būti pakeistas jūsų domeno vardu. Pakeičiate žodžius „YOUR_PUBLIC_KEY“ tekstu, kurį gavote atlikdami ankstesnį veiksmą po „Viešasis raktas“, be „-----BEGIN VIEŠAS RAKTAS-----“ ir „-----END VIEŠAS RAKTAS- -- --“, tik pats raktas. Šiuo atveju reikalingos visos pagrindinės eilutės sujungti į vieną ilgą eilutę kad nebūtų eilučių pertraukų.

DKIM parašo nustatymas PHPMailer ir el

Dabar belieka prieš siunčiant laišką padaryti kelis PHPMailer nustatymus ir jis bus pasirašytas. Manau, kad šis pavyzdys viską paaiškins:

// Įtraukti biblioteką naudoti PHPMailer\PHPMailer\PHPMailer; reikalauti "PHPMailer/PHPMailer.php"; // Sukurti laišką $mail = new PHPMailer; $mail->CharSet = "UTF-8"; $mail->setFrom(" [apsaugotas el. paštas]"); $paštas->adresas(" [apsaugotas el. paštas]"); $mail->Subject = "Tai bandymas"; $mail->msgHTML("

Tai yra testas

"); // DKIM parašo nustatymas $mail->DKIM_domain = "test.ru"; $mail->DKIM_private = "test-private.pem"; $mail->DKIM_selector = "paštas"; // Siųsti $ paštas- >siųsti();

Žinoma test.ru turėtumėte pakeisti savo domeno vardą ir testas-privatus.pemį visą privataus rakto failo kelią ir pavadinimą, kuris buvo sukurtas rakto generavimo etape.

Dabar jūsų el. laiškai, išsiųsti per PHPMailer, bus pasirašyti DKIM su jūsų privačiu raktu.

2019-08-05

Sveiki, mielas lankytojau!

Prašau atleisti už vėlavimą atnaujinti tinklaraštį. Tačiau tam yra visiškai suprantamas paaiškinimas. Juk vasara, vasarnamis, svečiai, miškas, vanduo ir daug daugiau, kas neleido spręsti tinklalapio kūrimo klausimų. Bet dabar šiek tiek išsilaisvinau, svečiai išvažiavo ir manau, kad dabar tikrai galėsiu tam skirti deramą dėmesį.

Taigi, kai paskutiniame straipsnyje sujungėme savo domeno paštą su viena iš pašto paslaugų, dabar pažiūrėkime, kaip galite siųsti el. laiškus iš svetainės. Be to, tokiu būdu, kad mūsų laiškai nepatektų į SPAM, o būtų patikimai, su didele tikimybe, pristatyti mūsų gavėjams.

Apskritai, yra įmontuota mail() funkcija, skirta siųsti laiškus PHP. Tačiau reikia pažymėti, kad nepaisant šio metodo paprastumo (šiuo atveju norint išsiųsti laiškus pakanka nurodyti tik vieną kodo eilutę su tam tikrais parametrais), šios parinkties naudojimas turi reikšmingą trūkumą, susijusį su SPAM problema. .

Faktas yra tas, kad gavėjo pusėje esantys pašto serverių anti-SPAM filtrai nelabai palankiai vertina laiškus, siunčiamus per mail() funkciją. Ir dažniausiai tokie pranešimai filtruojami ar net ištrinami dar nepasiekus adresato.

O norint kuo labiau pašalinti tokius atvejus, dažniausiai naudojamas kitas variantas, kai laiškai siunčiami taip, lyg tai būtų daryta trečiosios šalies pašto tarnybos.

Šis metodas vadinamas laiškų siuntimu per SMTP su leidimu. Į kurį šiandien pažvelgsime naudodamiesi atsiliepimų formos siuntimo pavyzdžiu. Be to, tam naudosime gana gerai žinomą ir populiarią PHPMailer biblioteką, kuri leidžia gana paprastai organizuoti laiškų siuntimą per SMTP.

  • Kaip išsiųsime atsiliepimų laiškus
  • Atsiliepimo formos kūrimas
  • PHPMailer bibliotekos įdiegimas
  • Sukuriame scenarijų laiškų siuntimui per SMTP
  • El. laiškų siuntimo tikrinimas
  • Šaltinio failai svetainę

Kaip išsiųsime atsiliepimų laiškus

Prieš pradėdami praktinis darbas Išsiuntę atsiliepimų laiškus, pirmiausia nuspręsime, kaip tai darysime.

Atsiliepimų forma sukurta tam, kad vartotojas galėtų bendrauti su svetainės administratoriumi, kad perteiktų savo pranešimą. Paprastai šią formą sudaro keli laukai ir mygtukas „Pateikti“.

Iš esmės, norint išsiųsti el. laišką, pakanka naudoti tik kelis laukus, kuriuose pateikiama pakankamai informacijos apie vartotoją ir pranešimo turinį, pavyzdžiui:

  • „Vardas“ – įvesti žinutės siuntėjo vardą;
  • „El. paštas“ – siuntėjo elektroninio pašto adresui;
  • "Pranešimo tema";
  • "Pranešimo tekstas".

Nors galite pridėti kitų. Pavyzdžiui, telefono numeris, jei to tikrai reikia.

Mūsų atveju tokie laiškai bus siunčiami svetainės administratoriaus adresu iš tikros pašto dėžutės su įgaliojimu pašto tarnyboje, prie kurios prijungtas mūsų domenas.

Kadangi ankstesniame straipsnyje mes sutelkėme dėmesį į domeno pašto ryšio su „Yandex.Mail“ paslauga patikrinimą, mes išsiųsime el. laišką šiai parinkčiai. Nors tai nėra svarbu. Žemiau matysite tas parinktis, kurias pakeitus galėsite siųsti el. laiškus per Mail.ru pašto serverį.

Kaip tikrą pašto dėžutę, iš kurios bus siunčiami laiškai, naudosime naujai sukurto domeno pašto vartotojo paskyrą, tarkime su adresu [apsaugotas el. paštas]. Ir šiuos laiškus išsiųsime į administratoriaus pašto dėžutę [apsaugotas el. paštas], kurį anksčiau sukūrėme ankstesniame straipsnyje.

Taigi, laiško siuntėjas iš atsiliepimų formos bus pašto dėžutė [apsaugotas el. paštas]., o gavėjas - [apsaugotas el. paštas]. Tokiu atveju visa informacija apie vartotoją, atsiuntusį pranešimą su jos turiniu, bus perduota išsiųsto laiško tekste.

Atsiliepimo formos kūrimas

Apsisprendę dėl laiškų siuntimo tvarkos, dabar sukursime atsiliepimų formą, su kuria tai padarysime.

Žemiau yra šios formos HTML kodas, kurį patalpinsime puslapyje „Kontaktai“ (failas kontakty.php straipsnių kataloge).

    "straipsnis" >

    Kontaktai

    Atsiliepimai

    "kontaktas" veiksmas = "#" metodas = "post" >

    Atsiliepimo forma

    Jei turite klausimų, prašymų ir verslo pasiūlymų, galite susisiekti su mumis naudodami toliau pateiktą atsiliepimų formą.

    "kontaktų blokas" >

    "kontaktinis įvestis" >

    "tekstas" id = "kontakto vardas" vardas = "kontakto vardas" pavadinimas = "Vardas turi būti rusų kalba ir jame turi būti bent 3 simboliai" modelis = "{3,}" reikalingas >

  1. "tuščias kontaktas" >

    "kontaktinis įvestis" >

    "el. paštas" id = "kontaktinis el. paštas" vardas = "kontaktinis el. paštas" reikalingas >

  2. "kontaktinė tema" >

  3. "kontaktas-komentaras" >

  4. "kontaktinis mygtukas" >

    "pateikti" vardas = "kontaktinis mygtukas" vertė = "Siųsti" >

1 pav. Atsiliepimo formos HTML kodas

Kaip galiausiai atrodo čia rodoma atsiliepimų forma, galite pamatyti toliau pateiktoje ekrano kopijoje.

Taip sukuriama norima forma. O dabar galite pereiti prie duomenų apdorojimo ir siuntimo el. pašto žinutės forma.

PHPMailer bibliotekos įdiegimas

Kaip minėta anksčiau, laiškams siųsti naudosime PHPMailer biblioteką, kuri labai supaprastins el. SMTP protokolas su trečiosios šalies pašto paslaugos leidimu.

Norėdami jį įdiegti, turite atsisiųsti reikalingus failus. Tai galima padaryti naudojant GitHub žiniatinklio paslaugą naudojant Composer (paketo priklausomybės tvarkyklę, skirtą PHP). Arba tiesiog atsisiųskite reikiamus failus įprastu būdu.

73 ekrano kopija

Žemiau yra GitHub žiniatinklio paslaugos puslapis, kuriame pažymėta nuoroda į įprastą PHPMailer bibliotekos atsisiuntimą.

Be to, naujausia versija 6.0.7, kuris buvo išsaugotas šio straipsnio rašymo metu, galima atsisiųsti iš pridedamos medžiagos.

Bet kokiu atveju gautas archyvo failas turėtų būti išpakuotas, o po to ištrauktas PHPMailer-master aplankas su visu jo turiniu turėtų būti patalpintas į svetainės šaknį. Tuo pačiu, kad būtų paprasčiau, galite pervadinti jį PHPMailer. Žemiau yra PHPMailer aplanko, esančio pagrindiniame svetainės kataloge, turinys.

Taip įdiegėme PHPMailer biblioteką. Po to galime pradėti kurti scenarijų, su kuriuo siųsime el. laiškus iš mūsų svetainės.

Sukuriame scenarijų laiškų siuntimui per SMTP

Norėdami sudaryti scenarijų, pakanka pasinaudoti PHPMailer naudojimo rekomendacijomis, pateiktomis GitHub puslapyje, kurią anksčiau naudojome norėdami atsisiųsti biblioteką.

Jie visų pirma nurodo, kad scenarijaus pradžioje reikia importuoti PHPMailer klases į pasaulinę vardų erdvę. Ir pateikiamos konkrečios atitinkamo kodo eilutės. Taip pat yra PHPMailer savybių ir metodų naudojimo pavyzdžių, įskaitant galimybę siųsti laiškus per SMTP.

Bet jei to nepakanka, taip pat galite naudoti dokumentaciją, kurioje yra visų šios bibliotekos savybių ir metodų aprašymas.

74 ekrano kopija

Toliau pateikiamas scenarijaus kodas, skirtas laiškų siuntimui iš atsiliepimų formos per SMTP su įgaliojimu. Kur visos su PHPMailer susijusios eilutės pateikiamos su paaiškinimais ir paryškintos šviesiu fonu.

Likusi dalis, įskaitant fragmentus, susijusius su duomenų gavimu ir apdorojimu iš formos, kuriuos anksčiau turėjome naudoti kituose procesoriuose, yra pažymėta tamsiu fonu. Jie buvo išsamiai aptarti anksčiau straipsnyje, skirtame konkrečiai duomenų gavimo ir tikrinimo iš PHP formos klausimams. Kur mes taip pat kalbėjome apie universalią vartotojo funkciją, skirtą formos duomenims patvirtinti ir apdoroti check_ymbol().

Šį scenarijų įdėsime į tą patį kontakty.php failą, kuriame anksčiau sukūrėme atsiliepimų formą.

    //----Scenarijus laiškų siuntimui per SMTP naudojant PHPMailer ----

    //Importuokite PHPMailer klases į visuotinę vardų erdvę. Jie turėtų būti scenarijaus viršuje, o ne funkcijos viduje

    naudoti PHPMailer\PHPMailer\PHPMailer ;

    naudoti PHPMailer\PHPMailer\Exception ;

    jeigu (!tuščias($_POST["kontaktinis mygtukas" ])) (

    $vardas = $_POST["kontakto vardas" ];

    $vardas = check_simbolas ($vardas, "Vardas" , "1" , "/^+\z/iu" );

    $el. paštas = $_POST["kontaktinis el. paštas" ];

    $email = check_symbol ($el. paštas, "El. paštas" , "1" , "/^+@(+\.)+(2,6)\z/i");

    $subject = $_POST["kontakto tema" ];

    $subject = check_symbol ($subject, "Pranešimo tema" , "1" , "0" );

    $komentaras = $_POST["kontaktas-komentaras" ];

    $komentaras = check_ymbol ($komentaras, "Pranešimo tekstas", "1" , "0" );

    jeigu (!tuščias($GLOBALS["alert" ])) (

    $ įspėjimas = "Formos duomenys nebuvo išsiųsti. Rastos šios klaidos:\n".$alert;

    įtraukti"alert.php" ;

    kitaip {

    //Prijungimas prie bibliotekos

    reikalauti"PHPMailer/src/PHPMailer.php" ;

    reikalauti"PHPMailer/src/Exception.php" ;

    reikalauti"PHPMailer/src/SMTP.php" ;

    $paštas = naujas PHPMailer(); //Klasės inicijavimas

    $nuo = " [apsaugotas el. paštas]" ; //El. pašto adresas, iš kurio siunčiamas laiškas

    $to = " [apsaugotas el. paštas]" ; //Gavėjo adresas

    $paštas -> isSMTP(); //Naudokite SMTP protokolą

    $mail -> Host = "smtp.yandex.ru" ; //Pašto serverio adresas

    $paštas -> SMTPAuth = tiesa ; //Įjungti autorizacijos režimą

    $mail -> Vartotojo vardas = " [apsaugotas el. paštas]" ; //Prisijunkite iš domeno el. pašto, prijungto prie trečiosios šalies el. pašto paslaugos (šiuo atveju „Yandex.Mail“)

    $paštas -> Slaptažodis = "27MrDon89" ; // Domeno pašto slaptažodis

    $paštas -> SMTPSecure = "ssl" ; //Šifravimo protokolas

    $paštas -> Prievadas = "465" ; //SMTP serverio prievadas

    $paštas -> CharSet = "UTF-8" ; //Kodavimas

    $paštas -> setFrom ($nuo, "Administratorius" ); //Siuntėjo adresas ir vardas

    $paštas -> pridėtiAdresas ($kam, "Administratorius" ); //Gavėjo adresas ir vardas

    $mail -> isHTML ( tiesa ); //Nustatyti el. pašto formatą į HTML

    $paštas -> Tema = „Atsiliepimo forma pateikta“; //El. pašto tema (antraštė)

    $mail -> Body = "

    Siuntėjo vardas: $vardas

    Siuntėjo adresas: $el. paštas

    Pranešimo tema: $subject

    Pranešimo turinys: $komentuoti

    " ; //Pranešimo turinys

    $paštas -> AltBody = "Alternatyvus raidžių tekstas"; //Alternatyvus el. paštas, jei el. pašto programa nepalaiko HTML formato

    $paštas -> SMTPDbug = 0 ; //Įgalinti SMTP derinimą: 0 – išjungta (įprastam naudojimui), 1 = kliento pranešimai, 2 – kliento ir serverio pranešimai

    jeigu($mail -> send()) (

    $ įspėjimas = "Pranešimas išsiųstas"; //Naršyklės dialogo lange išveskite pranešimą apie sėkmingą laiško išsiuntimą

    kitaip {

    $ įspėjimas = "Klaida, el. laiškas negali būti išsiųstas: ".$mail -> ErrorInfo ; //Išvesti klaidos pranešimą

    įtraukti"alert.php" ;

Fig.5 Scenarijus el. laiškų siuntimui per SMTP su leidimu

Kaip matote, visos su el. laiško siuntimu tiesiogiai susijusios eilutės, kuriose nurodyti būtini metodai ir savybės, yra su komentarais. Todėl nėra prasmės kartotis, bet galime pasilikti tik ties kai kuriais iš jų, kuriems iš tiesų reikia papildomų paaiškinimų, būtent:

1. Dėl to, kad laiškas siunčiamas iš trečiosios šalies pašto tarnybos, čia taikomi konkretų SMTP serverį atitinkantys nustatymai. Šiuo atveju, naudojant Yandex.Mail serverį, taikomos šios nuosavybės reikšmės:

  • Turtas Šeimininkas(poz.28) - Pašto serverio adresas su reikšme smtp.yandex.ru;
  • Turtas SMTPSecure
  • Turtas Uostas

Šios nuosavybės vertės buvo paimtos iš Yandex.Help puslapio, parodyto šioje ekrano kopijoje.

Tačiau tokią informaciją galima gauti ir iš kitų šaltinių. Norėdami tai padaryti, tiesiog įveskite atitinkamą užklausą paieškos sistemoje, pavyzdžiui: „Yandex smtp serveris“. Kur galima rasti daug nuorodų šia tema.

Panašiai nustatymų reikšmes galima gauti iš kitų SMTP serverių. Žemiau yra Mail.ru žinyno puslapio ekrano kopija, kurioje rodomi Mail.ru pašto tarnybos SMTP serverio nustatymai.

Taigi, naudojant Mail.ru kaip trečiosios šalies SMTP serverį, turėtų būti taikomos šios PHPMailer klasės savybių reikšmės:

  • Turtas Šeimininkas(poz.28) - Pašto serverio adresas (smtp.mail.ru);
  • Turtas SMTPSecure(poz.32) - Šifravimo protokolas (ssl);
  • Turtas Uostas(poz. 33) - SMTP serverio prievadas (465).

Panašus požiūris turėtų būti taikomas ir kitoms el. pašto paslaugoms.

2. Turte Vartotojo vardas(30 poz.) būtina nurodyti pilną domeno pašto dėžutės adresą. Šiuo atveju " [apsaugotas el. paštas]".

Tačiau jei laiškams siųsti naudojate kitą paskyrą, o ne domeno pašto paskyrą, bet adresą, tiesiogiai susijusį su pašto paslauga, pvz. [apsaugotas el. paštas]“, tada prisijungimas turėtų būti tik adreso dalis iki „@“ ženklo. Tokiu atveju prisijungimo vardas turėtų reikšmę „feedback“.

3. PHPMailer suteikia nuosavybę SMTPDbug(50 poz.), kuri leidžia naršyklės ekrane rodyti įvairaus lygio klaidas. Ši funkcija labai supaprastina problemų, susijusių su scenarijaus derinimo, paiešką.

Paprastai įprastu režimu, kai reikšmė nustatyta į 0, išsamios informacijos apie klaidą išvestis yra išjungta. Bet jei kyla problemų siunčiant paštą arba derinant, galima naudoti kitas reikšmes, kad būtų rodoma reikšmingesnė informacija apie klaidą.

Norėdami pamatyti, kaip tai atrodo praktiškai, laikinai įveskime tam tikrą nustatymų klaidą. Pavyzdžiui, domeno pašto slaptažodis (ypatybė Slaptažodis, 31 poz.). Taip pat rodyti išsamią informaciją apie klaidą, laikinai nustatytą nuosavybėje SMTPDbug(poz.50) reikšmė 1. Kai viskas bus derinama ir patikrinta, išjungsime SMTP derinimo režimą, 1 pakeisdami 0.

Baigiamojoje scenarijaus dalyje, nurodus visas reikiamas savybes ir būdus, metodas naudojamas laiško siuntimui siųsti ()) (51 poz.). O jei laiškas išsiųstas, ir būdas siųsti () už objektą $ paštas grąžina true, tada naršyklės dialogo lange per kintamąjį $alert Bus rodomas pranešimas apie sėkmingą pašto siuntimą (poz. 52).

Jei dėl kokių nors priežasčių laiškas negalėjo būti išsiųstas ir, atitinkamai, metodas negalėjo grąžinti tikrovės, tada šią būseną lydės atitinkamas klaidos pranešimas (55 poz.).

El. laiškų siuntimo tikrinimas

Sukūrę laiškų siuntimo scenarijų, žinoma, turime pažvelgti į savo „kūrybiškumo“ rezultatą. Ar čia į viską atsižvelgėme ir ar nepadarėme klaidų?

Norėdami tai padaryti, pabandykime, kaip numatyta, išsiųsti vartotojo pranešimą svetainės administratoriui iš atsiliepimų formos. Žemiau pateikiama atsiliepimo formos ekrano kopija su laukeliais, užpildytais prieš pateikiant.

O štai formos pateikimo rezultatas.

Kur iš pranešimo naršyklės dialogo lange aišku, kad laiškas negali būti išsiųstas dėl SMTP ryšio problemos.

Tačiau nuo šiol turtas SMTPDbug(poz. 50) priskiriama 1 reikšmė, tada galime matyti išsamią informaciją apie įvykusią klaidą ir sužinoti jos atsiradimo priežastį.

Toliau pateiktoje ekrano kopijoje parodyta, kad bandant prisijungti buvo aptikta autentifikavimo klaida, tai reiškia, kad buvo naudojamas neteisingas prisijungimo vardas arba slaptažodis.

Pašalinus slaptažodžio neatitikimą (anksčiau buvo naudojamas neteisingas slaptažodis, kad būtų galima patikrinti papildomos informacijos apie klaidą išvestį), bandysime išsiųsti laišką dar kartą.

Šį kartą viskas atrodė gerai ir gavome pranešimą, kad laiškas sėkmingai išsiųstas. Matyt, išskyrus sąmoningai įvestą laikiną domeno el. pašto slaptažodžio klaidą, jokių kitų klaidų nepadarėme.

Tačiau norėdami įsitikinti, kad laiškas tikrai buvo pristatytas adresatui, įveskite laišką su adresu [apsaugotas el. paštas] ir pažiūrėk į rezultatą.

Kaip matote, laiškas iš adreso [apsaugotas el. paštas], iš kurio išsiuntėme el. laišką pavadinimu „Atsiliepimai“ sėkmingai pasiekė svetainės administratorių. Tuo pačiu metu laiško tekste yra visas turinys, kurį sukūrėme scenarijuje naudodami duomenis, gautus iš atsiliepimų formos, būtent:

  • Siuntėjo vardas: Nikolajus;
  • Siuntėjo adresas: [apsaugotas el. paštas];
  • Pranešimo tema: tikrinamas pašto siuntimas;
  • Pranešimo turinys: bandomasis pranešimas.

Dabar, sėkmingai patikrinę laiškų siuntimą, galite išjungti SMTP derinimo režimą, priskirdami nuosavybę SMTPDbug(50 poz.) reikšmė 0.

Taigi užbaigėme užduotį sukurti įrankį, skirtą laiškų siuntimui per SMTP su leidimu naudojant trečiosios šalies pašto serverį.

Pavyzdžiui, kitame straipsnyje apžvelgsime, kaip siųsti patvirtinimo el. laiškus, kad būtų atkurti registruoto vartotojo paskyros duomenys.

Svetainės šaltinio failai

Svetainės šaltinio failus su šiame straipsnyje atliktais atnaujinimais galima atsisiųsti iš pridedamos papildomos medžiagos:

  • www katalogo failai
  • MySQL duomenų bazių lentelės

© 2024 ermake.ru - Apie kompiuterių taisymą - Informacinis portalas