Slanje e-pošte iz PHP-a pomoću SMTP-a (s privitkom). Slanje pisama (SMTP vs. mail PHP) Slanje pošte putem smtp mail servisa

22.09.2022 Vijesti

Kako bi određena web stranica imala priliku raditi učinkovito i produktivno, njenoj izradi treba pristupiti što je moguće odgovornije i pažljivije. Izbor sustava koji će se koristiti za izradu online trgovine zaslužuje posebnu pozornost. Činjenica je da komercijalna platforma specijalizirana za prodaju robe ili usluga mora omogućiti implementaciju svih potrebnih funkcionalnosti i biti jednostavna za korištenje, kako za administratore uključene u održavanje i punjenje stranica, tako i za klijente online trgovina. Mnogi ljudi i tvrtke koji se susreću s pitanjem odabira odgovarajućeg CMS-a za sebe analiziraju hoće li odabrati Magento ili OkayCMS. Usporedimo značajke i mogućnosti ovih web stranica.

Kada radite na vlastitoj web stranici, osoba ili tvrtka morat će uložiti puno truda - samo u ovom slučaju možete računati na pozitivne rezultate i dobivanje doista učinkovitog alata. Jedno od temeljnih pitanja koje je potrebno riješiti i prije početka izrade web stranice bit će kako se odlučiti za najprikladniju CMS opciju. Zatim ćemo usporediti dva CMS-a: Joomla ili OkayCMS i obratiti pažnju na karakteristike svakog od njih.

Imati vlastitu web stranicu jedan je od temeljnih uvjeta za učinkovito i uspješno poslovanje. Statistika jasno govori o porastu broja kupnji raznih roba i narudžbi usluga putem interneta. Uzimajući to u obzir, većina komercijalnih tvrtki već je svjesna potrebe za vlastitim web stranicama. Međutim, sama činjenica o posjedovanju internetskog resursa nije dovoljna da bismo računali na njegovu učinkovitost, isplativost i očekivanu poslovnu korist.

Kada se pripremate za izradu vlastite web stranice ili otvaranje online trgovine, morate uzeti u obzir i analizirati mnoga pitanja, a također odlučiti razne zadatke. Samo u tom slučaju možete računati na činjenicu da će vaš projekt donijeti pozitivne rezultate i moći u potpunosti ispuniti vaša očekivanja. Među raznim pitanjima vezanim uz razvoj online trgovine, pitanje odabira CMS-a zaslužuje posebnu pozornost. Kako biste se lakše odlučili za optimalan motor za sebe, unutar

Kada planiraju izraditi vlastitu web stranicu za buduću internetsku trgovinu, prilično velik broj ljudi, pa čak i tvrtki specijaliziranih za prodaju, suočava se s teškim i izuzetno teškim važan izbor: koji postojeći CMS odabrati? Ako razmišljate o tome što odabrati: PrestaShop ili OkayCMS, predlažemo da pročitate ovaj članak u kojem ćemo usporediti ova dva sustava za izradu internetskih stranica, posebno internetskih trgovina.

Dugo sam tražio rješenje za slanje pisama korisnicima ne putem funkcije mail() u PHP-u, već putem SMTP-a poslužitelji pošte. Na internetu nema puno raznih informacija, a ono što postoji ne radi baš kako treba ili uopće ne radi. Stoga sam sve spojio i napisao vlastiti kod, na temelju gotovih koji su predstavljeni na stranicama.

Zašto slati putem SMTP-a, a ne putem pošte()

Moj odgovor je vrlo jednostavan - neko vrijeme su virusi slali tone pisama preko mog servera, zbog čega su moju IP adresu BANOVALI mnogi maileri, posebno gmail.com, au vezi s tim korisnici su mogli primati pisma, pa sam morao sam tražiti alternativu i našao sam je - ovo je SMTP

Možda će vas zanimati zašto je moj scenarij bolji od ostalih koji leže na otvorenom?! odgovoriti ću

  1. Radi s Yandexom, Ramblerom, Mailom (gmail nije mogao pobijediti)
  2. Čisti kod. Da biste ga konfigurirali, samo promijenite nekoliko redaka
  3. Šalje e-poštu u HTML formatu

Eto prednosti moje skripte koju nisam našao nigdje na internetu, ali sam iz svake uzeo sve što mi treba. Dakle, pogledajmo kod.

Funkcija smtpmail($mail_to, $subject, $message, $service="yandex") ( $config["smtp_charset"] = "windows-1251"; //kodiranje poruke. (ili UTF-8, itd.) $config [ "smtp_from"] = "mashintop.ru"; //Vaše ime - ili naziv vaše stranice. Bit će prikazano kada se pročita u polju "Od" $config["smtp_debug"] = false; //Ako želite da biste vidjeli poruke o pogrešci, navedite true umjesto false $config["smtp_port"] = "25"; // Radni port. Nemojte mijenjati ako niste sigurni. if($service=="yandex") ( $config[ "smtp_searcher"] = "yandex. ru"; $config["smtp_email"] = " [e-mail zaštićen]"; $config["smtp_username"] = "mashintop"; //Promijenite naziv svog poštanskog sandučića. $config["smtp_host"] = "smtp.yandex.ru"; //poslužitelj za slanje pošte $config[" smtp_password "] = "moi_parol"; //Promijenite lozinku ) elseif($service=="rambler") ( $config["smtp_searcher"] = "rambler.ru"; $config["smtp_email"] = " [e-mail zaštićen]"; $config["smtp_username"] = "mashintop"; //Promjena u ime vašeg poštanskog sandučića. $config["smtp_host"] = "smtp.rambler.ru"; //poslužitelj za slanje pošte $config[" smtp_password "] = "moi_parol"; //Promijenite lozinku ) elseif($service=="mail") ( $config["smtp_searcher"] = "mail.ru"; $config["smtp_email"] = " [e-mail zaštićen]"; $config["smtp_username"] = "mashintop"; //Promjena u ime vašeg poštanskog sandučića. $config["smtp_host"] = "smtp.mail.ru"; //poslužitelj za slanje pošte $config[" smtp_password "] = "moi_parol"; //Promjena lozinke ) elseif($service=="gmail") ( $config["smtp_searcher"] = "gmail.com"; $config["smtp_email"] = " [e-mail zaštićen]"; $config["smtp_username"] = "alexeybertram"; //Promjena u ime vašeg poštanskog sandučića. $config["smtp_host"] = "smtp.gmail.com"; //poslužitelj za slanje pošte $config[" smtp_password "] = "moi_parol"; //Promijeni lozinku ) $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: Šišmiš! (v3.99.3) Professionalrn"; $header.="Reply-To: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode(" ".$config["smtp_from"]."")))."?=<".$config["smtp_email"].">rn"; $header.="X-prioritet: 3 (Normalno)rn"; $header.="ID-poruke:<172562218.".date("YmjHis")."@".$config["smtp_searcher"].">rn"; $header.="Za: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("")))."? =<$mail_to>rn"; $header.="Predmet: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode("".$subject."" )))."?=rn"; $header.="MIME-verzija: 1.0rn"; $header.="Vrsta sadržaja: tekst/html; charset=windows-1251rn"; $header.="Content-Transfer-Encoding: 8bitrn"; $smtp_conn = fsockopen("".$config["smtp_host"]."", $config["smtp_port"],$errno , $errstr, 10); if(!$smtp_conn) (ispis "veza s poslužiteljima nije uspjela"; fclose($smtp_conn); izlaz;) $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 hello error"; fclose($smtp_conn) ; exit; ) fputs($smtp_conn,"AUTH LOGINrn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 334) (ispiši "poslužitelj nije dopustio početak autorizacije"; fclose ($ smtp_conn); izlaz;) fputs($smtp_conn,base64_encode("".$config["smtp_username"]."")."rn"); $code = substr(get_data($smtp_conn),0,3000) ; ako ($code != 334) (print "greška pri pristupu ovom korisniku"; fclose($smtp_conn); exit;) fputs($smtp_conn,base64_encode("".$config["smtp_password"].""). "rn" ); $code = substr(get_data($smtp_conn),0,3000); if($code != 235) (ispiši "krivu lozinku"; fclose($smtp_conn); izlaz;) fputs($smtp_conn,"MAIL FROM:".$config["smtp_email"]."rn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 250) (print "poslužitelj je odbio naredbu 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) (ispis "Poslužitelj nije prihvatio naredbu RCPT TO"; fclose($smtp_conn); izlaz;) fputs($smtp_conn,"DATArn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 354) (ispis "poslužitelj nije prihvatio PODATKE"; fclose($smtp_conn); izlaz;) fputs($smtp_conn,$header."rn".$message."rn.rn"); $code = substr(get_data($smtp_conn),0.3000); if($code != 250) (ispis "greška pri slanju pisma"; fclose($smtp_conn); izlaz;) 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 = " Upravo ste dodali oglas na web stranicu mashintop.ru. Možete ga pogledati ovdje
Vaš ključ: ".$key."

Pomoću dati ključ moći ćete upravljati svojim oglasom.

"; $text_email .= " "; smtpmail(" [e-mail zaštićen]", "Ključ oglasa na mashintop.ru", $text_email, "yandex"); //koristite Yandex smtpmail(" [e-mail zaštićen]", "Ključ oglasa na mashintop.ru", $text_email, "mail"); //koristite e-poštu smtpmail(" [e-mail zaštićen]", "Ključ oglasa na mashintop.ru", $text_email, "rambler"); //koristite rambler smtpmail(" [e-mail zaštićen]", "Ključ za oglas na mashintop.ru", $text_email, "gmail"); // ali gmail ne radi :(

To je sve, gotova skripta je u vašim rukama, samo je kopirajte, promijenite vrijednosti niza $config i sve će raditi u redu.

Sada pogledajmo neke elemente na koje bih se želio usredotočiti.

Na primjer, pogreška koju dobijemo kada pokušamo poslati putem SMTP-a Googleu. U početku vidimo ovaj tekst pogreške:

Da bismo vidjeli nešto konkretnije, modificirajmo malo kod

Fputs($smtp_conn,"AUTH LOGINrn"); $code = substr(get_data($smtp_conn),0.3000); echo $kod; if($code != 334) (ispis "poslužitelj nije dopustio početak autorizacije"; fclose($smtp_conn); izlaz;)

I na kraju dobivamo vrlo specifičnu grešku

530 5.7.0 Prvo mora izdati naredbu STARTTLS. x4sm16408296lbn.2 - gsmtp

Ne znam što to točno znači, ali vjerujem da ima neke veze sa sigurnom, nezaštićenom vezom. Još ne znam kako da ga se riješim, tako da gmail trenutno ostaje neporažen.



U PHP-u je vrlo popularno koristiti skripte koje automatiziraju proces slanja pisama. U ovom ćemo članku pogledati jednostavnu skriptu koja šalje pisma primateljima putem SMTP-a ( Jednostavan protokol za prijenos pošte ). Bilo bi prelako ograničiti se samo na ovu funkcionalnost, skripta podržava i privitke, odnosno možete priložiti pdf, txt ili doc datoteka u vašem pismu.

Postavljanje skripte je vrlo jednostavno, sve što trebate je prijava i lozinka pošiljatelja E-mail iz koje će se pisma slati.

Skripta radi s klasom km_smtp_class.php, dobra stvar kod klase je što podržava razne SSL i TLS protokole koji omogućuju siguran prijenos podataka.

Evo same skripte:

"smtp.mail.ru", "SMTP_port" => "25", "SMTP_email" => " [e-mail zaštićen]", "SMTP_pass" => "1111111", "SMTP_type" => "null"); // E-pošta primatelja $Receiver = " [e-mail zaštićen]"; // Predmet poruke $Subject = "Slanje e-pošte iz PHP-a"; // Tekst poruke (u HTML-u) $Text = "Pozdrav!
Poruka poslana iz skripte Mowshon Web stranica: http://site"; // Attachment u pismu - adresa datoteke $Attachment = ""; /* $mail = new KM_Mailer(server, port, user, password, type); */ /* Vrsta može biti: null, tls ili 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 datoteku if($Attachment) ($mail->addAttachment($Attachment);) // Dodaj više primatelja $mail->addRecipient( " [e-mail zaštićen]"); $mail->addRecipient(" [e-mail zaštićen]"); /* $mail->send(From, For, Subject, Text, Subject = optional) */ $SendMail = $mail->send($SenderConfig["SMTP_email"], $Receiver, $Subject, $Text ); // Brisanje popisa primatelja $mail->clearRecipients(); $mail->clearCC(); $mail->clearBCC(); $mail->clearAttachments(); ) else ( echo "Došlo je do pogreške dok spajanje na SMTP poslužitelj"; ) ?>

Postavljanje skripte temelji se uglavnom na nizu $SenderConfig, ovdje moramo navesti SMTP:poslužitelj, port, prijavu i lozinku za e-poštu. Opišimo svaki ključ niza:

SMTP_server - adresa SMTP poslužitelja (pojedinačna adresa za različite e-mailove)

Mail.ru pošta: smtp.mail.ru port: 25, 587 i 465 (sa SSL enkripcijom)

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

Rambler mail: mail.rambler.ru port: 25, 587 465 (SSL port)

Yahoo mail: smtp.mail.yahoo.com SSL port: 465

(Ako trebate adrese smtp servera koji nisu na popisu, napišite u komentarima)

SMTP_port - Već smo ga opisali gore za svaki smtp poslužitelj.

SMTP_email - korisnik bi bio precizniji, ali radi jasnoće napisao sam e-poštu, označavamo adresu e-pošte.

SMTP_pass - Lozinka za e-poštu koja je navedena kao vrijednost u ključu SMTP_email


SMTP_type - Zadana NULL. Protokol po kojem će se pisma slati. Protokoli: SSL i TLS

Pismu možete dodati privitke jednostavnim navođenjem pune adrese datoteke u varijabli $Attachment (/var/patch/to/file/File.pdf)

Ako imate pitanja, napišite ih u komentarima ispod.

Slanje pošte putem SMTP-a s lokalnog poslužitelja omogućuje testiranje slanja poruka sa stranice koja se nalazi na lokalnom računalu, ili jednostavnije, lokalnom poslužitelju. Da biste to učinili, možete koristiti bilo koju uslugu pošte Yandex, Google ili mail.ru.

Prije svega, SMTP (Simple Mail Transfer Protocol) široko je korišten mrežni protokol dizajniran za prijenos e-pošte preko TCP/IP mreža. I svi popularni imaju takve protokole. poštanske usluge.

Pojavom lokalnih poslužitelja više nije bilo potrebe birati pružatelja usluga hostinga kako bi se provjerila izvedba pojedinih skripti ili cms sustava, a kamoli plaćati za to. Puno je lakše sve testirati na računalu, a onda možete svima pokazati što ste "napravili".

Mnogi od ovih poslužitelja već imaju ugrađene softver i potrebnu funkcionalnost za rad s poštom, samo je trebate ispravno konfigurirati.

Za provjeru funkcionalnosti takve pošte potreban je minimum:

  • Možete koristiti Openserver kao lokalni poslužitelj.
  • I jednostavna skripta, čiji se predložak nalazi odmah ispod.
  • Možete koristiti bilo koji poslužitelj pošte.

Slanje php pošte putem postavljanja SMTP skripte

Potrebno je urediti jednostavan predložak skripte koji se može kopirati u nastavku ili preuzeti sa stotina sličnih stranica.

Prvo morate promijeniti neke vrijednosti u predlošku skripte.
do - promijeniti poštanska adresa gdje će poruka biti poslana.
subjekt - predmet pisma
poruka — sama poruka ili tijelo pisma.

Primjer moje skripte:

Možete, naravno, malo proširiti funkcionalnost i učiniti da skripta prikazuje poruku o slanju pošte. Iako zapravo SMTP poslužitelj vrši slanje, a skripta samo generira poruku.

Na primjer, možete napisati ovo:

Sve zamijenjene vrijednosti moraju biti pod navodnicima, inače će skripta izbaciti pogrešku. Nakon toga možete spremiti skriptu u mapu lokalnog poslužitelja.

Na primjer: domene/send/index.php i počnite postavljati slanje pošte putem SMTP opensrervera.

Pošta će stići na bilo koju adresu koja će biti navedena u skripti umjesto vrijednosti 'do' , ali će ova pošta biti obrađena i poslana upravo onim SMTP-om koji će biti naveden u postavkama openserver-a.

  1. Pokretanje poslužitelja
  2. Otvorite modul openserver s postavkama u izborniku “mail”.
  3. Ispunjavamo sva polja kao što je prikazano na slici, dok zamjenjujemo korisničko ime, e-mail pošiljatelja i lozinku iz stvarnog Yandex poštanskog sandučića.

Spremamo postavke i nakon ponovnog pokretanja poslužitelja možete pristupiti samoj skripti. Iz mape “My Sites” otvorite mapu “send” u kojoj se nalazi prethodno spremljena skripta index.php.

Čim se pristupi ovoj skripti, u novom prozoru preglednika pojavit će se informacija koja pokazuje da je skripta dovršena.

Nakon ovoga trebali biste provjeriti svoje poštanski sandučić, čija je adresa navedena u skripti, je li pismo stiglo.

Ako ga nema, znači da nešto nije ispravno konfigurirano ili je pismo završilo u mapi neželjene pošte.

Sve ostale postavke izgledaju slično, ali za svaki slučaj dodatne informacije ne spriječiti.

Da biste postavili slanje pošte putem SMTP mail ru, jednostavno morate zamijeniti Yandex parametre parametrima mail ru.

I kako se ne bi obnavljao svaki put lokalni poslužitelj, najbolje je konfigurirati različite openserver profile. Kako to učiniti prikazano je u video tutorialu.

U ovom slučaju, bit će dovoljno samo učitati profil i sve postavke koje su navedene za ovaj profil bit će dostupne nakon ponovnog pokretanja poslužitelja. To je vrlo zgodna stvar i radi vrlo jednostavno.

Za svaki profil (uopće nije važno kako će se zvati) moraju se napraviti vlastite postavke, osim ako, naravno, ne planirate koristiti skripte, cms sustave i aplikacije s različitim parametrima.
Ako ne, onda možete proći sa zadanim postavkama.

Što se tiče SMTP mail ru, ovdje je sve identično.

Podaci Yandexa mijenjaju se u podatke mail ru

Slanje pošte putem smtp google

Da biste postavili slanje pošte putem Google SMTP-a, potrebno je malo truda.

Prvo, stvaranje profila u Googleu teže je nego u drugim sustavima Yandex i mail ru
Drugo, sustav neće jednostavno propustiti pismo, čak i ako date svoje podatke za prijavu. Za početak će poslati pismo u kojem će sve biti potrebne informacije za daljnje upute.

Inače Za Google je konfiguriran na potpuno isti način. Mijenjaju se samo svi podaci.

Da biste konfigurirali slanje pošte putem drugog SMTP-a, svi će podaci biti približno isti.

Ako vam je sve uspjelo i pisma su stigla do navedenog primatelja, onda je sve učinjeno ispravno. Bilo bi sjajno da podijelite svoja iskustva u komentarima.