Principy fungování pošty PHP a smtp. Odesílání e-mailů (SMTP vs

Domov / Pevné disky

Odesílání pošty přes SMTP z místního serveru vám umožňuje otestovat odesílání zpráv z webu umístěného na místním počítači nebo jednodušeji z místního serveru. K tomu můžete použít jakoukoli poštovní službu Yandex, Google nebo mail.ru.

Za prvé, SMTP (Simple Mail Transfer Protocol) je široce používaný síťový protokol, určený k přenosu e-mail v sítích TCP/IP. A všechny populární e-mailové služby mají takové protokoly.

S příchodem lokálních serverů již nebylo nutné vybírat poskytovatele hostingu pro kontrolu výkonu jednotlivých skriptů nebo CMS systémů, tím méně za to platit. Je mnohem snazší vše otestovat na počítači a pak můžete všem ukázat, co jste „udělali“.

Mnoho z těchto serverů je již vestavěno software a potřebnou funkcionalitu pro práci s poštou, stačí ji jen správně nakonfigurovat.

Pro kontrolu funkčnosti takové pošty je nutné minimum:

  • Openserver můžete použít jako lokální server.
  • A jednoduchý skript, jehož šablonu najdete hned níže.
  • Můžete použít jakýkoli poštovní server.

Odesílání pošty php přes nastavení skriptu SMTP

Je třeba upravit jednoduchou šablonu skriptu, kterou lze zkopírovat níže nebo stáhnout ze stovek podobných stránek.

Nejprve musíte změnit některé hodnoty v šabloně skriptu.
na — změnit na poštovní adresu, na kterou bude zpráva odeslána.
podrobit — předmět dopisu
zpráva — samotná zpráva nebo tělo dopisu.

Příklad mého skriptu:

Funkcionalitu můžete samozřejmě trochu rozšířit a nechat skript zobrazit zprávu o odeslání pošty. I když ve skutečnosti je to server SMTP, kdo odesílá, a skript pouze generuje zprávu.

Můžete například napsat toto:

Všechny nahrazené hodnoty musí být v uvozovkách, jinak skript vyvolá chybu. Poté můžete skript uložit do složky místního serveru.

Například: domains/send/index.php a začněte nastavovat odesílání pošty přes SMTP opensrerver.

Pošta dorazí na libovolnou adresu, která bude zadaná ve skriptu místo hodnoty 'na' , ale tato pošta bude zpracována a odeslána přesně tím SMTP, který bude uveden v nastavení openserveru.

  1. Spuštění serveru
  2. Otevřete modul openserver s nastavením v nabídce „mail“.
  3. Vyplníme všechna pole, jak je znázorněno na obrázku, přičemž nahradíme uživatelské jméno, e-mail odesílatele a heslo ze skutečné poštovní schránky na Yandexu.

Nastavení uložíme a po restartu serveru můžete přistupovat k samotnému skriptu. Ze složky „My Sites“ otevřete složku „send“, ve které se nachází dříve uložený skript index.php.

Jakmile dojde k přístupu k tomuto skriptu, v novém okně prohlížeče se zobrazí informace o dokončení skriptu.

Poté byste měli zkontrolovat svůj poštovní schránka, jehož adresa byla uvedena ve scénáři, zda dopis dorazil.

Pokud tam není, znamená to, že něco není správně nakonfigurováno nebo dopis skončil ve složce se spamem.

Všechna ostatní nastavení vypadají podobně, ale pro jistotu další informace neublíží.

Chcete-li nastavit odesílání pošty přes SMTP mail ru, musíte jednoduše nahradit parametry Yandex parametry mail ru.

A aby se pokaždé nepřestavoval lokální server, je nejlepší nakonfigurovat různé profily openserveru. Jak to udělat, je uvedeno ve video tutoriálu.

V tomto případě bude stačit jednoduše načíst profil a všechna nastavení, která byla pro tento profil zadána, budou dostupná po restartu serveru. Je to velmi pohodlná věc a funguje velmi jednoduše.

Pro každý profil (je úplně jedno, jak se bude jmenovat) je nutné provést jeho vlastní nastavení, pokud ovšem neplánujete používat skripty, cms systémy a aplikace s jinými parametry.
Pokud ne, můžete si vystačit s výchozím nastavením.

Pokud jde o SMTP mail ru, zde je vše stejné.

Data Yandex se změní na data mail ru

Odesílání pošty přes smtp google

Nastavení odesílání pošty přes Google SMTP vyžaduje trochu úsilí.

Za prvé, vytvoření profilu v Google je obtížnější než v jiných systémech Yandex a mail ru
Za druhé, systém dopis jednoduše nepropustí, i když zadáte své přihlašovací údaje. Nejprve pošle dopis obsahující všechny potřebné informace o dalších pokynech.

Jinak Pro Google je nakonfigurován úplně stejným způsobem. Mění se pouze všechny údaje.

Pro konfiguraci odesílání pošty přes jiný SMTP budou všechna data přibližně stejná.

Pokud vám vše vyšlo a dopisy dorazily k určenému adresátovi, vše proběhlo správně. Bylo by skvělé, kdybyste se o své zkušenosti podělili v komentářích.

Mail PHP

Tato funkce je standardně implementována jako odesílání e-mailu. Tato funkce nevyžaduje server třetí strany k přeposílání e-mailů. Pro kontrolu správnosti této funkce stačí vytvořit soubor test.php ve složce s webem a umístit tam následující kód:

Kde místo toho "E-MAILPŘÍJEMCE" Zadejte email, na který má být dopis zaslán.

Místo tento soubor v kořenovém adresáři vašeho webu.

Dále do adresního řádku zadejte www.YourDomain/test.php. Pokud je na zadanou e-mailovou adresu přijat dopis, pak váš hosting funguje správně s funkcí odesílání dopisů " Mail PHP". Je možné, že dopis skončil ve spamu, proto je potřeba jej také zkontrolovat.

Pokud dopis dorazil v nesrozumitelném kódování, změňte řádek: "Kontrola odesílání pošty" na "Kontrola odesílání pošty", "Content-type:text/html;charset=utf-8".

A opakujte odeslání dopisu přes adresní řádek vašeho prohlížeče.

Pokud se po výše uvedených manipulacích testovací dopis nedostane ke konečnému příjemci, musíte kontaktovat technickou podporu vašeho hostingu.

Mezi nedostatky tato metoda Stojí za zmínku, že práce není trvalá tato metoda. Může dojít k přerušení odesílání e-mailů na straně hostitele.

Hlavní nevýhodou této metody je, že všechny dopisy zaslané na e-maily klientů nebudou poštovními službami (gmail, mail.ru, yandex.ru) rozpoznány, protože byly odeslány přímo z vašeho webu.

Poštovní služba Gmail zobrazuje tyto dopisy s otazníkem a podpisem: „Systém Gmailu nedokázal potvrdit, že tento dopis byl odeslán z domény VašeDoména. Může se jednat o spam.“

Aby se předešlo této situaci .

SMTP (Simple Mail Transfer Protocol)

SMTP - protokol pro přenos pošty. Celkově pro nastavení přenosu pošty pomocí tohoto protokolu potřebujete samotný server SMTP. Nejběžnější možností pro použití firemní (doménové) pošty yandex.ru jako serveru SMTP je https://pdd.yandex.ru/.

Především je to nutné účet (mail) yandex, na základě kterého budou vytvořeny emaily pro Vaši doménu: “objednávka@VašeDoména” “info@VašeDoména”... Hlavní účet nebude nikde vidět a slouží pouze k vytváření doménových emailů na jeho základě v budoucnu.

Po autorizaci ve vašem osobním účtu Yandex se vytvoří doménová pošta na odkazu https://pdd.yandex.ru/. Toto je e-mail domény, který uživatelé uvidí v poli Odesílatel.

Při odesílání e-mailů přes SMTP je pole „Odesílatel“ povinné. Použití SMTP k odesílání dopisů, kombinace " Doména" - "E-mail", čímž jsou dopisy rozpoznány poštovními službami.


Mezi nevýhody této metody stojí za zmínku nemožnost „načíst“ doménový poštovní portrét, protože samotné poštovní služby tuto funkci zatím neposkytují.

Nastavení pro odesílání pošty přes SMTP

Existují případy, kdy tvůrci webových stránek čelí problému s e-mailem webové stránky pomocí CMS Joomla. Například při odesílání dopisu přes formulář zpětná vazba Mohou se objevit následující typy chyb: "Nelze vytvořit instanci funkce pošty" nebo "Nepodařilo se zavolat funkci pošty". Je také možné poslat dopis bez chyb, ale ve výsledku stejně nedorazí k adresátovi.

Proč k těmto problémům dochází s poštou? Chcete-li odpovědět na tuto otázku, musíte v ovládacím panelu přejít na následující cestu: „Systém“ - „Obecná nastavení“ - karta „Server“ - sekce „Nastavení pošty“.

CMS Joomla poskytuje tři mechanismy pro odesílání dopisů: PHP Mail, Sendmail a SMTP. Standardně se používá PHP Mail, který často způsobuje problémy, které souvisí především s nastavením používaného hostingu.

Na základě výše uvedeného docházíme k závěru: buď se obrátíme o pomoc na poskytovatele hostingu, nebo použijeme metodu odesílání dopisů Sendmail či SMTP. Zaměřme se na používání SMTP.

Nastavení pro odesílání pošty pomocí SMTP

SMTP (Simple Mail Transfer Protocol) je síťový protokol používaný k přenosu e-mailů. Chcete-li používat SMTP, musíte správně nakonfigurovat nastavení konkrétního poštovního serveru, který bude použit.

vidět nastavení SMTP, musíte vybrat „SMTP“ v „Metodě odesílání“. Podívejme se na každé nastavení oblíbených poštovních serverů: Yandex, Mail, Gmail, Rambler a Yahoo.

Nastavení SMTP pro Yandex

  1. E-mail webových stránek: poštovní schránka na yandex.ru, například: [e-mail chráněný]
  2. Zabezpečení SMTP: SSL
  3. Port serveru SMTP: 465
  4. Uživatelské jméno SMTP: přihlášení k poštovní schránce na yandex.ru, například: khasanov (bez @yandex.ru)
  5. Server SMTP: smtp.yandex.ru

Nastavení SMTP pro poštu

  1. E-mail webových stránek: poštovní schránka na mail.ru, například: [e-mail chráněný]
  2. Odesílatel dopisu: záznam, který příjemce zobrazí v poli „Odesílatel“.
  3. Zakázat zasílání pošty: zapnuto/vypnuto. funkce hromadné pošty
  4. Autorizace na SMTP serveru: Ano
  5. Zabezpečení SMTP: SSL
  6. Port serveru SMTP: 465
  7. Uživatelské jméno SMTP: poštovní schránka na mail.ru, například: [e-mail chráněný]
  8. Heslo SMTP: heslo poštovní schránky
  9. Server SMTP: smtp.mail.ru

Nastavení SMTP pro Gmail

  1. E-mail webových stránek: poštovní schránka na adrese gmail.com, například: [e-mail chráněný]
  2. Odesílatel dopisu: záznam, který příjemce zobrazí v poli „Odesílatel“.
  3. Zakázat zasílání pošty: zapnuto/vypnuto. funkce hromadné pošty
  4. Autorizace na SMTP serveru: Ano
  5. Zabezpečení SMTP: SSL
  6. Port serveru SMTP: 465
  7. Uživatelské jméno SMTP: poštovní schránka gmail.com, například: [e-mail chráněný]
  8. Heslo SMTP: heslo poštovní schránky
  9. Server SMTP: smtp.gmail.com

Nastavení SMTP pro Rambler

  1. E-mail webových stránek: poštovní schránka na adrese rambler.ru, například: [e-mail chráněný]
  2. Odesílatel dopisu: záznam, který příjemce zobrazí v poli „Odesílatel“.

PHPMailer je velmi pohodlná a oblíbená knihovna pro odesílání e-mailových zpráv z vašeho webu. Tento článek popisuje základní nastavení knihovny a poskytuje příklady kódu pro odesílání zpráv. PHPMailer má ve svém sortimentu snad vše, co můžete od práce s poštou chtít: odesílání různými způsoby prostřednictvím různých serverů, včetně přes smtp, možnost šifrovat a podepisovat vaše dopisy, aby neskončily ve spamu a mnoho dalšího.

Knihovnu PHPMailer si můžete stáhnout z https://github.com/PHPMailer/PHPMailer (tlačítko „Klonovat nebo stáhnout“).

Nejprve se podívám na pár jednoduché příklady aby bylo jasné, jak odesílat e-maily pomocí PHPMailer.

Odesílání e-mailů pomocí funkce mail() pomocí PHPMailer

Pokud chcete posílat e-maily z vašeho hostingu prostřednictvím vašeho poštovní server, pak je vše docela jednoduché a bude vypadat nějak takto:

// Zahrnout knihovnu PHPMailer use PHPMailer\PHPMailer\PHPMailer; vyžadovat "PHPMailer/PHPMailer.php"; // Vytvořte dopis $mail = new PHPMailer(); $mail->setFrom(" [e-mail chráněný]", "Ivan Ivanov"); // od koho (e-mail a jméno) $mail->addAddress(" [e-mail chráněný]", "Vasya Petrov"); // komu (e-mail a jméno) $mail->Subject = "Test"; // předmět dopisu // html text písmena $mail->msgHTML("

Ahoj!

Toto je zkušební dopis.

"); // Odeslat if ($mail->send()) ( echo "Zpráva odeslána!"; ) else ( echo "Chyba: " . $mail->ErrorInfo; )

Jak vidíte, vše je celkem jednoduché: připojíme knihovnu, vyplníme od koho, komu, předmět a text dopisu a odešleme. Odesílání e-mailů tímto způsobem bude fungovat pouze z e-mailových adres ve vaší doméně (pokud nejsou propojeny s jinými odesílateli).

Odesílání e-mailů přes SMTP pomocí PHPMailer na příkladu Yandex a Google

Můžete také poslat dopis prostřednictvím jiného poštovního odesílatele, například prostřednictvím Yandex. Kód bude vypadat nějak takto:

// Zahrnout knihovnu PHPMailer use PHPMailer\PHPMailer\PHPMailer; použijte PHPMailer\PHPMailer\SMTP; vyžadovat "PHPMailer/PHPMailer.php"; vyžadovat "PHPMailer/SMTP.php"; // Vytvořte dopis $mail = new PHPMailer(); $mail->isSMTP(); // Odeslání přes SMTP $mail->Host = "smtp.yandex.ru"; // adresa serveru SMTP $mail->SMTPAuth = true; // Povolení ověřování SMTP $mail->Username = "login"; // vaše uživatelské jméno (bez domény a @) $mail->Password = "heslo"; // vaše heslo $mail->SMTPSecure = "ssl"; // šifrování ssl $mail->Port = 465; // port připojení $mail->setFrom(" [e-mail chráněný]", "Ivan Ivanov"); // od koho $mail->addAddress(" [e-mail chráněný]", "Vasya Petrov"); // komu $mail->Subject = "Test"; $mail->msgHTML("

Ahoj!

Toto je zkušební dopis.

"); // Odeslat if ($mail->send()) ( echo "Zpráva odeslána!"; ) else ( echo "Chyba: " . $mail->ErrorInfo; )

Odesílání e-mailů přes Google má jednu výhradu: musíte google účet povolit přístup k nedůvěryhodným aplikacím. Chcete-li to provést, musíte přejít na svůj účet https://myaccount.google.com, přejděte na zabezpečení, přejděte do části „Nedůvěryhodné aplikace, které mají přístup k vašemu účtu“ a tam se přepněte na „Povoleno“. V době psaní tohoto článku je tato stránka https://myaccount.google.com/u/0/lesssecureapps.

$mail->Host = "smtp.gmail.com"; // adresa serveru SMTP $mail->SMTPAuth = true; // Povolení ověřování SMTP $mail->Username = "login"; // vaše uživatelské jméno $mail->Password = "heslo"; // vaše heslo $mail->SMTPSecure = "ssl"; // šifrování ssl $mail->Port = 465; // port připojení

Pokud program pro odesílání přes smtp spouštíte poprvé, pak je vhodné před odesláním dodatečně použít $mail->SMTPDebug = 1; přijímat všechny zprávy od klienta a smtp serveru, tzn. Celý proces připojení, autorizace atd. se zobrazí na obrazovce, což je velmi užitečné pro ladění vašeho programu.

Odeslání e-mailu s přílohou pomocí PHPMailer

Zde je vše docela jednoduché, stačí použít metodu přidat Přílohu. Uvedu příklad a zároveň předvedu několik dalších další funkce:

// Zahrnout knihovnu PHPMailer use PHPMailer\PHPMailer\PHPMailer; použijte PHPMailer\PHPMailer\Exception; vyžadovat "PHPMailer/PHPMailer.php"; vyžadovat "PHPMailer/Exception.php"; // Vytvořte dopis $mail = new PHPMailer; $mail->CharSet = "UTF-8"; $mail->setFrom(" [e-mail chráněný]", "Ivan Ivanov"); // od koho $mail->addReplyTo(" [e-mail chráněný]", "Ivan Ivanov"); // zpáteční adresa $mail->addAddress(" [e-mail chráněný]", "Vasya Petrov"); // komu $mail->Subject = "Test"; // předmět $mail->msgHTML(file_get_contents("contents.html"), __DIR__); // získat "tělo" dopisu ze souboru $mail->AltBody = "Plain text letter" // prostý text dopisu, pokud klient nepodporuje html $mail->addAttachment("my_file.txt" // připojit jeden soubor $mail-); >addAttachment("phpmailer) .jpg" // připojte druhý soubor // Odeslat if ($mail->send()) ( echo "Zpráva odeslána!"; ) else ( echo "Chyba: " . $mail- >Info o chybě);

Pomocí addAddress můžete přidat více adres příjemců. Nebo v případě potřeby můžete naopak pomocí metody vymazat všechny adresy příjemců clearAddresses(). Všechny přílohy můžete vymazat pomocí clearAttachments().

Můžete také použít PřidatEmbeddedImage přidat k emailu přílohu (obvykle obrázek), která je určena pro použití v html kódu a nebude dostupná ke stažení. Příklad použití obrázku v dopise, který není k dispozici ke stažení:

// Zahrnout knihovnu PHPMailer use PHPMailer\PHPMailer\PHPMailer; vyžadovat "PHPMailer/PHPMailer.php"; //Vytvořte dopis $mail = new PHPMailer; $mail->JeHTML(true); $mail->setFrom(" [e-mail chráněný]", "Ivan Ivanov"); $mail->addAddress(" [e-mail chráněný]", "Vasya Petrov"); $mail->Subject = "Test"; $mail->AddEmbeddedImage("phpmailer.jpg","testImage"); $mail->Body = "

Obrázek v html kódu

"; // Odeslat $mail->send();

Takže můžete poslat dopisy s obrázky, které jsou pouze v těle dopisu, ale nelze je stáhnout jako přílohu. Tyto obrázky lze použít kdekoli v html kódu dopisu, stačí zadat cid obrázku, který jste použili v AddEmbeddedImage místo url adresy.

Odesílání podepsaných a šifrovaných e-mailů přes PHPMailer

Ve výchozím nastavení PHPMailer šifruje všechny odeslané zprávy. Šifrování e-mailů můžete zakázat pouze při odesílání e-mailů přes SMTP pomocí kódu:

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

Na podepište dopis podpisem DKIM, musíte provést několik kroků:

  • Generujte soukromé a veřejné klíče pro vaši doménu
  • Přidejte záznam DNS pro doménu TXT s veřejným klíčem
  • Před odesláním e-mailu nakonfigurujte podpis DKIM v PHPMaileru

Nyní popíšu každý krok trochu podrobněji.

Generování soukromých a veřejných klíčů

Pokud máte hosting Linux a máte přístup k Shell, pak je generování klíčových souborů stejně snadné jako loupání hrušek, stačí spustit 2 příkazy s vašimi běžnými uživatelskými právy:

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

resp. test-private.pem A test-public.pem- jedná se o soukromé a veřejné klíče. Musíte je uložit do složky, která nebude přístupná návštěvníkům webu ani nikomu jinému kromě vás.

Pokud není možné provádět příkazy v shellu, pak pro generování soukromých a veřejných klíčů a jejich uložení do souborů můžete použít následující kód:

$domain = "test.ru"; // vaše doména $privatekeyfile = "test-private.pem"; // název souboru, do kterého bude zapsán soukromý klíč $publickeyfile = "test-public.pem"; // název souboru, do kterého bude zapsán veřejný klíč if (file_exists($privatekeyfile)) ( echo "

Použití existujících klíčů

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

Vytvořte klíče"; $pk = openssl_pkey_new([ "digest_alg" => "sha256", "private_key_bits" => 2048, "private_key_type" => OPENSSL_KEYTYPE_RSA, ]); openssl_pkey_export_to_file =_vate_keypks $prily); ($ pk );

Soukromý klíč (nechte tento soukromý!):

" . $privatekey ."
"; echo"

Veřejný klíč:

". $publickey."
";

Pozor! Nezapomeňte se ujistit, že složka, kam budou soubory uloženy, je zapisovatelná.

Přidání DNS záznamu s veřejným klíčem

DNS záznam je nutný, aby poštovní servery, které budou přijímat vaše dopisy, mohly ověřit podpis na dopise přečtením DNS záznamu vaší domény. Obvykle můžete přidat záznam DNS v ovládacím panelu vaší domény nebo v ovládacím panelu hostitele. Pokud nevíte, jak přidat záznam, obraťte se na podporu poskytovatele hostingu.

Musíte přidat záznam DNS takto:

Název položky: mail._domainkey.test.ru. (na konci je tečka ".")

TTL: 3600 (nebo podle toho, co bude výchozí)

Typ příspěvku: TXT

Význam: v=DKIM1; h=sha256; t=s; p=VÁŠ_VEŘEJNÝ_KLÍČ

V názvu položky test.ru musí být nahrazen názvem vaší domény. Nahradíte slova „VÁŠ_PUBLIC_KEY“ textem, který jste obdrželi v předchozím kroku za „Veřejný klíč“, bez „-----BEGIN PUBLIC KEY-----“ a „-----END PUBLIC KEY- -- --“, pouze samotný klíč. V tomto případě jsou potřeba všechny klíčové linie zřetězit do jedné dlouhé řady aby nedocházelo k zalomení řádků.

Nastavení podpisu DKIM v PHPMailer a odeslání e-mailu

Nyní zbývá jen provést pár nastavení PHPMaileru před odesláním dopisu a bude podepsán. Myslím, že následující příklad vše objasní:

// Zahrnout knihovnu use PHPMailer\PHPMailer\PHPMailer; vyžadovat "PHPMailer/PHPMailer.php"; // Vytvořte dopis $mail = new PHPMailer; $mail->CharSet = "UTF-8"; $mail->setFrom(" [e-mail chráněný]"); $mail->addAddress(" [e-mail chráněný]"); $mail->Subject = "Toto je test"; $mail->msgHTML("

Toto je test

"); // Nastavení podpisu DKIM $mail->DKIM_domain = "test.ru"; $mail->DKIM_private = "test-private.pem"; $mail->DKIM_selector = "mail"; // Odeslat $ mail- >odeslat();

Samozřejmě test.ru měli byste změnit název své domény a test-private.pem na úplnou cestu a název souboru soukromého klíče, který byl vytvořen ve fázi generování klíče.

Nyní budou vaše e-maily odeslané přes PHPMailer podepsané DKIM vaším soukromým klíčem.

2019-08-05

Dobrý den, milý návštěvníku!

Odpusťte mi prosím zpoždění s aktualizací blogu. Existuje pro to ale zcela srozumitelné vysvětlení. Koneckonců léto, dača, hosté, les, voda a mnoho dalšího, což mi nedovolilo popasovat se s tvorbou webu. Ale teď jsem se trochu uvolnil, hosté odešli a myslím, že teď tomu budu určitě věnovat patřičnou pozornost.

Poté, co jsme v minulém článku připojili poštu naší domény k jedné z poštovních služeb, nyní se podívejme, jak můžete odesílat e-maily z webu. Navíc tak, aby naše dopisy nekončily ve SPAMu, ale byly spolehlivě, s vysokou mírou pravděpodobnosti, doručeny našim příjemcům.

Obecně je v PHP zabudovaná funkce mail() pro odesílání dopisů. Je však třeba poznamenat, že i přes jednoduchost této metody (v tomto případě pro odesílání dopisů stačí zadat pouze jeden řádek kódu s určitými parametry) má použití této možnosti významnou nevýhodu spojenou s problémem SPAM .

Faktem je, že anti-SPAM filtry poštovních serverů na straně příjemce skutečně neupřednostňují dopisy zasílané prostřednictvím funkce mail(). A ve většině případů jsou takové zprávy filtrovány nebo dokonce smazány, než se dostanou k adresátovi.

A aby se takové případy co nejvíce eliminovaly, obvykle se používá další možnost, kdy se dopisy posílají, jako by to dělala poštovní služba třetí strany.

Tato metoda se nazývá odesílání pošty přes SMTP s autorizací. Na což se dnes podíváme na příkladu odeslání formuláře zpětné vazby. Navíc k tomu využijeme poměrně známou a oblíbenou knihovnu PHPMailer, která vám umožní celkem jednoduše organizovat odesílání dopisů přes SMTP.

  • Jak budeme posílat dopisy se zpětnou vazbou
  • Vytvoření formuláře zpětné vazby
  • Instalace knihovny PHPMailer
  • Vytvoříme skript pro odesílání pošty přes SMTP
  • Kontrola odesílání e-mailů
  • Zdrojové soubory místo

Jak budeme posílat dopisy se zpětnou vazbou

Než začnete praktická práce Po odeslání dopisů se zpětnou vazbou se nejprve rozhodneme, jak to uděláme.

Formulář zpětné vazby je navržen tak, aby uživateli umožnil komunikovat s administrátorem webu a předat mu jeho zprávu. Tento formulář se obvykle skládá z několika polí a tlačítka „Odeslat“.

K odeslání e-mailu v zásadě stačí použít pouze několik polí, která poskytují dostatečné informace o uživateli a obsahu zprávy, jako například:

  • "Jméno" - pro zadání jména odesílatele zprávy;
  • "E-mail" - pro e-mailovou adresu odesílatele;
  • "Předmět zprávy";
  • "Text zprávy".

I když můžete přidat další. Například telefonní číslo, pokud je to opravdu nutné.

V našem případě budou takové dopisy zasílány na adresu správce webu ze skutečné poštovní schránky s autorizací na poštovní službě, ke které je naše doména připojena.

Jelikož jsme se v předchozím článku zaměřili na kontrolu připojení doménové pošty ke službě Yandex.Mail, budeme posílat poštu pro tuto možnost. I když to není důležité. Níže uvidíte ty možnosti, které vám po změně umožní odesílat e-maily přes poštovní server Mail.ru.

Jako skutečnou schránku, ze které se budou odesílat dopisy, použijeme účet nově vytvořeného doménového uživatele pošty, řekněme s adresou [e-mail chráněný]. A tyto dopisy zašleme do schránky správce [e-mail chráněný], kterou jsme dříve vytvořili v předchozím článku.

Odesílatelem dopisu z formuláře zpětné vazby bude tedy poštovní schránka [e-mail chráněný]., a příjemce - [e-mail chráněný]. V tomto případě budou v těle odeslaného dopisu přeneseny všechny informace o uživateli, který zprávu odeslal s jejím obsahem.

Vytvoření formuláře zpětné vazby

Poté, co jsme se rozhodli pro postup zasílání dopisů, nyní vytvoříme formulář zpětné vazby, pomocí kterého to uděláme.

Níže je uveden HTML kód tohoto formuláře, který umístíme na stránku "Kontakty" (soubor kontakty.php v adresáři článků).

    "článek" >

    Kontakty

    Zpětná vazba

    "kontakt" akce = "#" metoda = "zveřejnit" >

    Formulář zpětné vazby

    Se všemi dotazy, požadavky a obchodními návrhy nás můžete kontaktovat pomocí formuláře pro zpětnou vazbu níže.

    "kontaktní blok" >

    "kontaktní vstup" >

    "text" id = "kontaktní jméno" jméno = "kontaktní jméno" titul = "Jméno musí být v ruštině a obsahovat alespoň 3 znaky" vzor = "{3,}" vyžadováno >

  1. "prázdný kontakt" >

    "kontaktní vstup" >

    "e-mail" id = "kontaktní e-mail" jméno = "kontaktní e-mail" vyžadováno >

  2. "kontaktní předmět" >

  3. "kontakt-komentář" >

  4. "kontaktní tlačítko" >

    "předložit" jméno = "kontaktní tlačítko" hodnota = "Poslat" >

Obr.1 HTML kód formuláře zpětné vazby

Na následujícím snímku obrazovky se můžete podívat, jak zde zobrazený formulář zpětné vazby nakonec vypadá.

Tím je vytvořena požadovaná forma. A nyní můžete přejít k problematice zpracování a odesílání dat formou emailové zprávy.

Instalace knihovny PHPMailer

Jak již bylo zmíněno, k odesílání pošty použijeme knihovnu PHPMailer, která výrazně zjednoduší odesílání e-mailů přes protokol SMTP s autorizací na poštovní službě třetí strany.

Chcete-li jej nainstalovat, musíte si jej stáhnout potřebné soubory. To lze provést z webové služby GitHub pomocí Composer (správce závislostí balíčků pro PHP). Nebo si jednoduše stáhněte potřebné soubory běžným způsobem.

snímek obrazovky 73

Níže je stránka webové služby GitHub, kde je vyznačen odkaz na běžné stahování knihovny PHPMailer.

kromě toho, nejnovější verzi 6.0.7, který byl uložen v době psaní tohoto článku, je ke stažení z přiložených materiálů.

V každém případě by měl být výsledný archivní soubor rozbalen a poté by měla být extrahovaná složka PHPMailer-master s celým obsahem umístěna do kořenového adresáře webu. Zároveň jej pro jednoduchost můžete přejmenovat na PHPMailer. Níže je uveden obsah složky PHPMailer umístěné v kořenovém adresáři webu.

Tak jsme nainstalovali knihovnu PHPMailer. Poté můžeme začít vytvářet skript, pomocí kterého budeme odesílat e-mailové zprávy z našeho webu.

Vytvoříme skript pro odesílání pošty přes SMTP

Pro sestavení skriptu stačí využít doporučení pro použití PHPMaileru uvedená na stránce GitHub, který jsme dříve použili ke stažení knihovny.

Zejména naznačují, že na začátku skriptu je nutné importovat třídy PHPMailer do globálního jmenného prostoru. A jsou uvedeny konkrétní řádky odpovídajícího kódu. Jsou zde také příklady použití vlastností a metod PHPMaileru, včetně možnosti odesílání pošty přes SMTP.

Pokud by to ale nestačilo, pak můžete využít i dokumentaci, která obsahuje popis všech vlastností a metod této knihovny.

snímek obrazovky 74

Níže je uveden kód skriptu pro odesílání pošty z formuláře zpětné vazby přes SMTP s autorizací. Kde jsou všechny řádky související s PHPMailer uvedeny s vysvětlením a zvýrazněny světlým pozadím.

Zbytek části včetně fragmentů souvisejících s příjmem a zpracováním dat z formuláře, které jsme dříve museli používat v jiných procesorech, je naznačen tmavým pozadím. Byly podrobněji rozebrány dříve v článku věnovaném konkrétně problematice získávání a ověřování dat z formuláře v PHP. Kde jsme také hovořili o univerzální uživatelské funkci pro validaci a zpracování formulářových dat check_symbol().

Tento skript umístíme do stejného souboru kontakty.php, ve kterém jsme dříve vytvořili formulář zpětné vazby.

    //----Skript pro odesílání pošty přes SMTP pomocí PHPMailer----

    //Import tříd PHPMailer do globálního jmenného prostoru. Měly by být v horní části skriptu, nikoli uvnitř funkce

    použití PHPMailer\PHPMailer\PHPMailer ;

    použití PHPMailer\PHPMailer\Exception ;

    -li (!prázdný($_POST["contact-button" ])) (

    $name = $_POST["jméno-kontaktu" ];

    $jméno = kontrolní_symbol ($jméno, "Jméno" , "1" , "/^+\z/iu" );

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

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

    $předmět = $_POST["kontakt-předmět" ];

    $předmět = kontrolní_symbol ($předmět, "Předmět zprávy" , "1" , "0" );

    $komentář = $_POST["kontaktní-komentář" ];

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

    -li (!prázdný($GLOBALS["upozornění" ])) (

    $alert = "Data formuláře nebyla odeslána. Byly nalezeny následující chyby:\n".$alert;

    zahrnout"alert.php" ;

    jiný {

    //Připojování knihovny

    vyžadovat"PHPMailer/src/PHPMailer.php" ;

    vyžadovat"PHPMailer/src/Exception.php" ;

    vyžadovat"PHPMailer/src/SMTP.php" ;

    $mail = nový PHPMailer(); //Inicializace třídy

    $from = " [e-mail chráněný]" ; //E-mailová adresa, ze které je dopis odeslán

    $to = " [e-mail chráněný]" ; //Adresa příjemce

    $mail -> isSMTP(); //Použít protokol SMTP

    $mail -> Host = "smtp.yandex.ru" ; //Adresa poštovního serveru

    $mail -> SMTPAuth = věrný ; //Povolit režim autorizace

    $mail -> Uživatelské jméno = " [e-mail chráněný]" ; //Přihlášení z e-mailu domény připojeného k e-mailové službě třetí strany (v tomto případě Yandex.Mail)

    $mail -> Heslo = "27MrDon89" ; //Heslo pro doménovou poštu

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

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

    $mail -> CharSet = "UTF-8" ; //Kódování

    $mail -> setFrom ($from, "Administrátor" ); //Adresa a jméno odesílatele

    $mail -> addAddress ($to, "Administrátor" ); //Adresa a jméno příjemce

    $mail -> isHTML ( věrný ); //Nastavit formát e-mailu na HTML

    $mail -> Předmět = "Formulář zpětné vazby odeslán"; //Předmět e-mailu (záhlaví)

    $mail -> Body = "

    Jméno odesílatele: $jméno

    Adresa odesílatele: $email

    Předmět zprávy: $předmět

    Obsah zprávy: $komentář

    " ; //Obsah zprávy

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

    $mail -> SMTPDebug = 0 ; //Povolit ladění SMTP: 0 - vypnuto (pro běžné použití), 1 = zprávy klienta, 2 - zprávy klienta a serveru

    -li($mail -> send()) (

    $alert = "Zpráva odeslána"; //V dialogovém okně prohlížeče vypíše zprávu o úspěšném odeslání dopisu

    jiný {

    $alert = "Chyba, e-mail nelze odeslat: ".$mail -> ErrorInfo ; //Vypíše chybovou zprávu

    zahrnout"alert.php" ;

Obr.5 Skript pro odesílání emailu přes SMTP s autorizací

Jak vidíte, všechny řádky přímo související s odesláním e-mailové zprávy, ve kterých jsou specifikovány potřebné metody a vlastnosti, jsou doplněny komentáři. Proto nemá smysl se opakovat, ale můžeme se pozastavit pouze u některých z nich, které skutečně vyžadují další vysvětlení, jmenovitě:

1. Vzhledem k tomu, že dopis je odeslán z poštovní služby třetí strany, platí zde nastavení odpovídající konkrétnímu SMTP serveru. V tomto případě se pro případ použití serveru Yandex.Mail použijí následující hodnoty vlastností:

  • Vlastnictví Hostitel(poz.28) - Adresa poštovního serveru s hodnotou smtp.yandex.ru;
  • Vlastnictví Zabezpečené SMTPS
  • Vlastnictví Přístav

Tyto hodnoty vlastností byly převzaty ze stránky Yandex.Help zobrazené na následujícím snímku obrazovky.

Ale takové informace lze získat i z jiných zdrojů. Chcete-li to provést, zadejte do vyhledávače příslušný dotaz, například: „Smtp server Yandex“. Kde lze najít velké množství referencí k této problematice.

Podobným způsobem lze hodnoty nastavení získat z jiných SMTP serverů. Níže je snímek obrazovky nápovědy Mail.ru, který zobrazuje nastavení serveru SMTP poštovní služby Mail.ru.

A proto v případě použití Mail.ru jako serveru SMTP třetí strany by měly být použity následující hodnoty vlastností třídy PHPMailer:

  • Vlastnictví Hostitel(poz.28) - Adresa poštovního serveru (smtp.mail.ru);
  • Vlastnictví Zabezpečené SMTPS(poz.32) - Šifrovací protokol (ssl);
  • Vlastnictví Přístav(poz. 33) - Port serveru SMTP (465).

Podobný přístup by měl být aplikován na další e-mailové služby.

2. V majetku Uživatelské jméno(poz. 30) je nutné uvést celou adresu doménové schránky. V tomto případě, " [e-mail chráněný]".

Pokud však k odesílání dopisů používáte jiný účet než doménový poštovní účet, ale adresu přímo související s poštovní službou, například „ [e-mail chráněný]", pak by měl být login pouze část adresy po znak "@". V tomto případě by login měl hodnotu "feedback".

3. PHPMailer poskytuje vlastnost SMTPDebug(poz. 50), který umožňuje zobrazit různé úrovně chyb na obrazovce prohlížeče. Tato funkce výrazně zjednodušuje hledání problémů při ladění skriptu.

V normálním režimu s hodnotou nastavenou na 0 je výstup podrobných chybových informací obvykle zakázán. Pokud ale nastanou problémy s odesíláním pošty nebo během ladění, je možné použít jiné hodnoty pro zobrazení smysluplnějších informací o chybě.

Abychom viděli, jak to vypadá v praxi, zavedeme dočasně nějakou chybu do nastavení. Například v poštovním hesle domény (vlastnost Heslo, poz. 31). A také zobrazit podrobné informace o chybě, dočasně nastavené ve vlastnosti SMTPDebug(poz.50) hodnota 1. Poté, co je vše odladěno a zkontrolováno, deaktivujeme režim ladění SMTP a nahradíme 1 0.

V závěrečné části skriptu se po specifikaci všech potřebných vlastností a metod použije metoda k odeslání dopisu poslat()) (poz. 51). A pokud je dopis odeslán, a způsob poslat() pro objekt $mail vrátí hodnotu true a poté v dialogovém okně prohlížeče prostřednictvím proměnné $alert Zobrazí se zpráva o úspěšném odeslání pošty (poz. 52).

Pokud z nějakého důvodu nebylo možné poštu odeslat, a proto metoda nemohla vrátit hodnotu true, bude tento stav doprovázen odpovídající chybovou zprávou (poz. 55).

Kontrola odesílání e-mailů

Poté, co jsme vytvořili skript pro odesílání pošty, přirozeně se musíme podívat na výsledek naší „kreativity“. Vzali jsme zde v úvahu vše a neudělali jsme žádnou chybu?

Chcete-li to provést, zkusme, jak bylo zamýšleno, odeslat zprávu od uživatele správci webu z formuláře zpětné vazby. Níže je snímek obrazovky formuláře zpětné vazby s vyplněnými poli před odesláním.

A zde je výsledek odeslání formuláře.

Kde je ze zprávy v dialogovém okně prohlížeče zřejmé, že dopis nelze odeslat z důvodu problému s připojením SMTP.

Ale od nynějška majetek SMTPDebug(poz. 50) je přiřazena hodnota 1, pak můžeme vidět podrobné informace o vzniklé chybě a zjistit důvod jejího vzniku.

Následující snímek obrazovky ukazuje, že při pokusu o připojení byla zjištěna chyba ověřování, což znamená použití nesprávného přihlašovacího jména nebo hesla.

Po odstranění neshody hesla (dříve bylo použito špatné heslo, aby bylo možné zkontrolovat výstup doplňujících informací o chybě), se pokusíme odeslat e-mail znovu.

Tentokrát se zdálo, že vše proběhlo v pořádku a dostali jsme zprávu, že mail byl úspěšně odeslán. Zřejmě, kromě záměrně zavedené dočasné chyby v heslu doménového emailu, jsme se žádné další chyby nedopustili.

Abychom ale měli jistotu, že dopis byl adresátovi skutečně doručen, zadejme poštu s adresou [e-mail chráněný] a podívejte se na výsledek.

Jak vidíte, dopis z adresy [e-mail chráněný], ze kterého jsme odeslali e-mailovou zprávu s názvem „Zpětná vazba“ úspěšně dorazila ke správci webu. Tělo dopisu zároveň obsahuje veškerý obsah, který jsme vygenerovali ve skriptu pomocí dat obdržených z formuláře zpětné vazby, konkrétně:

  • Jméno odesílatele: Nikolay;
  • Adresa odesílatele: [e-mail chráněný];
  • Předmět zprávy: Kontrola odesílání pošty;
  • Obsah zprávy: Testovací zpráva.

Nyní, po úspěšné kontrole odesílání pošty, můžete deaktivovat režim ladění SMTP přiřazením vlastnosti SMTPDebug(poz.50) hodnota 0.

Tím jsme dokončili úkol vytvořit nástroj pro odesílání pošty přes SMTP s autorizací pomocí poštovního serveru třetí strany.

V příštím článku se například podíváme na to, jak zasílat potvrzovací e-maily pro obnovení údajů o registrovaném uživatelském účtu.

Zdrojové soubory webu

Zdrojové soubory webu s aktualizacemi, které byly provedeny v tomto článku, si můžete stáhnout z přiložených doplňkových materiálů:

  • soubory adresáře www
  • Tabulky databáze MySQL

© 2024 ermake.ru -- O opravě PC - Informační portál