Autorizačný kód SMTP. Odosielanie emailov (SMTP vs. mail PHP). Ako posielať e-maily pomocou ASP

Keďže posielanie anonymných správ z virtuálnych hostingových serverov Windows je zakázané, posielanie listov by sa malo uskutočňovať cez SMTP server, na ktorý je možné využiť aj náš poštový systém.

Ako posielať e-maily pomocou PHP?

Použitie akejkoľvek triedy PHP, ktorá podporuje autorizáciu na serveri smtp. Môžete napríklad použiť sadu tried PHPMailer.

Môžete tiež použiť náš príklad, ktorý implementuje odosielanie listov pomocou smtp servera, ktorý vyžaduje autorizáciu. Preto nezabudnite do skriptu pridať príslušné prístupové údaje, napríklad:

// Ak potrebujete zobraziť protokol relácie SMTP, môžete odkomentovať nasledujúci riadok. // $_SERVER["debug"] = true; function MailSmtp ($reciever, $subject, $content, $headers, $debug = 0) ( $smtp_server = "smtp.site"; // Adresa servera SMTP$smtp_port = 25 ; // Port servera SMTP$smtp_user = " [e-mail chránený]" ; // Používateľské meno pre autorizáciu na serveri SMTP$smtp_password = "pAsSwORd" ; // Heslo pre autorizáciu na serveri SMTP$mail_from = " [e-mail chránený]" ; // Schránka, z ktorej je list odoslaný$sock = fsockopen ($smtp_server, $smtp_port, $errno, $errstr, 30); $str = fgets ($sock, 512); if (! $sock ) ( printf ( "Zásuvka nie je vytvorená\n" ); exit(1 ); ) smtp_msg ($sock , "HELO " . $_SERVER [ "NÁZOV_SERVERU" ]); smtp_msg($sock, "AUTH LOGIN"); smtp_msg ($sock, base64_encode ($smtp_user)); smtp_msg ($sock, base64_encode ($smtp_password)); smtp_msg ($sock , "MAIL OD:<" . $mail_from . ">" ); smtp_msg ($sock , "RCPT TO:<" . $reciever . ">" ); smtp_msg ($sock , "DATA" ); $headers = "Predmet: " . $predmet . "\r\n" . $hlavičky ; $data = $hlavičky . "\r\n\r\n" . $content . "\r\n." ; smtp_msg ($sock , $data ); smtp_msg ($sock , "QUIT" ); fclose ($sock ); ) funkcia smtp_msg ($sock , $msg ) (ak ( ! $sock ) ( printf ("Zlomená zásuvka!\n" ); exit(1 ); ) if (isset($_SERVER [ "ladenie" ]) && $_SERVER [ "ladenie" ]) ( printf ( "Odoslať od nás : %s
" , nl2br (htmlspecialchars ($msg)); ) fputs ($sock, " $msg \r\n" ); $str = fgets ($sock , 512 ); if (! $sock ) ( printf ( "Socket je dole\n" ); exit(1); ) else ( if (isset($_SERVER [ "ladenie" ]) && $_SERVER [ "ladenie" ]) ( printf ("Prijaté zo servera: %s
" , nl2br (htmlspecialchars ($str )); ) $e = explode (" " , $str ); $code = array_shift ($e); $str = implode ( " ", $e); if ($code > 499 ) ( printf ( "Problémy s konverzáciou SMTP.

Kód %d.
Správa %s
"
, $kód , $str ); exit(1); ) ) ? >

Stiahnite si príklad hotového skriptu s funkciou MailSmtp(): smtpauth.php.sample

Na priame nahradenie funkcie mail() môžete použiť funkciu MailSmtp() opísanú vyššie; zvážte príklad najjednoduchšieho formulára v PHP:

// Hlavičky správ, definujú kódovanie správy, polia From, To atď.$headers = "MIME verzia: 1.0\r\n" ; $headers .= "Typ obsahu: text/html; charset=windows-1251\r\n"; $hlavičky .= "Komu: $do \r\n" ; $headers .= „Od: Meno odosielateľa " ; // pošta ($komu, $predmet, $správa, $hlavičky); require_once "smtpauth.php" ; MailSmtp ($to, $predmet, $správa, $hlavičky); ) ?>
Komu: Predmet: Text: 
 
 

Za účelom tento formulár fungovali bez funkcie mail(), zahrnuli sme súbor smtpauth.php cez require_once a zavolali v ňom popísanú funkciu MailSmtp() s argumentmi podobnými mail(). Zároveň sme zakomentovali samotné volanie mail() v kóde, aby sme sa vyhli chybám pri vykonávaní skriptu.

Ako posielať e-maily pomocou ASP.NET?

Ak používate verziu 2.0, použite triedu MailMessage System.Net.Mail), dobre popísané.

Nižšie sú uvedené príklady jeho použitia pre jazyky C# a VisualBasic:

Príklad pre jazyk C#:

<% @Page Language="c#" %> <% @Import Namespace="System.Net.Mail" %> <% @Import Namespace="System.Net" %> <% MailMessage message = new MailMessage(); // vytvorenie nového písmena message.To.Add(" [e-mail chránený]"); // pridanie adresy príjemcu message.From = new MailAddress("from@ doména.tld", "Meno odosielateľa"); // s uvedením mena a adresy odosielateľa message.Subject = "Predmet správy"; // s uvedením predmetu listu message.BodyEncoding = System.Text.Encoding.UTF8; // určenie kódovania písmen message.IsBodyHtml = false; // určenie formátu písmena (true - HTML, false - nie HTML) message.Body = "Text správy"; // špecifikovanie textu (telo) listu Klient SmtpClient = new SmtpClient("smtp.site",25); // vytvorenie nového pripojenia k serveru "smtp.site" client.DeliveryMethod = SmtpDeliveryMethod.Network; // definuje spôsob odosielania správ client.EnableSsl = false; // zakáže potrebu používať zabezpečené pripojenie k serveru client.UseDefaultCredentials = false; // zakáže používanie predvolených podrobností autorizácie client.Credentials = new NetworkCredential("postmaster@ doména.tld", "***heslo***"); // špecifikovanie potrebných údajov (používateľské meno a heslo) na autorizáciu na serveri SMTP klient.Odoslať(správu); // poslať správu %>

Stiahnite si príklad vyplneného formulára preukazujúceho použitie túto metódu: MailForm.aspx.

Príklad jazyka VisualBasic:

<% @Page Language="VB" Debug="true" %> <% @Import Namespace="System.Net.Mail" %> <% @Import Namespace="System.Net" %> <% Dim smtpMssg AS new MailMessage smtpMssg.From = New MailAddress ("admin@doména.tld", "Sender_name") smtpMssg.To.Add (" [e-mail chránený]") “ pridanie adresy príjemcu smtpMssg.Subject = "Predmet e-mailu" „označenie predmetu listu smtpMssg.Body = "Text správy" “ označenie textu (telo) listu smtpMssg.BodyEncoding = System.Text.Encoding.UTF8 “ označenie kódovania písmen smtpMssg.IsBodyHtml = false " označenie formátu písmena (true - HTML, false - nie HTML) Dim SmtpMail as New SmtpClient("smtp.site", 25) " deklarácia nového objektu typu "SmtpClient" SmtpMail.DeliveryMethod = SmtpDeliveryMethod.Network „označenie spôsobu doručenia listu SmtpMail.UseDefaultCredentials = False "štandardne zakázanie používania autorizačných poverení" SmtpMail.EnableSsl = False " zakáže potrebu používať zabezpečené pripojenie k serveru SmtpMail.Credentials = new NetworkCredential("postmaster@ doména.tld", "***heslo***") "uvedenie potrebných údajov (používateľské meno a heslo) na autorizáciu na serveri SMTP SmtpMail.Send(smtpMssg) “ odoslanie správy %>

Existuje aj zastaraná (a zastaraná) trieda SmtpMail (používajúca menný priestor System.Web.Mail). Nižšie je uvedený príklad jeho použitia pre jazyk VisualBasic:

<% @Page Language="VB" Debug="true" %> <% @Import Namespace="System.Web" %> <% @Import Namespace="System.Web.Mail" %> <% Dim smtpMssg = new MailMessage " deklarácia nového objektu typu "MailMessage" smtpMssg.From = "Meno_odosielateľa doména.tld>" „Uvedenie mena a adresy odosielateľa smtpMssg.To = "admin@ doména.tld" “ uvedenie adresy príjemcu smtpMssg.BodyFormat = MailFormat.Text “ označenie formátu listu smtpMssg.BodyEncoding = Kódovanie.UTF8 "označuje kódovanie písmen smtpMssg.Subject = "Predmet e-mailu" „označenie predmetu listu smtpMssg.Body = "Text správy" “ označenie textu listu smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",1) "označuje potrebu autorizácie SMTP na serveri." smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "admin@ doména.tld") "používateľské meno na autorizáciu smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "***heslo***") "heslo na autorizáciu SmtpMail.SmtpServer = "smtp.site" “ s uvedením adresy servera SMTP SmtpMail.Send(smtpMssg) “ odoslanie správy %>

Ako posielať e-maily pomocou ASP?

Upozorňujeme, že pri používaní nášho smtp servera je potrebná autorizácia, preto nezabudnite do skriptu pridať príslušné prístupové údaje, napríklad:

<% iConfig = Server.CreateObject("CDO.Configuration") Set iConfig = Server.CreateObject("CDO.Configuration") With iConfig.Fields .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.сайт" .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 .Item("http://schemas.microsoft.com/cdo/configuration/languagecode") = "ru" .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "postmaster@doména.tld" .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "heslo" .Update End with Set cdoMessage = CreateObject("CDO.Message") S cdoMessage Set .Configuration = iConfig .From = "Test používateľa doména.tld>" .Komu = "Používateľ " .Subject = "Dobrý deň, používateľ" .TextBody = "Túto správu píšem zo skriptu ASP." .Send End With Set cdoMessage = Nič Nastaviť iConfig = Nič %>

Niektoré CMS už majú vstavané nástroje na odosielanie korešpondencie alebo zodpovedajúce moduly; pozrime sa na tie najpopulárnejšie.

Wordpress

Pre tento CMS existuje špeciálny modul „WP Mail SMTP“, príklad jeho konfigurácie je popísaný na stránke modulu.

Venujte pozornosť ilustrácii v príklade, v našom poštovom systéme je potrebné použiť port 25 a nevyžaduje sa šifrovanie SSL.

Joomla

V administračnom paneli prejdite do časti „Všeobecné nastavenia“, vyberte kartu „Server“. V poli „Pošta“ musíte vybrať spôsob odoslania ako „Server SMTP“, v poliach „Adresa servera SMTP“ a „Prihlásenie SMTP“ a „Heslo SMTP“ zadajte príslušné podrobnosti o poštovom systéme, napríklad: smtp.site, box@vaša_doména a zodpovedajúce heslo.

Drupal

Tento CMS má aj vlastný modul pre prácu so serverom SMTP, založený na PHPMailer. Tento modul si môžete stiahnuť na jeho stránke na webe CMS Drupal, popis inštalácie modulu je dostupný v archíve spolu s ním.

NetCat

Tento CMS nemá vstavané funkcie pre prácu so serverom SMTP. Ak chcete odosielať poštu pomocou skriptov lokality, môžeme vám ponúknuť používanie nášho riešenia, na pripojenie je potrebné vykonať nasledujúce kroky:

  • Stiahnite si archív s potrebnými súbormi z našej webovej stránky ( send_auth_mail.php A mail.inc.php) a rozbaľte ho v počítači;
  • Upraviť súbor send_auth_mail.php z archívu s uvedením podrobností o pripojení k požadovanému serveru SMTP:

    • $mail_smtpServer = "smtp.site"; (adresa servera SMTP)
    • $mail_port = "25" ; (pripojovací port)
    • $mail_username = "[e-mail chránený]" ; (používateľské meno na autorizáciu na serveri SMTP)
    • $mail_password = "heslo"; (heslo pre autorizáciu na SMTP serveri)
  • Vytvorte záložnú kópiu súboru domain.tld/www/netcat/admin/mail.inc.php;
  • sťahovať súbory send_auth_mail.php A mail.inc.php na virtuálnu stránku v adresári doména.tld/www/netcat/admin/

doména.tld by mal byť nahradený názvom vašej domény.

Navrhované riešenie funguje so všetkými modulmi NetCat, ktoré na odosielanie pošty využívajú štandardné funkcie tohto CMS.

Dlho som hľadal riešenie, ako posielať listy používateľom nie cez funkciu mail() v PHP, ale cez mailové servery SMTP. Na internete nie je veľa rôznorodých informácií a to, čo tam je, nefunguje celkom správne alebo nefunguje vôbec. Preto som dal všetko dokopy a napísal som si vlastný kód, založený na už hotových, ktoré sú prezentované na stránkach.

Prečo posielať cez SMTP a nie mail()

Moja odpoveď je celkom jednoduchá – nejaký čas mi vírusy posielali cez môj server tony listov, čo viedlo k tomu, že moja IP adresa bola zakázaná mnohými mailermi, najmä gmail.com, a v súvislosti s tým mohli užívatelia dostávať listy, takže som musel som hľadať alternatívu a našiel som ju - toto je SMTP

Možno vás bude zaujímať, prečo je môj scenár lepší ako ostatné, ktoré sa povaľujú vonku?! ja odpoviem

  1. Funguje s Yandex, Rambler, Mail (gmail nemohol vyhrať)
  2. Vymazať kód. Ak ho chcete nakonfigurovať, stačí zmeniť niekoľko riadkov
  3. Posiela e-maily vo formáte HTML

Tu sú výhody môjho scenára, ktorý som nikde na internete nenašiel, ale z každého som si zobral všetko potrebné. Pozrime sa teda na kód.

Funkcia smtpmail($mail_to, $subject, $message, $service="yandex") ( $config["smtp_charset"] = "windows-1251"; //kódovanie správy. (alebo UTF-8 atď.) $config [ "smtp_from"] = "mashintop.ru"; //Vaše meno - alebo názov vašej stránky. Zobrazí sa pri prečítaní v poli "Od" $config["smtp_debug"] = false; //Ak chcete na zobrazenie chybových hlásení zadajte true namiesto false $config["smtp_port"] = "25"; // Pracovný port. Ak si nie ste istý, nemeňte. if($service=="yandex") ( $config[ "smtp_searcher"] = "yandex. ru"; $config["smtp_email"] = " [e-mail chránený]"; $config["smtp_username"] = "mashintop"; //Zmena názvu vašej poštovej schránky. $config["smtp_host"] = "smtp.yandex.ru"; //server na odosielanie pošty $config[" smtp_password "] = "moi_parol"; //Zmeňte heslo ) elseif($service=="rambler") ( $config["smtp_searcher"] = "rambler.ru"; $config["smtp_email"] = " [e-mail chránený]"; $config["smtp_username"] = "mashintop"; //Zmena názvu vašej poštovej schránky. $config["smtp_host"] = "smtp.rambler.ru"; //server na odosielanie pošty $config[" smtp_password "] = "moi_parol"; //Zmeňte heslo ) elseif($service=="mail") ( $config["smtp_searcher"] = "mail.ru"; $config["smtp_email"] = " [e-mail chránený]"; $config["smtp_username"] = "mashintop"; //Zmena názvu vašej poštovej schránky. $config["smtp_host"] = "smtp.mail.ru"; //server na odosielanie pošty $config[" smtp_password "] = "moi_parol"; //Zmeniť heslo ) elseif($service=="gmail") ( $config["smtp_searcher"] = "gmail.com"; $config["smtp_email"] = " [e-mail chránený]"; $config["smtp_username"] = "alexeybertram"; //Zmena názvu vašej poštovej schránky. $config["smtp_host"] = "smtp.gmail.com"; //server na odosielanie pošty $config[" smtp_password "] = "moi_parol"; //Zmena hesla ) $header="Dátum: ".date("D, j M Y G:i:s")." +0700rn"; $header.="Od: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$config[" smtp_from"]."")))"?=<".$config["smtp_email"].">rn"; $header.="X-Mailer: The Bat! (v3.99.3) Professionalrn"; $header.="Odpoveď: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode(" ".$config["smtp_from"]."")))"?=<".$config["smtp_email"].">rn"; $header.="Priorita X: 3 (normálna)rn"; $header.="ID správy:<172562218.".date("YmjHis")."@".$config["smtp_searcher"].">rn"; $header.="Komu: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("")))."? =<$mail_to>rn"; $header.="Predmet: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$subject."" )))."?=rn"; $header.="Verzia MIME: 1.0rn"; $header.="Typ obsahu: text/html; charset=windows-1251rn"; $header.="Content-Transfer-Encoding: 8bitrn"; $smtp_conn = fsockopen("".$config["smtp_host"]."", $config["smtp_port"],$errno , $errstr, 10); if(!$smtp_conn) (tlač "pripojenie zo serverov zlyhalo"; 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) (tlač "EHLO hello error"; fclose($smtp_conn) ; exit; ) fputs($smtp_conn,"AUTH LOGINrn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 334) (tlač „server nepovolil spustenie autorizácie“; fclose ($ smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_username"]."")."rn"); $code = substr(get_data($smtp_conn),0,3000) ; ak ($code != 334) (tlač "chyba pri prístupe k tomuto používateľovi"; fclose($smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_password"]."). "rn" );$code = substr(get_data($smtp_conn),0,3000); if($code != 235) (vytlačte "nesprávne heslo"); fclose($smtp_conn); exit;) fputs($smtp_conn,"MAIL FROM:".$config["smtp_email"]."rn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 250) (tlač "server odmietol príkaz MAIL FROM"; fclose($smtp_conn); exit;) fputs($smtp_conn,"RCPT TO:".$mail_to."rn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 250 AND $code != 251) (tlač "Server neprijal príkaz RCPT TO"; fclose($smtp_conn); exit;) fputs($smtp_conn,"DATArn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 354) (tlač "server neprijal DATA"; fclose($smtp_conn); exit;) fputs($smtp_conn,$header."rn".$message."rn.rn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 250) (tlač "chyba pri odosielaní listu"; fclose($smtp_conn); exit;) fputs($smtp_conn,"QUITrn"); fclose($smtp_conn); ) funkcia get_data($smtp_conn) ( $data=""; while($str = fgets($smtp_conn,515)) ( $data .= $str; if(substr($str,3,1) == " " ) ( break; ) ) return $data; ) $text_email = " Práve ste pridali inzerát na webovú stránku mashintop.ru. Pozrieť si ho môžete tu
Váš kľúč: ".$key."

Pomocou tohto kľúča môžete spravovať svoju reklamu.

"; $text_email .= " "; smtpmail(" [e-mail chránený]", "Kľúč k reklame na mashintop.ru", $text_email, "yandex"); //použite Yandex smtpmail(" [e-mail chránený]", "Kľúč k reklame na mashintop.ru", $text_email, "mail"); //použite e-mail smtpmail(" [e-mail chránený]", "Kľúč k reklame na mashintop.ru", $text_email, "rambler"); //použite rambler smtpmail(" [e-mail chránený]", "Kľúč k reklame na mashintop.ru", $text_email, "gmail"); // ale gmail nefunguje :(

To je všetko, hotový skript je vo vašich rukách, stačí ho skopírovať, zmeniť hodnoty poľa $config a všetko bude fungovať.

Teraz sa pozrime na niektoré prvky, na ktoré by som sa chcel zamerať.

Napríklad chyba, ktorú dostaneme, keď sa pokúšame odoslať cez SMTP do Google. Na začiatku vidíme tento chybový text:

Aby sme videli niečo konkrétnejšie, poďme trochu upraviť kód

Fputs($smtp_conn,"AUTH LOGINrn"); $code = substr(get_data($smtp_conn),0,3000); echo $code; if($code != 334) (tlač "server nepovolil spustenie autorizácie"; fclose($smtp_conn); exit;)

A nakoniec dostaneme veľmi špecifickú chybu

530 5.7.0 Najprv musíte vydať príkaz STARTTLS. x4sm16408296lbn.2 – gsmtp

Neviem, čo to presne znamená, ale verím, že to má niečo spoločné s bezpečným, nezabezpečeným pripojením. Zatiaľ neviem, ako sa toho zbaviť, takže gmail zostáva momentálne neporazený.



2019-08-05

Dobrý deň, milý návštevník!

Odpustite mi, prosím, meškanie s aktualizáciou blogu. Ale na to existuje úplne pochopiteľné vysvetlenie. Predsa len bolo leto, dačo, hostia, les, voda a mnoho iného, ​​čo mi nedovolilo popasovať sa s tvorbou webu. Ale teraz som sa trochu uvoľnil, hostia odišli a myslím, že teraz tomu určite budem môcť venovať náležitú pozornosť.

Takže potom, čo sme v minulom článku pripojili poštu našej domény k jednej z poštových služieb, teraz sa pozrime, ako môžete posielať e-maily z lokality. Navyše tak, aby naše listy nekončili v SPAM-e, ale boli spoľahlivo, s vysokou mierou pravdepodobnosti doručené našim adresátom.

Vo všeobecnosti je v PHP zabudovaná funkcia mail() na odosielanie listov. Treba však poznamenať, že napriek jednoduchosti tejto metódy (v tomto prípade na odosielanie listov stačí zadať iba jeden riadok kódu s určitými parametrami) má použitie tejto možnosti významnú nevýhodu spojenú s problémom SPAM .

Faktom je, že anti-SPAM filtre poštových serverov na strane príjemcu skutočne neuprednostňujú listy odoslané prostredníctvom funkcie mail(). A vo väčšine prípadov sú takéto správy filtrované alebo dokonca vymazané skôr, ako sa dostanú k adresátovi.

A aby sa takéto prípady čo najviac eliminovali, zvyčajne sa používa iná možnosť, pri ktorej sa listy posielajú tak, ako keby to robila poštová služba tretej strany.

Táto metóda sa nazýva odosielanie pošty cez SMTP s autorizáciou. Na čo sa dnes pozrieme na príklade odoslania formulára spätnej väzby. Navyše na to použijeme pomerne známu a populárnu knižnicu PHPMailer, ktorá vám umožňuje pomerne jednoducho organizovať odosielanie listov cez SMTP.

  • Ako budeme posielať listy so spätnou väzbou
  • Vytvorenie formulára spätnej väzby
  • Inštalácia knižnice PHPMailer
  • Vytvárame skript na odosielanie pošty cez SMTP
  • Kontrola odosielania e-mailov
  • Zdrojové súbory lokality

Ako budeme posielať listy so spätnou väzbou

Predtým, ako začneme s praktickou prácou s odosielaním listov so spätnou väzbou, najprv sa rozhodnime, ako to urobíme.

Formulár spätnej väzby je navrhnutý tak, aby umožnil používateľovi komunikovať so správcom stránky a odovzdať mu jeho správu. Tento formulár sa zvyčajne skladá z niekoľkých polí a tlačidla „Odoslať“.

V zásade na odoslanie e-mailu stačí použiť iba niekoľko polí, ktoré poskytujú dostatočné informácie o používateľovi a obsahu správy, ako napríklad:

  • "Meno" - zadajte meno odosielateľa správy;
  • "E-mail" - pre e-mailovú adresu odosielateľa;
  • "Predmet správy";
  • "Text správy".

Aj keď môžete pridať ďalšie. Napríklad telefónne číslo, ak je to naozaj potrebné.

V našom prípade budú takéto listy zasielané na adresu správcu stránky zo skutočnej poštovej schránky s autorizáciou na poštovej službe, ku ktorej je pripojená naša doména.

Keďže v predchádzajúcom článku sme sa zamerali na kontrolu pripojenia doménovej pošty k službe Yandex.Mail, budeme posielať poštu pre túto možnosť. Aj keď to nie je dôležité. Nižšie uvidíte tie možnosti, ktoré vám po zmene umožnia odosielať e-maily cez poštový server Mail.ru.

Ako skutočnú schránku, z ktorej sa budú posielať listy, použijeme účet novovytvoreného doménového poštového užívateľa, povedzme s adresou [e-mail chránený]. A tieto listy budeme posielať do schránky správcu [e-mail chránený], ktorý sme predtým vytvorili v predchádzajúcom článku.

Odosielateľom listu z formulára spätnej väzby bude teda poštová schránka [e-mail chránený]., a príjemca - [e-mail chránený]. V tomto prípade budú všetky informácie o používateľovi, ktorý odoslal správu s jej obsahom, prenesené v tele odoslaného listu.

Vytvorenie formulára spätnej väzby

Potom, čo sme sa rozhodli pre postup odosielania listov, teraz vytvoríme formulár spätnej väzby, pomocou ktorého to urobíme.

Nižšie je uvedený HTML kód tohto formulára, ktorý umiestnime na stránku "Kontakty" (súbor kontakty.php v adresári článkov).

    "článok" >

    Kontakty

    Spätná väzba

    "kontakt" akcia = "#" metóda = "post" >

    Forma spätnej väzby

    V prípade akýchkoľvek otázok, žiadostí a obchodných návrhov nás môžete kontaktovať pomocou formulára spätnej väzby nižšie.

    "kontaktný blok" >

    "kontaktný vstup" >

    "text" id = "kontaktné meno" meno = "kontaktné meno" titul = "Názov musí byť v ruštine a obsahovať aspoň 3 znaky" vzor = "{3,}" požadované >

  1. "prázdny kontakt" >

    "kontaktný vstup" >

    "e-mail" id = "kontaktný email" meno = "kontaktný email" požadované >

  2. "kontaktný predmet" >

  3. "kontakt-komentár" >

  4. "kontaktné tlačidlo" >

    "Predložiť" meno = "kontaktné tlačidlo" hodnota = "Odoslať" >

Obr.1 HTML kód formulára spätnej väzby

Ako nakoniec vyzerá tu zobrazený formulár spätnej väzby, môžete vidieť na nasledujúcej snímke obrazovky.

Takto sa vytvorí požadovaná forma. A teraz môžete prejsť k problematike spracovania a odosielania údajov formou emailovej správy.

Inštalácia knižnice PHPMailer

Ako už bolo spomenuté, na odosielanie pošty budeme využívať knižnicu PHPMailer, ktorá výrazne zjednoduší odosielanie e-mailov cez protokol SMTP s autorizáciou na poštovú službu tretej strany.

Ak ju chcete nainštalovať, musíte si stiahnuť potrebné súbory. Dá sa to urobiť z webovej služby GitHub pomocou Composer (správca závislostí balíkov pre PHP). Alebo si jednoducho stiahnite potrebné súbory bežným spôsobom.

snímka obrazovky 73

Nižšie je stránka webovej služby GitHub, kde je vyznačený odkaz na bežné stiahnutie knižnice PHPMailer.

Najnovšiu verziu 6.0.7, ktorá bola uložená v čase písania tohto článku, si navyše môžete stiahnuť z priložených materiálov.

V každom prípade by sa mal výsledný archívny súbor rozbaliť a potom by sa mal extrahovaný hlavný priečinok PHPMailer so všetkým jeho obsahom umiestniť do koreňového adresára stránky. Zároveň si ho pre jednoduchosť môžete premenovať na PHPMailer. Nižšie je uvedený obsah priečinka PHPMailer umiestneného v koreňovom adresári stránky.

Takto sme nainštalovali knižnicu PHPMailer. Potom môžeme začať vytvárať skript, pomocou ktorého budeme posielať e-mailové správy z našej webovej stránky.

Vytvárame skript na odosielanie pošty cez SMTP

Na zostavenie skriptu stačí použiť odporúčania na používanie PHPMaileru uvedené na stránke GitHub, ktoré sme predtým použili na stiahnutie knižnice.

Najmä naznačujú, že na začiatku skriptu je potrebné importovať triedy PHPMailer do globálneho menného priestoru. A sú uvedené konkrétne riadky zodpovedajúceho kódu. Sú tu aj príklady použitia vlastností a metód PHPMaileru, vrátane možnosti odosielania pošty cez SMTP.

Ak to však nestačí, môžete použiť aj dokumentáciu, ktorá obsahuje popis všetkých vlastností a metód tejto knižnice.

snímka obrazovky 74

Nižšie je uvedený kód skriptu na odosielanie pošty z formulára spätnej väzby cez SMTP s autorizáciou. Kde sú všetky riadky súvisiace s PHPMailerom uvedené s vysvetlením a zvýraznené svetlým pozadím.

Zvyšok časti vrátane fragmentov súvisiacich s prijímaním a spracovaním údajov z formulára, ktoré sme predtým museli používať v iných procesoroch, je naznačený tmavým pozadím. Podrobnejšie boli rozobraté skôr v článku venovanom konkrétne problematike získavania a overovania údajov z formulára v PHP. Kde sme hovorili aj o univerzálnej používateľskej funkcii na validáciu a spracovanie údajov z formulárov check_symbol().

Tento skript umiestnime do rovnakého súboru kontakty.php, v ktorom sme predtým vytvorili formulár spätnej väzby.

    //----Skript na odosielanie pošty cez SMTP pomocou PHPMailer----

    //Importovanie tried PHPMailer do globálneho priestoru názvov. Mali by byť v hornej časti skriptu, nie vo vnútri funkcie

    použitie PHPMailer\PHPMailer\PHPMailer ;

    použitie PHPMailer\PHPMailer\Výnimka ;

    ak (!prázdny($_POST["contact-button" ])) (

    $name = $_POST["meno-kontaktu" ];

    $meno = kontrolný_symbol ($meno, "Meno" , "1" , "/^+\z/iu" );

    $email = $_POST["kontaktný-e-mail" ];

    $email = check_symbol ($email, "E-mail" , "1" , "/^+@(+\.)+(2,6)\z/i");

    $predmet = $_POST["kontakt-predmet" ];

    $predmet = kontrolný_symbol ($predmet, "Predmet správy" , "1" , "0" );

    $comment = $_POST["kontaktný-komentár" ];

    $comment = check_symbol ($comment, "Text správy", "1" , "0" );

    ak (!prázdny($GLOBALS["upozornenie" ])) (

    $upozornenie = "Údaje formulára neboli odoslané. Našli sa nasledujúce chyby:\n".$alert;

    zahŕňajú"alert.php" ;

    inak {

    //Pripojenie knižnice

    vyžadovať"PHPMailer/src/PHPMailer.php" ;

    vyžadovať"PHPMailer/src/Exception.php" ;

    vyžadovať"PHPMailer/src/SMTP.php" ;

    $mail = Nový PHPMailer(); //Inicializácia triedy

    $from = " [e-mail chránený]" ; //E-mailová adresa, z ktorej je list odoslaný

    $to = " [e-mail chránený]" ; //Adresa príjemcu

    $mail -> isSMTP(); //Použiť protokol SMTP

    $mail -> Host = "smtp.yandex.ru" ; //Adresa poštového servera

    $mail -> SMTPAuth = pravda ; //Povoliť režim autorizácie

    $mail -> Používateľské meno = " [e-mail chránený]" ; //Prihlásenie z e-mailu domény pripojeného k e-mailovej službe tretej strany (v tomto prípade Yandex.Mail)

    $mail -> Heslo = "27MrDon89" ; //Heslo pre doménovú poštu

    $mail -> SMTPSecure = "ssl" ; //Šifrovací protokol

    $mail -> Port = "465" ; //Port servera SMTP

    $mail -> CharSet = "UTF-8" ; //Kódovanie

    $mail -> setFrom ($from, "Správca" ); //Adresa a meno odosielateľa

    $mail -> addAddress ($to, "Správca" ); //Adresa a meno príjemcu

    $mail -> isHTML ( pravda ); //Nastaviť formát e-mailu na HTML

    $mail -> Predmet = "Formulár spätnej väzby odoslaný"; //Predmet e-mailu (nadpis)

    $mail -> Body = "

    Meno odosielateľa: $name

    Adresa odosielateľa: $email

    Predmet správy: $predmet

    Obsah správy: $komentár



    " ; //Obsah správy

    $mail -> AltBody = "Alternatívny text písmen"; //Alternatívny e-mail, ak e-mailový klient nepodporuje formát HTML

    $mail -> SMTPDebug = 0 ; //Povoliť ladenie SMTP: 0 - vypnuté (na bežné použitie), 1 = správy klienta, 2 - správy klienta a servera

    ak($mail -> odoslať()) (

    $upozornenie = "Správa poslaná"; //Do dialógového okna prehliadača vypíše správu o úspešnom odoslaní listu

    inak {

    $upozornenie = "Chyba, e-mail nemožno odoslať: ".$mail -> ErrorInfo ; //Vypíše chybové hlásenie

    zahŕňajú"alert.php" ;

Obr.5 Skript na odosielanie emailov cez SMTP s autorizáciou

Ako vidíte, všetky riadky priamo súvisiace s odoslaním e-mailovej správy, v ktorej sú špecifikované potrebné metódy a vlastnosti, sú sprevádzané komentármi. Preto nemá zmysel sa opakovať, ale môžeme sa venovať iba niektorým z nich, ktoré si skutočne vyžadujú ďalšie vysvetlenia, a to:

1. Vzhľadom na to, že list je odoslaný z poštovej služby tretej strany, použijú sa tu nastavenia zodpovedajúce konkrétnemu SMTP serveru. V tomto prípade sa v prípade použitia servera Yandex.Mail použijú nasledujúce hodnoty vlastností:

  • Nehnuteľnosť Hostiteľ(poz.28) - Adresa poštového servera s hodnotou smtp.yandex.ru;
  • Nehnuteľnosť Zabezpečené SMTPS
  • Nehnuteľnosť Port

Tieto hodnoty vlastností boli prevzaté zo stránky Yandex.Help zobrazenej na nasledujúcej snímke obrazovky.

Takéto informácie však možno získať aj z iných zdrojov. Ak to chcete urobiť, stačí zadať príslušný dotaz do vyhľadávacieho nástroja, napríklad: „Smtp server Yandex“. Kde môžete nájsť veľké množstvo referencií na túto problematiku.

Podobným spôsobom je možné získať hodnoty nastavení z iných serverov SMTP. Nižšie je snímka obrazovky stránky pomocníka Mail.ru, ktorá zobrazuje nastavenia servera SMTP poštovej služby Mail.ru.

A teda v prípade použitia Mail.ru ako servera SMTP tretej strany by sa mali použiť nasledujúce hodnoty vlastností triedy PHPMailer:

  • Nehnuteľnosť Hostiteľ(poz.28) - adresa poštového servera (smtp.mail.ru);
  • Nehnuteľnosť Zabezpečené SMTPS(poz.32) - šifrovací protokol (ssl);
  • Nehnuteľnosť Port(poz. 33) - Port servera SMTP (465).

Podobný prístup by sa mal uplatniť aj pri iných e-mailových službách.

2. V majetku Používateľské meno(poz. 30) je potrebné uviesť celú adresu doménovej schránky. V tomto prípade, " [e-mail chránený]".

Ak však na odosielanie listov používate iné konto ako doménové poštové konto, ale adresu priamo súvisiacu s poštovou službou, napr. [e-mail chránený]", potom by prihlasovacie meno malo byť len časťou adresy po znak "@". Prihlasovacie meno by v tomto prípade malo hodnotu "spätná väzba".

3. PHPMailer poskytuje vlastnosť SMTPDebug(poz. 50), ktorý umožňuje zobraziť rôzne úrovne chýb na obrazovke prehliadača. Táto funkcia výrazne zjednodušuje hľadanie problémov pri ladení skriptu.

V normálnom režime s hodnotou nastavenou na 0 je výstup podrobných informácií o chybe zvyčajne zakázaný. Ak sa však vyskytnú problémy s odosielaním pošty alebo počas ladenia, je možné použiť iné hodnoty na zobrazenie zmysluplnejších informácií o chybe.

Aby sme videli, ako to vyzerá v praxi, dočasne vložíme do nastavení nejakú chybu. Napríklad v poštovom hesle domény (vlastnosť heslo, poz. 31). A tiež na zobrazenie podrobných informácií o chybe, dočasne nastavenej vo vlastnosti SMTPDebug(poz.50) hodnota 1. Keď je všetko odladené a skontrolované, deaktivujeme režim ladenia SMTP, pričom 1 nahradíme 0.

V záverečnej časti skriptu sa po zadaní všetkých potrebných vlastností a metód použije metóda na odoslanie listu poslať ()) (poz. 51). A ak je list odoslaný, a spôsob poslať () pre objekt $mail vráti true, potom v dialógovom okne prehliadača cez premennú $alert Zobrazí sa správa o úspešnom odoslaní pošty (poz. 52).

Ak z nejakého dôvodu nebolo možné odoslať poštu, a teda metóda nemohla vrátiť hodnotu true, potom bude tento stav sprevádzaný zodpovedajúcim chybovým hlásením (poz. 55).

Kontrola odosielania e-mailov

Po vytvorení skriptu na odosielanie pošty sa, prirodzene, musíme pozrieť na výsledok našej „kreatívy“. Zohľadnili sme tu všetko a neurobili sme žiadne chyby?

Ak to chcete urobiť, pokúsme sa podľa plánu odoslať správu od používateľa správcovi lokality z formulára spätnej väzby. Nižšie je snímka obrazovky formulára spätnej väzby s vyplnenými poľami pred odoslaním.

A tu je výsledok odoslania formulára.

Kde je zo správy v dialógovom okne prehliadača zrejmé, že list nemožno odoslať kvôli problémom s pripojením SMTP.

Ale odteraz majetok SMTPDebug(poz. 50) je priradená hodnota 1, následne môžeme vidieť podrobné informácie o vzniknutej chybe a zistiť dôvod jej vzniku.

Nasledujúca snímka obrazovky ukazuje, že pri pokuse o pripojenie bola zistená chyba overenia, čo znamená použitie nesprávneho prihlasovacieho mena alebo hesla.

Po odstránení nezhody hesla (predtým bolo použité nesprávne heslo, aby bolo možné skontrolovať výstup dodatočných informácií o chybe), sa pokúsime odoslať e-mail znova.

Tentokrát sa zdalo, že všetko prebehlo v poriadku a dostali sme správu, že mail bol úspešne odoslaný. Zrejme okrem zámerne zadanej dočasnej chyby v hesle k doménovej pošte sme sa žiadnej inej chyby nedopustili.

Aby sme sa však uistili, že list bol skutočne doručený adresátovi, zadajte poštu s adresou [e-mail chránený] a pozrite sa na výsledok.

Ako vidíte, list z adresy [e-mail chránený], z ktorej sme odoslali emailovú správu s názvom „Spätná väzba“ úspešne dorazila administrátorovi stránky. Telo listu zároveň obsahuje všetok obsah, ktorý sme vygenerovali v skripte pomocou údajov získaných z formulára spätnej väzby, a to:

  • Meno odosielateľa: Nikolay;
  • Adresa odosielateľa: [e-mail chránený];
  • Predmet správy: Kontrola odosielania pošty;
  • Obsah správy: Testovacia správa.

Teraz, po úspešnej kontrole odosielania pošty, môžete deaktivovať režim ladenia SMTP priradením vlastnosti SMTPDebug(poz.50) hodnota 0.

Dokončili sme tak úlohu vytvorenia nástroja na odosielanie pošty cez SMTP s autorizáciou pomocou poštového servera tretej strany.

V ďalšom článku sa napríklad pozrieme na to, ako posielať potvrdzovacie e-maily na obnovenie údajov registrovaných používateľských účtov.

Zdrojové súbory lokality

Zdrojové súbory lokality s aktualizáciami, ktoré boli vykonané v tomto článku, si môžete stiahnuť z priložených doplnkových materiálov:

  • súbory adresára www
  • Databázové tabuľky MySQL

V PHP je pomerne populárne používať skripty, ktoré automatizujú proces odosielania listov. V tomto článku sa pozrieme na jednoduchý skript, ktorý odosiela listy príjemcom cez SMTP( Jednoduchý protokol prenosu pošty ). Obmedziť sa iba na túto funkciu by bolo príliš jednoduché, skript podporuje aj prílohy, to znamená, že k listu môžete pripojiť súbor pdf, txt alebo doc.

Nastavenie skriptu je celkom jednoduché, potrebujete len prihlasovacie meno odosielateľa a heslo k emailu, z ktorého sa budú listy odosielať.

Skript pracuje s triedou km_smtp_class.php, dobrá vec na triede je, že podporuje rôzne protokoly SSL a TLS, ktoré poskytujú bezpečný prenos dát.

Tu je samotný skript:

"smtp.mail.ru", "SMTP_port" => "25", "SMTP_email" => " [e-mail chránený]", "SMTP_pass" => "1111111", "SMTP_type" => "null"); // E-mail príjemcu $Receiver = " [e-mail chránený]"; // Predmet správy $Subject = "Odosielanie e-mailu z PHP"; // Text správy (v HTML) $Text = "Dobrý deň!
Správa odoslaná zo skriptu Mowshon Web: http://site"; // Príloha v liste - adresa k súboru $Attachment = ""; /* $mail = new KM_Mailer(server, port, user, password, type); */ /* Typ môže byť: null, tls alebo ssl */ $mail = new KM_Mailer($SenderConfig["SMTP_server"], $SenderConfig["SMTP_port"], $SenderConfig["SMTP_email"], $SenderConfig["SMTP_pass"], $ SenderConfig[" SMTP_type"]); if($mail->isLogin) ( // Priložiť súbor if($Attachment) ($mail->addAttachment($Attachment);) // Pridať ďalších príjemcov $mail->addRecipient( " [e-mail chránený]"); $mail->addRecipient(" [e-mail chránený]"); /* $mail->send(Od, Pre, Predmet, Text, Predmet = voliteľné) */ $SendMail = $mail->send($SenderConfig["SMTP_email"], $Receiver, $Predmet, $Text ); // Vymazanie zoznamu príjemcov $mail->clearRecipients(); $mail->clearCC(); $mail->clearBCC(); $mail->clearAttachments(); ) else ( echo "Pri pripojenie k serveru SMTP"; ) ?>

Nastavenie skriptu je založené hlavne na poli $SenderConfig, tu musíme špecifikovať SMTP:server, port, login a email heslo. Poďme popísať každý kľúč poľa:

SMTP_server – adresa servera SMTP (individuálna adresa pre rôzne e-maily)

Mail.ru mail: Port smtp.mail.ru: 25, 587 a 465 (so šifrovaním SSL)

Yandex mail: 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 SSL port: 465

(Ak potrebujete adresu smtp serverov, ktoré nie sú v zozname, napíšte do komentárov)

SMTP_port - Už sme to popísali vyššie pre každý smtp server.

SMTP_email - užívateľ by bol presnejší, ale pre prehľadnosť som napísal email, uvádzame emailovú adresu.

SMTP_pass – Heslo pre e-mail, ktorý bol zadaný ako hodnota v kľúči SMTP_email


SMTP_type - Predvolená hodnota NULL. Protokol, podľa ktorého sa budú listy odosielať. Protokoly: SSL a TLS

K listu môžete pridať prílohy jednoduchým zadaním úplnej adresy súboru v premennej $Attachment (/var/patch/to/file/File.pdf)

Ak máte nejaké otázky, napíšte ich do komentárov nižšie.

Mail PHP

Táto funkcia je štandardne implementovaná ako odosielanie e-mailov. Táto funkcia nevyžaduje server tretej strany na preposielanie e-mailov. Ak chcete skontrolovať správnosť tejto funkcie, stačí vytvoriť súbor test.php v priečinku s webom a umiestniť tam nasledujúci kód:

Kde namiesto toho "EMAILRECIPIENT" Zadajte e-mail, na ktorý má byť list zaslaný.

Umiestnite tento súbor do koreňového adresára vašej lokality.

Ďalej do panela s adresou zadajte www.VašaDoména/test.php. Ak dostanete list na zadaný e-mail, váš hosting funguje správne s funkciou odosielania listov " Mail PHP". Je možné, že list skončil v spame, preto ho tiež treba skontrolovať.

Ak list prišiel v nezrozumiteľnom kódovaní, zmeňte riadok: "Kontrola odosielania pošty" na "Kontrola odosielania pošty", "Content-type:text/html;charset=utf-8".

A zopakujte odoslanie listu cez panel s adresou vášho prehliadača.

Ak sa po vyššie uvedených manipuláciách testovací list nedostane ku konečnému príjemcovi, musíte kontaktovať technickú podporu vášho hostiteľa.

Medzi nevýhody tejto metódy stojí za zmienku, že táto metóda nefunguje konzistentne. Môže dôjsť k prerušeniam odosielania e-mailov na strane hostiteľa.

Hlavnou nevýhodou tejto metódy je, že všetky listy odoslané na e-maily klientov nerozpoznajú poštové služby (gmail, mail.ru, yandex.ru), pretože boli odoslané priamo z vašej webovej stránky.

Poštová služba Gmail zobrazuje tieto listy s otáznikom a podpisom: „Systém Gmailu nedokázal potvrdiť, že tento list bol odoslaný z domény YourDomain. Môže ísť o spam.“

Aby sa predišlo tejto situácii .

SMTP (Simple Mail Transfer Protocol)

SMTP - protokol na prenos pošty. Celkovo na nastavenie prenosu pošty pomocou tohto protokolu potrebujete samotný server SMTP. Najbežnejšou možnosťou použitia podnikovej (doménové) pošty yandex.ru ako servera SMTP je https://pdd.yandex.ru/.

V prvom rade je to potrebné účet (e-mail) yandex, na základe čoho budú vytvorené emaily pre Vašu doménu: “objednávka@VašaDoména” “info@VašaDoména”... Hlavný účet nebude nikde viditeľný a slúži len na vytváranie doménových emailov na jeho základe v budúcnosti.

Po autorizácii vo vašom osobnom účte Yandex sa vytvorí doménová pošta na odkaze https://pdd.yandex.ru/. Toto je e-mail domény, ktorý používatelia uvidia v poli „Odosielateľ“.

Pole „Odosielateľ“ je povinné pri odosielaní e-mailov cez SMTP. Používanie SMTP na odosielanie listov, kombinácia " Doména" - "Email", čím listy rozpoznávajú poštové služby.


Medzi nevýhody tejto metódy stojí za zmienku nemožnosť „načítania“ poštového portrétu domény, pretože samotné poštové služby túto funkciu ešte neposkytujú.




Hore