Smtp avtorizacijska koda. Pošiljanje e-pošte (SMTP v primerjavi s poštnim PHP). Kako pošiljati e-pošto z ASP

Ker je pošiljanje anonimnih sporočil z navideznih Windows gostiteljskih strežnikov prepovedano, naj pošiljanje pisem poteka preko SMTP strežnika, za kar je možno uporabiti tudi naš poštni sistem.

Kako pošiljati e-pošto z PHP?

Uporaba katerega koli razreda PHP, ki podpira avtorizacijo na strežniku smtp. Uporabite lahko na primer nabor razredov PHPMailer.

Uporabite lahko tudi naš primer, ki implementira pošiljanje pisem s strežnikom smtp, ki zahteva avtorizacijo. Zato ne pozabite skriptu dodati ustreznih podrobnosti o dostopu, na primer:

// Če morate prikazati dnevnik seje SMTP, lahko odkomentirate naslednjo vrstico. // $_SERVER["debug"] = res; funkcija MailSmtp ($reciever, $subject, $content, $headers, $debug = 0) ( $smtp_server = "smtp.site"; // Naslov strežnika SMTP$smtp_port = 25 ; // Vrata strežnika SMTP$smtp_user = " [e-pošta zaščitena]" ; // Uporabniško ime za avtorizacijo na strežniku SMTP$smtp_password = "pAsSwORd" ; // Geslo za avtorizacijo na strežniku SMTP$mail_from = " [e-pošta zaščitena]" ; // Nabiralnik, iz katerega je pismo poslano$sock = fsockopen ($smtp_server, $smtp_port, $errno, $errstr, 30); $str = fgets ($sock, 512); if (! $sock ) ( printf ( "Vtičnica ni ustvarjena\n" ); exit(1 ); ) smtp_msg ($sock , "HELO " . $_SERVER [ "SERVER_NAME" ]); 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 = "Zadeva: ". $subject. "\r\n" . $headers; $data = $headers. "\r\n\r\n" . $content. "\r\n." _SERVER [ "debug" ]) && $_SERVER [ "debug" ]) ( printf ( "Pošljite od nas: %s
" , nl2br (htmlspecialchars ($msg )); ) fputs ($sock , " $msg \r\n" ); $str = fgets ($sock , 512); if (! $sock ) ( printf ( "Vtičnica je navzdol\n" ); exit(1); ) else ( if (isset($_SERVER [ "debug" ]) && $_SERVER [ "debug" ]) ( printf ("Pridobljeno s strežnika: %s
" , nl2br (htmlspecialchars ($str )); ) $e = eksplozija (" ", $str ); $code = array_shift ($e); $str = implode ( " ", $e); if ($code > 499 ) ( printf ( "Težave s pogovorom SMTP.

Koda %d.
Sporočilo %s
"
, $code, $str); izhod(1); ) ) ) ?>

Prenesite primer že pripravljenega skripta s funkcijo MailSmtp(): smtpauth.php.sample

Zgoraj opisano funkcijo MailSmtp() lahko uporabite za neposredno zamenjavo funkcije mail() in si oglejte primer najpreprostejše oblike v PHP:

// Glave sporočil, določajo kodiranje sporočil, polja From, To itd.$headers = "Različica MIME: 1.0\r\n" ; $headers .= "Vrsta vsebine: besedilo/html; nabor znakov=windows-1251\r\n"; $headers .= "Za: $to \r\n" ; $headers .= "Od: Ime pošiljatelja " ; // pošta ($to, $subject, $message, $headers); require_once "smtpauth.php" ; MailSmtp ($to, $subject, $message, $headers); ) ?>
Komu: Zadeva: Besedilo: 
 
 

Da bi ta obrazec deloval brez funkcije mail(), smo datoteko smtpauth.php vključili prek require_once in poklicali funkcijo MailSmtp(), opisano v njej, z argumenti, podobnimi mail(). Hkrati smo komentirali sam klic mail() v kodi, da bi se izognili napakam pri izvajanju skripta.

Kako poslati e-pošto z uporabo ASP.NET?

Če uporabljate različico 2.0, uporabite razred MailMessage System.Net.Mail), dobro opisano.

Spodaj so primeri njegove uporabe za jezika C# in VisualBasic:

Primer za jezik C#:

<% @Page Language="c#" %> <% @Import Namespace="System.Net.Mail" %> <% @Import Namespace="System.Net" %> <% MailMessage message = new MailMessage(); // ustvarjanje nove črke message.To.Add(" [e-pošta zaščitena]"); // dodajanje naslova prejemnika sporočilo.Od = nov poštni naslov("od@ domena.tld", "Ime pošiljatelja"); // z navedbo imena in naslova pošiljatelja message.Subject = "Zadeva sporočila"; // navedba predmeta pisma message.BodyEncoding = System.Text.Encoding.UTF8; // določanje črkovnega kodiranja message.IsBodyHtml = false; // določanje oblike črke (true - HTML, false - ni HTML) message.Body = "Besedilo sporočila"; // določanje besedila (tela) pisma SmtpClient client = new SmtpClient("smtp.site",25); // ustvarjanje nove povezave s strežnikom "smtp.site" client.DeliveryMethod = SmtpDeliveryMethod.Network; // definira način za pošiljanje sporočil client.EnableSsl = false; // onemogoči potrebo po uporabi varne povezave s strežnikom client.UseDefaultCredentials = false; // onemogoči uporabo privzetih podrobnosti avtorizacije client.Credentials = new NetworkCredential("postmaster@ domena.tld", "***geslo***"); // podajanje potrebnih podrobnosti (uporabniško ime in geslo) za avtorizacijo na strežniku SMTP odjemalec.Pošlji(sporočilo); // poslati sporočilo %>

Prenesite primer izpolnjenega obrazca, ki prikazuje uporabo ta metoda: MailForm.aspx.

Primer za jezik 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@domena.tld", "Ime_pošiljatelja") smtpMssg.To.Add (" [e-pošta zaščitena]") " dodajanje naslova prejemnika smtpMssg.Subject = "Zadeva elektronske pošte" "navedba predmeta pisma smtpMssg.Body = "Besedilo sporočila" " navedba besedila (telesa) pisma smtpMssg.BodyEncoding = System.Text.Encoding.UTF8 " navedba črkovnega kodiranja smtpMssg.IsBodyHtml = false " navedba črkovne oblike (true - HTML, false - ni HTML) Zatemni SmtpMail kot novega SmtpClient("smtp.site", 25) " deklaracija novega objekta tipa "SmtpClient" SmtpMail.DeliveryMethod = SmtpDeliveryMethod.Network "navedba načina dostave pisma SmtpMail.UseDefaultCredentials = False "privzeto onemogočanje uporabe avtorizacijskih poverilnic" SmtpMail.EnableSsl = False " onemogoči potrebo po uporabi varne povezave s strežnikom SmtpMail.Credentials = new NetworkCredential("postmaster@ domena.tld", "***geslo***") ", ki navaja potrebne podatke (uporabniško ime in geslo) za avtorizacijo na strežniku SMTP SmtpMail.Send(smtpMssg) " pošiljanje sporočila %>

Obstaja tudi zastarel (in zastarel) razred SmtpMail (z uporabo imenskega prostora System.Web.Mail). Spodaj je primer njegove uporabe za jezik VisualBasic:

<% @Page Language="VB" Debug="true" %> <% @Import Namespace="System.Web" %> <% @Import Namespace="System.Web.Mail" %> <% Dim smtpMssg = new MailMessage " deklaracija novega objekta tipa "MailMessage" smtpMssg.From = "Ime_pošiljatelja domena.tld>" „Navedba imena in naslova pošiljatelja smtpMssg.To = "admin@ domena.tld" " navedba naslova prejemnika smtpMssg.BodyFormat = MailFormat.Text "navedba oblike črke smtpMssg.BodyEncoding = Encoding.UTF8 ", ki označuje črkovno kodiranje smtpMssg.Subject = "Zadeva elektronske pošte" "navedba predmeta pisma smtpMssg.Body = "Besedilo sporočila" " navedba besedila pisma smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",1) ", kar kaže na potrebo po avtorizaciji SMTP na strežniku smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "admin@ domena.tld") "uporabniško ime za avtorizacijo smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "***geslo***") "geslo za avtorizacijo SmtpMail.SmtpServer = "smtp.site" ", ki določa naslov strežnika SMTP SmtpMail.Send(smtpMssg) " pošiljanje sporočila %>

Kako pošiljati e-pošto z ASP?

Upoštevajte, da je pri uporabi našega strežnika smtp potrebna avtorizacija, zato ne pozabite skriptu dodati ustreznih podrobnosti o dostopu, na primer:

<% 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@domena.tld" .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "geslo" .Update End With Set cdoMessage = CreateObject("CDO.Message") With cdoMessage Set .Configuration = iConfig .From = "Testni uporabnik domena.tld>" .To = "Uporabnik " .Subject = "Pozdravljeni, uporabnik" .TextBody = "To sporočilo pišem iz skripta ASP." .Send End With Set cdoMessage = Nothing Set iConfig = Nothing %>

Nekateri CMS že imajo vgrajena orodja za pošiljanje korespondence ali ustrezne module; poglejmo najbolj priljubljene.

Wordpress

Za ta CMS obstaja poseben modul "WP Mail SMTP", primer njegove konfiguracije je opisan na strani modula.

Bodite pozorni na ilustracijo v primeru, v našem poštnem sistemu je potrebna uporaba vrat 25 in šifriranje SSL ni potrebno.

Joomla

Na skrbniški plošči pojdite na razdelek »Splošne nastavitve«, izberite zavihek »Strežnik«. V polju »Pošta« morate izbrati način pošiljanja kot »strežnik SMTP«, v poljih »naslov strežnika SMTP« ter »prijava SMTP« in »geslo SMTP« določite ustrezne podrobnosti poštnega sistema, na primer: smtp.site, box@vaša_domena in ustrezno geslo.

Drupal

Ta CMS ima tudi svoj modul za delo s strežnikom SMTP, ki temelji na PHPMailer. Ta modul lahko prenesete na njegovi strani na spletnem mestu CMS Drupal; opis namestitve modula je na voljo v arhivu z njim.

NetCat

Ta CMS nima vgrajenih funkcij za delo s strežnikom SMTP. Za pošiljanje pošte s skripti spletnega mesta vam lahko ponudimo uporabo naše rešitve, morate izvesti naslednje korake:

  • Prenesite arhiv s potrebnimi datotekami z našega spletnega mesta ( send_auth_mail.php in mail.inc.php) in ga odpakirajte v računalnik;
  • Uredi datoteko send_auth_mail.php iz arhiva in v njem navedite podrobnosti povezave z želenim strežnikom SMTP:

    • $mail_smtpServer = "smtp.site"; (naslov strežnika SMTP)
    • $mail_port = "25" ; (priključna vrata)
    • $mail_uporabniško ime = "[e-pošta zaščitena]" ; (uporabniško ime za avtorizacijo na SMTP strežniku)
    • $mail_password = "Geslo"; (geslo za avtorizacijo na SMTP strežniku)
  • Ustvarite varnostno kopijo datoteke domena.tld/www/netcat/admin/mail.inc.php;
  • prenos datotek send_auth_mail.php in mail.inc.php na virtualno mesto v imeniku domena.tld/www/netcat/admin/

domena.tld zamenjati z imenom vaše domene.

Predlagana rešitev deluje z vsemi moduli NetCat, ki uporabljajo standardne funkcije tega CMS za pošiljanje pošte.

Dolgo časa sem iskal rešitev za pošiljanje pisem uporabnikom ne prek funkcije mail() v PHP, temveč prek poštnih strežnikov SMTP. Na spletu ni veliko raznovrstnih informacij in kar je, ne deluje čisto pravilno ali pa sploh ne deluje. Zato sem vse sestavil in napisal svojo kodo, ki temelji na že pripravljenih, ki so predstavljene na spletnih mestih.

Zakaj pošiljati prek SMTP in ne mail()

Moj odgovor je precej preprost - nekaj časa so virusi preko mojega strežnika pošiljali na tone pisem, zaradi česar so moj IP naslov prepovedali številni pošiljatelji, predvsem gmail.com, in v zvezi s tem so uporabniki lahko prejemali pisma, zato sem moral sem iskati alternativo in sem jo našel - to je SMTP

Morda vas bo zanimalo, zakaj je moj scenarij boljši od drugih, ki ležijo na prostem?! bom odgovoril

  1. Deluje z Yandex, Rambler, Mail (gmail ni mogel zmagati)
  2. Počisti kodo. Če ga želite konfigurirati, samo spremenite nekaj vrstic
  3. Pošilja e-pošto v formatu HTML

Tu so prednosti mojega scenarija, ki ga nisem našel nikjer na internetu, a sem iz vsakega vzel vse, kar sem potreboval. Torej, poglejmo kodo.

Funkcija smtpmail($mail_to, $subject, $message, $service="yandex") ( $config["smtp_charset"] = "windows-1251"; //kodiranje sporočila. (ali UTF-8 itd.) $config [ "smtp_from"] = "mashintop.ru"; //Vaše ime - ali ime vašega mesta bo prikazano v polju "Od" pri branju $config["smtp_debug"] = false če želite videti sporočila o napakah, navedite true namesto false $config["smtp_port"] = "25"; // Ne spreminjajte delovnih vrat, če niste prepričani"; $config["smtp_email"] = ". [e-pošta zaščitena]"; $config["smtp_username"] = "mashintop"; //Spremenite ime vašega nabiralnika. $config["smtp_host"] = "smtp.yandex.ru"; //strežnik za pošiljanje pošte $config[" smtp_password "] = "moi_parol"; //Spremenite geslo ) elseif($service=="rambler") ( $config["smtp_searcher"] = "rambler.ru"; $config["smtp_email"] = " [e-pošta zaščitena]"; $config["smtp_username"] = "mashintop"; //Spremenite ime svojega nabiralnika. $config["smtp_host"] = "smtp.rambler.ru"; //strežnik za pošiljanje pošte $config[" smtp_password "] = "moi_parol"; //Spremenite geslo ) elseif($service=="mail") ( $config["smtp_searcher"] = "mail.ru"; $config["smtp_email"] = " [e-pošta zaščitena]"; $config["smtp_username"] = "mashintop"; //Spremenite ime svojega nabiralnika. $config["smtp_host"] = "smtp.mail.ru"; //strežnik za pošiljanje pošte $config[" smtp_password "] = "moi_parol"; //Spremeni geslo ) elseif($service=="gmail") ( $config["smtp_searcher"] = "gmail.com"; $config["smtp_email"] = " [e-pošta zaščitena]"; $config["smtp_username"] = "alexeybertram"; //Spremenite ime svojega nabiralnika. $config["smtp_host"] = "smtp.gmail.com"; //strežnik za pošiljanje pošte $config[" smtp_password "] = "moi_parol"; //Spremeni geslo ) $header="Datum: ".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: Netopir! (v3.99.3) Professionalrn"; $header.="Odgovori na: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode(" ".$config["smtp_from"]."")))."?=<".$config["smtp_email"].">rn"; $header.="Prioriteta X: 3 (normalno)rn"; $header.="ID-sporočila:<172562218.".date("YmjHis")."@".$config["smtp_searcher"].">rn"; $header.="Za: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("")))."? =<$mail_to>rn"; $header.="Zadeva: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$subject."" )))."?=rn"; $header.="MIME-Version: 1.0rn"; $header.="Content-Type: 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) (print "povezava s strežniki ni uspela"; 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) (print "EHLO greeting error"; fclose($smtp_conn) ; exit;) fputs($smtp_conn,"AUTH LOGINrn"); $code = substr(get_data($smtp_conn),0,3000); fclose ($smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_username"]."")."rn"); $code = substr(get_data($smtp_conn),0,3000 ) ; if($code != 334) (print "napaka pri dostopu do tega uporabnika"; fclose($smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_password"].""). "rn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 235) (print "wrong password"; fclose($smtp_conn); izhod;) fputs($smtp_conn,"MAIL FROM:".$config["smtp_email"]."rn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 250) (print "strežnik je zavrnil ukaz 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 IN $code != 251) (natisni "Strežnik ni sprejel ukaza RCPT TO"; fclose($smtp_conn); izhod;) fputs($smtp_conn,"DATArn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 354) (print "strežnik ni sprejel PODATKOV"; fclose($smtp_conn); izhod;) fputs($smtp_conn,$header."rn".$message."rn.rn"); $code = substr(get_data($smtp_conn),0,3000); if($code != 250) (natisni "napaka pri pošiljanju pisma"; fclose($smtp_conn); izhod;) fputs($smtp_conn,"QUITrn"); fclose($smtp_conn); ) funkcija get_data($smtp_conn) ( $data=""; while($str = fgets($smtp_conn,515)) ( $data .= $str; if(substr($str,3,1) == " " ) ( break; ) ) return $data; $text_email = " Pravkar ste dodali oglas na spletno mesto mashintop.ru. Ogledate si ga lahko tukaj
Vaš ključ: ".$key."

S tem ključem lahko upravljate svoj oglas.

"; $text_email .= " "; smtpmail(" [e-pošta zaščitena]", "Ključ do oglasa na mashintop.ru", $text_email, "yandex"); //uporabi Yandex smtpmail(" [e-pošta zaščitena]", "Ključ do oglasa na mashintop.ru", $text_email, "mail"); //uporabite e-pošto smtpmail(" [e-pošta zaščitena]", "Ključ do oglasa na mashintop.ru", $text_email, "rambler"); //uporabite rambler smtpmail(" [e-pošta zaščitena]", "Ključ do oglasa na mashintop.ru", $text_email, "gmail"); // vendar gmail ne deluje :(

To je vse, končni skript je v vaših rokah, samo kopirajte ga, spremenite vrednosti matrike $config in vse bo delovalo v redu.

Zdaj pa poglejmo nekaj elementov, na katere bi se rad osredotočil.

Na primer napaka, ki jo dobimo, ko poskušamo Googlu poslati prek SMTP. Na začetku vidimo to besedilo napake:

Če želite videti nekaj bolj specifičnega, nekoliko spremenimo kodo

Fputs($smtp_conn,"AUTH LOGINrn"); $code = substr(get_data($smtp_conn),0,3000); echo $code; if($code != 334) (natisni "strežnik ni dovolil začetka avtorizacije"; fclose($smtp_conn); izhod;)

In na koncu dobimo zelo specifično napako

530 5.7.0 Najprej morate izdati ukaz STARTTLS. x4sm16408296lbn.2 - gsmtp

Ne vem, kaj natančno pomeni, vendar verjamem, da je povezano z varno, nezavarovano povezavo. Ne vem še, kako se ga znebiti, tako da gmail trenutno ostaja nepremagan.



2019-08-05

Pozdravljeni, dragi obiskovalec!

Oprostite mi za zamudo pri posodabljanju bloga. A za to obstaja povsem razumljiva razlaga. Navsezadnje je bilo poletje, dača, gostje, gozd, voda in še veliko več, kar mi ni dovolilo, da bi se lotil vprašanj ustvarjanja spletnega mesta. Ampak zdaj sem se malo sprostil, gostje so odšli in mislim, da bom zdaj zagotovo lahko temu namenil ustrezno pozornost.

Torej, potem ko smo v prejšnjem članku pošto naše domene povezali z eno od poštnih storitev, si zdaj poglejmo, kako lahko pošiljate e-pošto s spletnega mesta. Še več, na način, da naša pisma ne končajo v SPAM-u, ampak so zanesljivo, z veliko verjetnostjo, dostavljena našim prejemnikom.

Na splošno obstaja vgrajena funkcija mail() za pošiljanje pisem v PHP. Vendar je treba opozoriti, da ima uporaba te možnosti kljub preprostosti te metode (v tem primeru je za pošiljanje pisem dovolj, da določite samo eno vrstico kode z določenimi parametri) pomembno pomanjkljivost, povezano s problemom SPAM .

Dejstvo je, da filtri za zaščito pred neželeno pošto poštnih strežnikov na strani prejemnika v resnici ne favorizirajo pisem, poslanih prek funkcije mail(). In v večini primerov so takšna sporočila filtrirana ali celo izbrisana, preden pridejo do naslovnika.

In da bi čim bolj odpravili takšne primere, se običajno uporablja druga možnost, pri kateri se pisma pošiljajo, kot da bi to storila poštna storitev tretje osebe.

Ta metoda se imenuje pošiljanje pošte prek SMTP z avtorizacijo. Kar si bomo danes ogledali na primeru pošiljanja obrazca za povratne informacije. Poleg tega bomo za to uporabili dokaj dobro znano in priljubljeno knjižnico PHPMailer, ki vam omogoča preprosto organizacijo pošiljanja pisem prek SMTP.

  • Kako bomo pošiljali povratna pisma
  • Ustvarjanje obrazca za povratne informacije
  • Namestitev knjižnice PHPMailer
  • Izdelamo skripto za pošiljanje pošte preko SMTP
  • Preverjanje pošiljanja e-pošte
  • Izvorne datoteke spletnega mesta

Kako bomo pošiljali povratna pisma

Preden začnemo s praktičnim delom pošiljanja povratnih pisem, se najprej odločimo, kako bomo to izvedli.

Obrazec za povratne informacije je zasnovan tako, da uporabniku omogoča komunikacijo z skrbnikom spletnega mesta, da posreduje svoje sporočilo. Običajno je ta obrazec sestavljen iz več polj in gumba »Pošlji«.

Načeloma je za pošiljanje e-pošte dovolj, da uporabite le nekaj polj, ki zagotavljajo dovolj podatkov o uporabniku in vsebini sporočila, kot so:

  • "Ime" - za vnos imena pošiljatelja sporočila;
  • "E-pošta" - za e-poštni naslov pošiljatelja;
  • "Zadeva sporočila";
  • "Besedilo sporočila".

Čeprav lahko dodate druge. Na primer telefonsko številko, če je to res potrebno.

V našem primeru bodo takšna pisma poslana na naslov skrbnika spletnega mesta iz pravega poštnega predala z avtorizacijo na poštni storitvi, s katero je povezana naša domena.

Ker smo se v prejšnjem članku osredotočili na preverjanje povezave domenske pošte s storitvijo Yandex.Mail, bomo pošiljali pošto za to možnost. Čeprav to ni pomembno. Spodaj boste videli tiste možnosti, ki vam bodo po spremembi omogočile pošiljanje e-pošte prek poštnega strežnika Mail.ru.

Kot pravi poštni predal, iz katerega bomo pošiljali pisma, bomo uporabili račun novo ustvarjenega domenskega poštnega uporabnika, recimo z naslovom [e-pošta zaščitena]. In ta pisma bomo poslali v administratorjev nabiralnik [e-pošta zaščitena], ki smo ga predhodno ustvarili v prejšnjem članku.

Tako bo pošiljatelj pisma iz obrazca za povratne informacije nabiralnik [e-pošta zaščitena]., in prejemnik - [e-pošta zaščitena]. V tem primeru bodo vsi podatki o uporabniku, ki je poslal sporočilo z njegovo vsebino, posredovani v telesu poslanega pisma.

Ustvarjanje obrazca za povratne informacije

Ko smo se odločili za postopek pošiljanja pisem, bomo sedaj ustvarili obrazec za povratne informacije, s katerim bomo to storili.

Spodaj je koda HTML za ta obrazec, ki ga bomo postavili na stran "Stiki" (datoteka kontakty.php v imeniku člankov).

    "Članek" >

    Kontakti

    Povratne informacije

    "stik" akcija = "#" metoda = "post" >

    Obrazec za povratne informacije

    Za vsa vprašanja, zahteve in poslovne predloge nas lahko kontaktirate preko spodnjega obrazca za povratne informacije.

    "kontaktni blok" >

    "kontaktni vnos" >

    "besedilo" id = "Kontaktno ime" ime = "Kontaktno ime" naslov = "Ime mora biti v ruščini in vsebovati vsaj 3 znake" vzorec = "{3,}" obvezno >

  1. "prazen-kontakt" >

    "kontaktni vnos" >

    "E-naslov" id = "kontaktni-e-mail" ime = "kontaktni-e-mail" obvezno >

  2. "kontaktni subjekt" >

  3. "kontakt-komentar" >

  4. "kontaktni gumb" >

    "oddaj" ime = "kontaktni gumb" vrednost = "Pošlji" >

Slika 1 HTML koda obrazca za povratne informacije

Na naslednjem posnetku zaslona si lahko ogledate, kako na koncu izgleda obrazec za povratne informacije, prikazan tukaj.

Tako se ustvari želena oblika. In zdaj lahko preidete na vprašanja obdelave in pošiljanja podatkov v obliki e-poštnega sporočila.

Namestitev knjižnice PHPMailer

Kot smo že omenili, bomo za pošiljanje pošte uporabljali knjižnico PHPMailer, ki bo znatno poenostavila pošiljanje e-pošte prek protokola SMTP z avtorizacijo v poštni storitvi tretje osebe.

Če ga želite namestiti, morate prenesti potrebne datoteke. To lahko storite v spletni storitvi GitHub z uporabo Composerja (upravljalnik odvisnosti od paketov za PHP). Ali preprosto prenesite potrebne datoteke na običajen način.

posnetek zaslona 73

Spodaj je stran spletne storitve GitHub, kjer je označena povezava do običajnega prenosa knjižnice PHPMailer.

Poleg tega lahko najnovejšo različico 6.0.7, ki je bila shranjena v času pisanja tega članka, prenesete iz priloženih materialov.

V vsakem primeru je treba nastalo arhivsko datoteko razpakirati, nato pa ekstrahirano mapo PHPMailer-master z vso njeno vsebino postaviti v koren mesta. Hkrati ga lahko zaradi enostavnosti preimenujete v PHPMailer. Spodaj je vsebina mape PHPMailer v korenskem imeniku spletnega mesta.

Tako smo namestili knjižnico PHPMailer. Po tem lahko začnemo ustvarjati skripto, s katero bomo pošiljali e-poštna sporočila z naše spletne strani.

Izdelamo skripto za pošiljanje pošte preko SMTP

Za sestavljanje skripta je dovolj, da uporabite priporočila za uporabo PHPMailerja, podana na strani GitHub, ki smo jih prej uporabili za prenos knjižnice.

Zlasti navajajo, da je na začetku skripta potrebno uvoziti razrede PHPMailer v globalni imenski prostor. In podane so posebne vrstice ustrezne kode. Obstajajo tudi primeri uporabe lastnosti in metod PHPMailerja, vključno z možnostjo pošiljanja pošte prek SMTP.

Če pa to ni dovolj, potem lahko uporabite tudi dokumentacijo, ki vsebuje opis vseh lastnosti in metod te knjižnice.

posnetek zaslona 74

Spodaj je koda skripta za pošiljanje pošte iz obrazca za povratne informacije prek SMTP z avtorizacijo. Kjer so vse vrstice, povezane s PHPMailerjem, podane z razlago in poudarjene s svetlim ozadjem.

Preostali del, vključno z delci, povezanimi s sprejemanjem in obdelavo podatkov iz obrazca, ki smo jih prej morali uporabljati v drugih procesorjih, je označen s temnim ozadjem. Prej so bili podrobno obravnavani v članku, ki je bil posebej posvečen vprašanjem pridobivanja in preverjanja podatkov iz obrazca v PHP. Kjer smo govorili tudi o univerzalni uporabniški funkciji za preverjanje in obdelavo podatkov obrazcev preveri_simbol().

Ta skript bomo postavili v isto datoteko kontakty.php, v kateri smo predhodno ustvarili obrazec za povratne informacije.

    //----Skripta za pošiljanje pošte prek SMTP z uporabo PHPMailer----

    //Uvozi razrede PHPMailer v globalni imenski prostor. Biti morajo na vrhu skripta, ne znotraj funkcije

    uporaba PHPMailer\PHPMailer\PHPMailer ;

    uporaba PHPMailer\PHPMailer\Izjema ;

    če (!prazno($_POST["contact-button" ])) (

    $name = $_POST["ime-stika"];

    $name = check_symbol ($name, "Ime", "1", "/^+\z/iu");

    $email = $_POST["kontaktni-e-mail" ];

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

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

    $subject = check_symbol ($subject, "Subject sporočila" , "1" , "0" );

    $komentar = $_POST["kontaktni-komentar"];

    $komentar = kontrolni_simbol ($komentar, "Besedilo sporočila", "1" , "0" );

    če (!prazno($GLOBALS["opozorilo" ])) (

    $opozorilo = "Podatki obrazca niso bili poslani. Najdene so bile naslednje napake:\n".$opozorilo;

    vključiti"alert.php" ;

    drugače {

    //Povezovanje knjižnice

    zahtevati"PHPMailer/src/PHPMailer.php" ;

    zahtevati"PHPMailer/src/Exception.php" ;

    zahtevati"PHPMailer/src/SMTP.php" ;

    $mail = novo PHPMailer(); //Inicializiraj razred

    $od = " [e-pošta zaščitena]" ; //E-poštni naslov, s katerega je pismo poslano

    $do = " [e-pošta zaščitena]" ; //Naslov prejemnika

    $mail -> isSMTP(); //Uporabi protokol SMTP

    $mail -> Host = "smtp.yandex.ru" ; //Naslov poštnega strežnika

    $mail -> SMTPAuth = prav ; //Omogoči avtorizacijski način

    $mail -> Uporabniško ime = " [e-pošta zaščitena]" ; //Prijava iz e-pošte domene, povezane z e-poštno storitvijo tretje osebe (v tem primeru Yandex.Mail)

    $pošta -> Geslo = "27MrDon89" ; //Geslo za domensko pošto

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

    $mail -> Port = "465" ; //Vrata strežnika SMTP

    $mail -> CharSet = "UTF-8" ; //Kodiranje

    $mail -> setFrom ($from, "Administrator"); //Naslov in ime pošiljatelja

    $mail -> addAddress ($to, "Administrator"); //Naslov in ime prejemnika

    $mail -> isHTML ( prav ); //Nastavi obliko elektronske pošte na HTML

    $pošta -> Zadeva = »Poslan obrazec za povratne informacije«; //Zadeva elektronske pošte (naslov)

    $mail -> Telo = "

    Ime pošiljatelja: $name

    Naslov pošiljatelja: $e-pošta

    Zadeva sporočila: $predmet

    Vsebina sporočila: $komentar



    " ; //Vsebina sporočila

    $mail -> AltBody = "Besedilo nadomestne črke"; //Nadomestna e-pošta, če e-poštni odjemalec ne podpira zapisa HTML

    $mail -> SMTPDebug = 0 ; //Omogoči odpravljanje napak SMTP: 0 - izklopljeno (za običajno uporabo), 1 = sporočila odjemalcev, 2 - sporočila odjemalcev in strežnikov

    če($mail -> send()) (

    $opozorilo = "Sporočilo poslano"; //V pogovornem oknu brskalnika izpišite sporočilo o uspešnem pošiljanju pisma

    drugače {

    $opozorilo = "Napaka, e-pošte ni mogoče poslati: ".$mail -> ErrorInfo ; //Izpis sporočila o napaki

    vključiti"alert.php" ;

Slika 5 Skripta za pošiljanje elektronske pošte prek SMTP z avtorizacijo

Kot lahko vidite, vse vrstice, ki so neposredno povezane s pošiljanjem e-poštnega sporočila, v katerem so določene potrebne metode in lastnosti, spremljajo komentarji. Zato se nima smisla ponavljati, temveč se lahko zadržimo le pri nekaterih izmed njih, ki sicer zahtevajo dodatna pojasnila, in sicer:

1. Ker je pismo poslano iz poštne storitve tretje osebe, se tukaj uporabljajo nastavitve, ki ustrezajo določenemu strežniku SMTP. V tem primeru se za primer uporabe strežnika Yandex.Mail uporabijo naslednje vrednosti lastnosti:

  • Lastnina Gostitelj(pos.28) - naslov poštnega strežnika z vrednostjo smtp.yandex.ru;
  • Lastnina SMTPSecure
  • Lastnina Pristanišče

Te vrednosti lastnosti so bile vzete s strani Yandex.Help, prikazane na naslednjem posnetku zaslona.

Toda takšne informacije je mogoče dobiti tudi iz drugih virov. To storite tako, da v iskalnik vnesete ustrezno poizvedbo, na primer: »strežnik Yandex smtp«. Kje najdem veliko število referenc o tej temi.

Na podoben način je mogoče pridobiti vrednosti nastavitev iz drugih strežnikov SMTP. Spodaj je posnetek zaslona strani pomoči Mail.ru, ki prikazuje nastavitve strežnika SMTP poštne storitve Mail.ru.

In tako je treba v primeru uporabe Mail.ru kot strežnika SMTP tretje osebe uporabiti naslednje vrednosti lastnosti razreda PHPMailer:

  • Lastnina Gostitelj(pos.28) - Naslov poštnega strežnika (smtp.mail.ru);
  • Lastnina SMTPSecure(poz.32) - šifrirni protokol (ssl);
  • Lastnina Pristanišče(poz. 33) - Vrata strežnika SMTP (465).

Podoben pristop je treba uporabiti za druge e-poštne storitve.

2. V lastnini Uporabniško ime(poz. 30) je treba navesti polni naslov domenskega predala. V tem primeru, " [e-pošta zaščitena]".

Če pa za pošiljanje pisem uporabljate račun, ki ni domenski poštni račun, temveč naslov, ki je neposredno povezan s poštno storitvijo, na primer " [e-pošta zaščitena]", potem mora biti prijava samo del naslova do znaka "@". V tem primeru bi imela prijava vrednost "feedback".

3. PHPMailer zagotavlja lastnost SMTPDebug(poz. 50), ki omogoča prikaz različnih stopenj napak na zaslonu brskalnika. Ta funkcija močno poenostavi iskanje težav pri odpravljanju napak v skriptu.

Običajno je v običajnem načinu, ko je vrednost nastavljena na 0, izpis podrobnih informacij o napaki onemogočen. Če pa se pojavijo težave pri pošiljanju pošte ali med odpravljanjem napak, je mogoče uporabiti druge vrednosti za prikaz bolj smiselnih informacij o napaki.

Da bi videli, kako to izgleda v praksi, začasno vnesemo napako v nastavitve. Na primer, v domenskem poštnem geslu (lastnost Geslo, poz.31). In tudi za prikaz podrobnih informacij o napaki, ki je začasno nastavljena v lastnosti SMTPDebug(poz.50) vrednost 1. Potem, ko je vse razhroščeno in preverjeno, bomo onemogočili način odpravljanja napak SMTP in 1 zamenjali z 0.

V zadnjem delu skripta, po določitvi vseh potrebnih lastnosti in metod, se metoda uporabi za pošiljanje pisma pošlji()) (točka 51). In če je pismo poslano, in način pošlji() za predmet $mail vrne true, nato v pogovornem oknu brskalnika prek spremenljivke $opozorilo Prikaže se sporočilo o uspešnem pošiljanju pošte (poz. 52).

Če iz nekega razloga pošte ni bilo mogoče poslati in zato metoda ni mogla vrniti vrednosti true, bo to stanje spremljalo ustrezno sporočilo o napaki (poz. 55).

Preverjanje pošiljanja e-pošte

Ko smo ustvarili skripto za pošiljanje pošte, moramo seveda pogledati rezultat naše »ustvarjalnosti«. Ali smo tukaj vse upoštevali in nismo naredili nobene napake?

Če želite to narediti, poskusimo, kot je bilo predvideno, poslati sporočilo uporabnika skrbniku spletnega mesta iz obrazca za povratne informacije. Spodaj je posnetek zaslona obrazca za povratne informacije z izpolnjenimi polji pred oddajo.

In tukaj je rezultat oddaje obrazca.

Kjer je iz sporočila v pogovornem oknu brskalnika razvidno, da pisma ni mogoče poslati zaradi težave s povezavo SMTP.

Ampak, saj je zdaj premoženje SMTPDebug(poz. 50) je dodeljena vrednost 1, potem lahko vidimo podrobne informacije o nastali napaki in ugotovimo vzrok njenega nastanka.

Naslednji posnetek zaslona prikazuje, da je bila pri poskusu povezave zaznana napaka pri preverjanju pristnosti, kar pomeni uporabo napačne prijave ali gesla.

Po odpravi neujemanja gesla (prej je bilo uporabljeno napačno geslo, da smo lahko preverili izpis dodatnih informacij o napaki), bomo poskusili ponovno poslati pošto.

Tokrat je bilo vse videti dobro in prejeli smo sporočilo, da je bila pošta uspešno poslana. Očitno, razen namerno vnesene začasne napake v geslu domenske pošte, drugih napak nismo naredili.

Da pa se prepričamo, da je bilo pismo dejansko dostavljeno naslovniku, vpišemo pošto z naslovom [e-pošta zaščitena] in poglej rezultat.

Kot vidite, pismo z naslova [e-pošta zaščitena], s katerega smo poslali e-poštno sporočilo z imenom »Povratne informacije«, je uspešno prispelo do skrbnika strani. Hkrati telo pisma vsebuje vso vsebino, ki smo jo ustvarili v skriptu s pomočjo podatkov, prejetih iz obrazca za povratne informacije, in sicer:

  • Ime pošiljatelja: Nikolay;
  • Naslov pošiljatelja: [e-pošta zaščitena];
  • Zadeva sporočila: Preverjanje pošiljanja pošte;
  • Vsebina sporočila: Testno sporočilo.

Zdaj, po uspešnem preverjanju pošiljanja pošte, lahko onemogočite način odpravljanja napak SMTP tako, da dodelite lastnost SMTPDebug(pol.50) vrednost 0.

Tako smo zaključili nalogo izdelave orodja za pošiljanje pošte preko SMTP z avtorizacijo preko poštnega strežnika tretje osebe.

Na primer, v naslednjem članku si bomo ogledali, kako poslati potrditvena e-poštna sporočila za obnovitev registriranih podatkov uporabniškega računa.

Izvorne datoteke spletnega mesta

Izvorne datoteke spletnega mesta s posodobitvami, ki so bile narejene v tem članku, lahko prenesete iz priloženih dodatnih gradiv:

  • datoteke imenika www
  • Tabele baze podatkov MySQL

V PHP je zelo priljubljena uporaba skriptov, ki avtomatizirajo postopek pošiljanja pisem. V tem članku si bomo ogledali preprost skript, ki pošilja pisma prejemnikom prek SMTP( Preprost protokol za prenos pošte ). Bilo bi prelahko, če bi se omejili samo na to funkcionalnost, skript podpira tudi priponke, to pomeni, da lahko svojemu pismu priložite datoteko pdf, txt ali doc.

Nastavitev skripte je precej preprosta, vse kar potrebujete je prijava pošiljatelja in geslo za e-pošto, s katere bodo pisma poslana.

Skript deluje z razredom km_smtp_class.php, dobra stvar razreda je, da podpira različne protokole SSL in TLS, ki zagotavljajo varen prenos podatkov.

Tukaj je sam scenarij:

"smtp.mail.ru", "SMTP_port" => "25", "SMTP_email" => " [e-pošta zaščitena]", "SMTP_pass" => "1111111", "SMTP_type" => "null"); // E-pošta prejemnika $Receiver = " [e-pošta zaščitena]"; // Zadeva sporočila $Subject = "Pošiljanje e-pošte iz PHP"; // Besedilo sporočila (v HTML) $Text = "Pozdravljeni!
Sporočilo je bilo poslano iz skripta Mowshon Spletna stran: http://site"; // Priloga v pismu - naslov datoteke $Attachment = ""; /* $mail = nov KM_Mailer(strežnik, vrata, uporabnik, geslo, tip); */ /* Vrsta je lahko: null, tls ali 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 datoteko if($Attachment) ($mail->addAttachment($Attachment);) // Dodaj več prejemnikov $mail->addRecipient( " [e-pošta zaščitena]"); $mail->addRecipient(" [e-pošta zaščitena]"); /* $mail->send(From, For, Subject, Text, Subject = neobvezno) */ $SendMail = $mail->send($SenderConfig["SMTP_email"], $Receiver, $Subject, $Text ); // Počisti seznam prejemnikov $mail->clearBCC(); else ( echo "Pri povezovanju s strežnikom SMTP" ?>

Nastavitev skripta temelji predvsem na matriki $SenderConfig, tukaj moramo določiti SMTP:strežnik, vrata, prijavo in geslo za e-pošto. Opišimo vsak matrični ključ:

SMTP_server - naslov strežnika SMTP (posamezen naslov za različna e-poštna sporočila)

Pošta Mail.ru: vrata smtp.mail.ru: 25, 587 in 465 (s šifriranjem SSL)

Yandex pošta: vrata smtp.yandex.ru: 25, 587 465 (vrata SSL)

Rambler pošta: vrata mail.rambler.ru: 25, 587 465 (vrata SSL)

Yahoo Mail: smtp.mail.yahoo.com SSL vrata: 465

(Če potrebujete naslove smtp strežnikov, ki jih ni na seznamu, zapišite v komentarje)

SMTP_port - Opisali smo ga že zgoraj za vsak smtp strežnik.

SMTP_email - uporabnik bi bil bolj natančen, vendar sem zaradi jasnosti napisal e-pošto, navedemo e-poštni naslov.

SMTP_pass – Geslo za e-pošto, ki je bilo navedeno kot vrednost v ključu SMTP_email


SMTP_type – privzeto NULL. Protokol, po katerem bodo pisma poslana. Protokola: SSL in TLS

Pismu lahko dodate priloge tako, da preprosto navedete polni naslov datoteke v spremenljivki $Attachment (/var/patch/to/file/File.pdf)

Če imate kakršna koli vprašanja, jih napišite v spodnjih komentarjih.

Pošlji PHP

Ta funkcija je privzeto implementirana kot pošiljanje e-pošte. Ta funkcija ne potrebuje strežnika tretje osebe za posredovanje e-pošte. Če želite preveriti pravilnost te funkcije, ustvarite datoteko test.php v mapi s spletnim mestom in vanjo postavite naslednjo kodo:

Kje namesto "E-NASLOVPREJEMNIK" Vnesite e-poštni naslov, na katerega želite poslati pismo.

To datoteko postavite v koren vašega spletnega mesta.

Nato v naslovno vrstico vnesite www.YourDomain/test.php. Če na navedeni e-poštni naslov prejmete pismo, potem vaše gostovanje deluje pravilno s funkcijo pošiljanja pisem " Pošlji PHP". Možno je, da je pismo končalo med vsiljeno pošto, zato je treba tudi to preveriti.

Če je pismo prispelo v nerazumljivem kodiranju, spremenite vrstico: "Preverjanje pošiljanja pošte" na "Preverjanje pošiljanja pošte", "Content-type:text/html;charset=utf-8".

In ponovite pošiljanje pisma prek naslovne vrstice brskalnika.

Če po zgornjih manipulacijah testno pismo ne doseže končnega prejemnika, se morate obrniti na tehnično podporo gostovanja.

Med pomanjkljivostmi te metode je treba omeniti, da ta metoda ne deluje dosledno. Pri pošiljanju e-pošte lahko pride do motenj na strani gostovanja.

Glavna pomanjkljivost te metode je, da poštne storitve (gmail, mail.ru, yandex.ru) ne bodo prepoznale vseh pisem, poslanih na e-pošto strank, saj so bila poslana neposredno z vašega spletnega mesta.

Poštna storitev Gmail prikaže ta pisma z vprašajem in podpisom: "Sistem Gmail ni uspel potrditi, da je bilo to pismo poslano z domene Vaša domena. To je morda neželena pošta."

Da bi se izognili tej situaciji .

SMTP (preprost protokol za prenos pošte)

SMTP - protokol za prenos pošte. Za nastavitev prenosa pošte s tem protokolom potrebujete sam strežnik SMTP. Najpogostejša možnost za uporabo službene (domene) pošte yandex.ru kot strežnika SMTP je https://pdd.yandex.ru/.

Najprej je potrebno račun (pošta) yandex, na podlagi katerega se bodo kreirala elektronska sporočila za vašo domeno: “naroči@VašaDomena” “info@VašaDomena”... Glavni račun ne bo nikjer viden in se uporablja samo za ustvarjanje domenskih elektronskih sporočil na njegovi podlagi v prihodnje.

Po avtorizaciji v vašem osebnem računu Yandex se domenska pošta ustvari na povezavi https://pdd.yandex.ru/. To je e-poštni naslov domene, ki ga bodo uporabniki videli v polju »Pošiljatelj«.

Polje »Pošiljatelj« je obvezno pri pošiljanju e-pošte prek SMTP. Uporaba SMTP za pošiljanje pisem, kombinacija " Domena" - "E-naslov", zato pisma prepoznajo poštne storitve.


Med pomanjkljivostmi te metode je treba omeniti nezmožnost "nalaganja" poštnega portreta domene, saj same poštne storitve še ne zagotavljajo te funkcije.




Vrh