Odesílání pošty prostřednictvím poštovních služeb smtp. Odesílání e-mailů (SMTP vs.

nastavení pošty SMTP

Existují případy, kdy se stavitelé stránek potýkají s problémem práce E-mailem místo na CMS Joomla. Například při odesílání emailu přes formulář zpětná vazba Mohou se objevit následující typy chyb: "Nelze vytvořit instanci funkce pošty" nebo "Nelze 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 s poštou dochází? Chcete-li odpovědět na tuto otázku, musíte přejít na ovládací panel po následující cestě: "Systém" - " Obecné nastavení" - Záložka "Server" - sekce "Nastavení pošty".

Joomla CMS poskytuje tři mechanismy pro odesílání e-mailů: 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í e-mailů Sendmail nebo SMTP. Zaměřme se na používání SMTP.

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

SMTP (anglicky Simple Mail Transfer Protocol) - síťový protokol Slouží k odeslání e-mailu. Chcete-li používat SMTP, musíte správně nastavit nastavení konkrétního poštovního serveru, který bude použit.

Chcete-li zobrazit nastavení SMTP, musíte vybrat "SMTP" v "Způsob odeslání". Zvažte každé nastavení oblíbené poštovní servery: Yandex, Mail, Gmail, Rambler a Yahoo.

Nastavení SMTP pro Yandex

  1. E-mail webu: 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 yandex.ru, například: khasanov (bez @yandex.ru)
  5. Server SMTP: smtp.yandex.ru

Nastavení SMTP pro poštu

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

Nastavení SMTP pro Rambler

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

Mail PHP

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

Kde místo toho "e-mailemPŘÍJEMCE" zadejte emailovou adresu, na kterou má být email zaslán.

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

Dále do adresního řádku zadejte www.YourDomain/test.php. V případě zadaný mail obdržel dopis, pak váš hosting funguje správně s funkcí odesílání dopisů " Mail PHP". Je možné, že se dopis dostal do spamu, proto je potřeba jej také zkontrolovat.

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

A pošlete dopis znovu adresní řádek váš prohlížeč.

Pokud se po provedených manipulacích testovací dopis nedostal ke konečnému příjemci, musíte kontaktovat technickou podporu svého hostingu.

Z nevýhod této metody stojí za zmínku nekonzistence práce 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, takže byly odeslány přímo z vašeho webu.

Poštovní služba Gmail zobrazuje e-mailová data s otazníkem a popiskem: „Gmail nemohl potvrdit, že tento e-mail byl odeslán z domény VašeDoména. Může se jednat o spam.“

Abychom se této situaci vyhnuli .

SMTP (Simple Mail Transfer Protocol)

SMTP je protokol pro přenos pošty. Celkově je pro nastavení přenosu pošty pomocí tohoto protokolu vyžadován samotný server SMTP. Nejběžnějším způsobem použití podnikové (doménové) pošty yandex.ru jako serveru SMTP je https://pdd.yandex.ru/.

V první řadě potřebujete účet (mail) yandex, na základě kterých budou vytvořeny maily pro vaši doménu: " [e-mail chráněný] VašeDoména" " [e-mail chráněný] YourDomain"... Hlavní účet nebude nikde viditelný a slouží pouze k vytváření doménových mailů na jeho základě v budoucnu.

Po autorizaci je doménová pošta vytvořena ve vašem osobním účtu yandex pomocí odkazu https://pdd.yandex.ru/. Je to tato doménová pošta, kterou uživatelé uvidí v poli Odesílatel

Při odesílání e-mailů přes SMTP je pole „Odesílatel“ povinné. Používání SMTP jako odesílání e-mailů, spousta " Doména" - "e-mailem", takže dopisy jsou rozpoznávány poštovními službami.


Mezi nedostatky této metody stojí za zmínku nemožnost „načíst“ portrét doménové pošty, protože oni sami poštovní služby v současné době tuto funkci neposkytují.

Vzhledem k tomu, že zasílání anonymních zpráv z virtuálních hostingových serverů Windows je zakázáno, zasílání dopisů by mělo být prováděno prostřednictvím serveru SMTP, pro který je také možné využít náš poštovní systém.

Jak posílat e-maily pomocí PHP?

Použití jakékoli třídy PHP, která podporuje autorizaci na serveru smtp. Můžete například použít sadu tříd PHPMailer.

Můžete také použít náš příklad, který implementuje odesílání e-mailů pomocí smtp serveru, který vyžaduje autorizaci. Nezapomeňte proto do skriptu přidat příslušné přístupové údaje, například:

// Pokud potřebujete zobrazit protokol relace SMTP, můžete odkomentovat následující řádek. // $_SERVER["debug"] = true; function MailSmtp ($reciever , $subject , $content , $headers , $debug = 0 ) ( $smtp_server = "smtp.site" ; // Adresa serveru SMTP$smtp_port = 25 ; // Port serveru SMTP$smtp_user = " [e-mail chráněný]" ; // Uživatelské jméno pro autorizaci na serveru SMTP$smtp_password = "pAsSwORd" ; // Heslo pro autorizaci na serveru SMTP$mail_from = " [e-mail chráněný]" ; // Schránka, ze které je dopis odeslán$sock = fsockopen($smtp_server , $smtp_port , $errno , $errstr , 30 ); $str = fgets ($sock , 512 ); if (! $sock ) ( printf ("Socket není vytvořen\n" ); exit(1 ); ) smtp_msg ($sock , "HELO " . $_SERVER [ "NÁZEV_SERVERU" ]); smtp_msg($sock , "AUTH LOGIN"); smtp_msg ($sock , base64_encode ($smtp_user )); smtp_msg ($sock , base64_encode ($smtp_password )); smtp_msg($sock , "MAIL OD:<" . $mail_from . ">" ); smtp_msg ($sock , "RCPT TO:<" . $reciever . ">" ); smtp_msg ($sock , "DATA" ); $headers = "Předmět: " . $předmět . "\r\n" . $headers ; $data = $headers . "\r\n\r\n" . $content . "\r\n." ; smtp_msg ($sock , $data ); smtp_msg ($sock , "QUIT" ); fclose ($sock ); ) funkce smtp_msg ($sock , $msg ) ( if ( ! $sock ) ( printf ("Rozbitá zásuvka!\n" ); exit(1 ); ) if (isset($_SERVER [ "ladit" ]) && $_SERVER [ "ladit" ]) ( printf ("Odeslat od nás :%s
" , nl2br (htmlspecialchars ($msg ))); ) fputs ($sock , " $msg \r\n" ); $str = fgets ($sock , 512 ); if (! $sock ) ( printf ("Zásuvka je mimo\n" ); exit(1); ) else ( if (isset($_SERVER [ "ladit" ]) && $_SERVER [ "ladit" ]) ( printf ("Dostal jsem ze serveru: %s
" , nl2br (htmlspecialchars ($str ))); ) $e = explode (" " , $str ); $code = array_shift ($e ); $str = implode (" ", $e); if ($code > 499 ) ( printf ( "Problémy s konverzací SMTP.

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

Stáhněte si příklad hotového skriptu s funkcí MailSmtp(): smtpauth.php.sample

K přímému nahrazení funkce mail() můžete použít funkci MailSmtp() popsanou výše, zvažte příklad nejjednoduššího formuláře v PHP:

// Hlavičky zpráv, definují kódování zprávy, pole Od, Komu atd.$headers = "MIME verze: 1.0\r\n" ; $headers .= "Typ obsahu: text/html; charset=windows-1251\r\n"; $headers .= "Komu: $to \r\n" ; $headers .= "Od: Jméno odesílatele " ; // mail ($to, $předmět, $zpráva, $hlavičky); require_once "smtpauth.php" ; MailSmtp ($to , $předmět , $zpráva , $záhlaví); ) ?>
Komu: Téma: Text: 
 
 

Aby tento formulář fungoval bez funkce mail(), zahrnuli jsme soubor smtpauth.php přes require_once a zavolali v něm popsanou funkci MailSmtp() s argumenty podobnými mail(). Zároveň jsme v kódu okomentovali samotné volání mail(), abychom předešli chybě při spouštění skriptu.

Jak posílat e-maily pomocí ASP.NET?

Pokud používáte verzi 2.0, použijte třídu MailMessage System.Net.Mail), dobře popsané.

Níže jsou uvedeny příklady jeho použití pro jazyky „C#“ a „VisualBasic“:

Příklad pro jazyk "C#":

<% @Page Language="c#" %> <% @Import Namespace="System.Net.Mail" %> <% @Import Namespace="System.Net" %> <% MailMessage message = new MailMessage(); // vytvořit nové písmeno message.To.Add(" [e-mail chráněný]"); // přidání adresy příjemce message.From = new MailAddress(" [e-mail chráněný]doména.tld", "Jméno odesílatele"); // s uvedením jména a adresy odesílatele message.Subject = "Předmět"; // uvedení předmětu dopisu message.BodyEncoding = System.Text.Encoding.UTF8; // určení kódování písmen message.IsBodyHtml = false; // určení formátu písmen (true - HTML, false - ne HTML) message.Body = "Tělo zprávy"; // určení textu (těla) dopisu Klient SmtpClient = new SmtpClient("smtp.site",25); // vytvoření nového připojení k serveru "smtp.site". client.DeliveryMethod = SmtpDeliveryMethod.Network; // definuje metodu odesílání zpráv client.EnableSsl = false; // zakáže potřebu používat zabezpečené připojení k serveru client.UseDefaultCredentials = false; // zakázat použití podrobností o autorizaci "ve výchozím nastavení" client.Credentials = new NetworkCredential(" [e-mail chráněný]doména.tld", "***Heslo***"); // zadání požadovaných údajů (uživatelské jméno a heslo) pro autorizaci na SMTP serveru klient.Odeslat(zprava); // poslat zprávu %>

Stáhněte si příklad hotového formuláře, který demonstruje použití této metody: MailForm.aspx .

Příklad jazyka „VisualBasic“:

<% @Page Language="VB" Debug="true" %> <% @Import Namespace="System.Net.Mail" %> <% @Import Namespace="System.Net" %> <% Dim smtpMssg AS new MailMessage smtpMssg.From = New MailAddress ("[e-mail chráněný]doména.tld", "SenderName") smtpMssg.To.Add(" [e-mail chráněný]") " Přidejte adresu příjemce smtpMssg.Subject = "Předmět" “ s uvedením předmětu dopisu smtpMssg.Body = "Tělo zprávy" “ s uvedením textu (těla) dopisu smtpMssg.BodyEncoding = System.Text.Encoding.UTF8 “označující kódování písmene smtpMssg.IsBodyHtml = false " označení formátu písmene (true - HTML, false - ne HTML) Dim SmtpMail as New SmtpClient("smtp.site", 25) " deklarace nového objektu typu "SmtpClient" SmtpMail.DeliveryMethod = SmtpDeliveryMethod.Network “ určující způsob doručení zprávy SmtpMail.UseDefaultCredentials = False " zakázat používání podrobností o autorizaci "ve výchozím nastavení" SmtpMail.EnableSsl = False "vypíná potřebu používat zabezpečené připojení k serveru SmtpMail.Credentials = new NetworkCredential(" [e-mail chráněný]doména.tld", "***Heslo***") " s uvedením nezbytných údajů (uživatelské jméno a heslo) pro autorizaci na serveru SMTP SmtpMail.Send(smtpMssg) "odeslání zprávy %>

Existuje také zastaralá (a zastaralá) třída SmtpMail (používá jmenný prostor System.Web.Mail). Níže je uveden příklad jeho použití pro jazyk „VisualBasic“:

<% @Page Language="VB" Debug="true" %> <% @Import Namespace="System.Web" %> <% @Import Namespace="System.Web.Mail" %> <% Dim smtpMssg = new MailMessage " deklarování nového objektu typu "MailMessage" smtpMssg.From = "Jméno odesílatele doména.tld>" “ s uvedením jména a adresy odesílatele smtpMssg.to=" [e-mail chráněný]doména.tld" “ s uvedením adresy příjemce smtpMssg.BodyFormat = MailFormat.Text “ s uvedením formátu dopisu smtpMssg.BodyEncoding = Kódování.UTF8 “označující kódování písmene smtpMssg.Subject = "Předmět" “ s uvedením předmětu dopisu smtpMssg.Body = "Tělo zprávy" “ s uvedením textu dopisu smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",1) "určující potřebu autorizace SMTP na serveru smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", " [e-mail chráněný]doména.tld") "přihlašovací uživatelské jméno smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "***heslo***") "přihlašovací heslo SmtpMail.SmtpServer = "smtp.site" "zadejte adresu serveru SMTP SmtpMail.Send(smtpMssg) "odeslání zprávy %>

Jak odesílat e-maily pomocí ASP?

Vezměte prosím na vědomí, že při používání našeho smtp serveru je vyžadována autorizace, takže nezapomeňte do skriptu přidat příslušné přístupové údaje, například:

<% iConfig = Server.CreateObject("CDO.Configuration") Set iConfig = Server.CreateObject("CDO.Configuration") With iConfig.Fields .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.сайт" .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 .Item("http://schemas.microsoft.com/cdo/configuration/languagecode") = "ru" .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[e-mail chráněný]doména.tld" .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password" .Update End With Set cdoMessage = CreateObject("CDO.Message") S cdoMessage Set .Configuration = iConfig .From = "Test uživatele doména.tld>" .To = "Uživatel " .Subject = "Dobrý den, uživateli" .TextBody = "Tuto zprávu píšu ze skriptu ASP." .Send End With Set cdoMessage = Nic Nastavit iConfig = Nic %>

Některé CMS již mají vestavěné nástroje pro odesílání korespondence nebo odpovídající moduly, uvažujme nejoblíbenější z nich.

Wordpress

Pro tento CMS existuje speciální modul „WP Mail SMTP“, příklad jeho konfigurace je popsán na stránce modulu.

Věnujte pozornost ilustraci v příkladu, v podmínkách našeho poštovního systému je vyžadován port 25 a není vyžadováno šifrování SSL.

Joomla

V administračním panelu přejděte do sekce „Obecná nastavení“, vyberte kartu „Server“. V poli „ Mail“ musíte vybrat způsob odesílání jako „ Server SMTP“, V ​​polích „ Adresa serveru SMTP „A“ Přihlášení SMTP „A“ Heslo SMTP „Zadejte příslušné údaje o poštovním systému, například: smtp.site, mailbox@vaše_doména a odpovídající Heslo.

Drupal

Tento CMS má také vlastní modul pro práci se SMTP serverem, založený na PHPmailer. Tento modul si můžete stáhnout na jeho stránce na webu CMS Drupal, popis instalace modulu je k dispozici v archivu s ním.

NetCat

Tento CMS nemá vestavěné funkce pro práci se serverem SMTP. Chcete-li posílat poštu pomocí skriptů webu, můžeme nabídnout použití našeho řešení, k jeho připojení musíte provést následující kroky:

  • Stáhněte si z našich webových stránek archiv s potřebnými soubory ( send_auth_mail.php a mail.inc.php) a rozbalte jej v počítači;
  • Upravit soubor send_auth_mail.php z archivu zadáním podrobností o připojení k požadovanému serveru SMTP v něm:

    • $mail_smtpServer = "smtp.site"; (adresa serveru SMTP)
    • $mail_port = "25" ; (připojovací port)
    • $mail_username = "[e-mail chráněný]" ; (uživatelské jméno pro autorizaci na serveru SMTP)
    • $mail_password = "Heslo"; (heslo pro autorizaci na SMTP serveru)
  • Vytvořte zálohu souboru domain.tld/www/netcat/admin/mail.inc.php;
  • stahovat soubory send_auth_mail.php a mail.inc.php na virtuální web do adresáře doména.tld/www/netcat/admin/

doména.tld by měl být nahrazen názvem vaší domény.

Navržené řešení funguje se všemi moduly NetCat, které pro odesílání pošty využívají standardní funkce tohoto CMS.

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 pro přenos e-mailů přes sítě TCP/IP. A všechny populární poštovní služby mají takové protokoly.

S příchodem lokálních serverů není potřeba vybírat poskytovatele hostingu, aby bylo možné kontrolovat výkon jednotlivých skriptů nebo CMS systémů, a ještě více za to platit. Je mnohem snazší vše vyzkoušet na počítači a pak můžete všem ukázat, co jste „udělali“.

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

Chcete-li zkontrolovat výkon takové pošty, potřebujete naprosté minimum:

  • Openserver můžete použít jako lokální server.
  • A jednoduchý skript, jehož šablonu si můžete vzít níže.
  • Lze 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 poštovní zpráva odeslána.
předmět - předmět dopisu
zpráva - samotná zpráva nebo tělo dopisu.

Příklad mého skriptu:

Samozřejmě můžete funkcionalitu trochu rozšířit a přimět skript, aby vydal zprávu o odesílání pošty. I když ve skutečnosti je to server SMTP, který odesílá, a skript pouze tvoří zprávu.

Můžete psát například takto:

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 opensrver.

Pošta bude odeslána na jakoukoli adresu, která bude uvedena ve skriptu namísto hodnoty 'na' , ale tento e-mail zpracuje a odešle SMTP, který bude zadán v nastavení openserveru.

  1. Spuštění serveru
  2. Otevřete modul openserver s nastavením v nabídce "pošta".
  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 Yandex.

Nastavení uložíme a po restartu serveru se můžete podívat na samotný skript. Ze složky „My Sites“ otevřete složku „send“, která obsahuje dříve uložený skript index.php.

Jakmile je tento skript vyvolán, v novém okně prohlížeče se zobrazí informace, že skript fungoval.

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í, pak není něco správně nakonfigurováno nebo dopis skončil ve složce se spamem.

Všechna ostatní nastavení vypadají podobně, ale pro každý případ by neuškodily další informace.

Chcete-li nastavit odesílání pošty přes SMTP mail ru, stačí nahradit nastavení Yandex nastavením mail ru.

A abyste nemuseli pokaždé znovu budovat místní server, je nejlepší nastavit různé profily openserveru. Jak to udělat, je ukázáno ve video tutoriálu.

V tomto případě bude stačit pouze načíst profil a všechna nastavení, která byla pro tento profil zadána, budou dostupná po restartu serveru. Velmi šikovný a velmi snadno ovladatelný.

Pro každý profil (vůbec nezáleží na tom, jak se bude jmenovat) je třeba provést jeho vlastní nastavení, pokud se samozřejmě neplánuje používat skripty, cms-systémy a aplikace, které se liší svý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 pošty ru

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

Chcete-li nastavit odesílání pošty přes Google SMTP, měli byste to trochu zkusit.

Za prvé, vytvoření samotného profilu v Google je obtížnější než v jiných systémech Yandex a mail ru.
Za druhé, systém e-mail jen tak nepustí, i když zadáte své přihlašovací údaje. Pro začátek pošle dopis, ve kterém budou všechny potřebné informace o dalších pokynech.

Pokud jde o zbytek pro Google je nakonfigurován stejným způsobem. Všechny údaje se mění.

Pro nastavení 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.

PHPMailer je velmi šikovná a oblíbená knihovna pro odesílání e-mailových zpráv z vašich stránek. 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 si od práce s poštou můžete přát: odesílání různými způsoby, přes různé servery, vč. přes smtp, možnost šifrovat a podepisovat vaše dopisy, aby nepadaly do spamu a mnoho dalšího.

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

Pro začátek rozeberu pár jednoduchých příkladů, aby bylo jasné, jak posílat emaily pomocí PHPMaileru.

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

Pokud chcete posílat dopisy z vašeho hostingu přes váš 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řit e-mail $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 e-mailu // text html zprávy $mail->msgHTML("

Ahoj!

Toto je testovací e-mail.

"); // Odeslat if ($mail->send()) ( echo "Mail odeslán!"; ) 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 vaší domény (pokud nejsou propojeny s jinými odesílateli).

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

Dopis můžete poslat také prostřednictvím jiného odesílatele, například přes 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řit e-mail $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 testovací e-mail.

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

Odesílání e-mailů přes Google má jednu výhradu: potřebujete účet Google 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řejít na zabezpečení, přejít do části „Nedůvěryhodné aplikace, které mají přístup k vašemu účtu“ a tam se přepnout 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í smtp spouštíte poprvé, je vhodné jej dodatečně použít $mail->SMTPDebug = 1; přijímat všechny zprávy 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ň demonstruji několik dalších funkcí:

// Zahrnout knihovnu PHPMailer use PHPMailer\PHPMailer\PHPMailer; použijte PHPMailer\PHPMailer\Exception; vyžadovat "PHPMailer/PHPMailer.php"; vyžadovat "PHPMailer/Exception.php"; // Vytvořit e-mail $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 = "Dopis ve formátu prostého textu"; // e-mail v prostém textu, pokud klient nepodporuje html $mail->addAttachment("my_file.txt"); // připojte jeden soubor $ mail->addAttachment("phpmailer .jpg"); // připojit druhý soubor // Odeslat if ($mail->send()) ( echo "Mail odeslán!"; ) 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 vymazat všechny adresy příjemců pomocí clearAddresses(). Všechny přílohy můžete vymazat pomocí clearAttachments().

Můžete také použít Přidat vložený obrázek přidat k e-mailu přílohu (obvykle obrázek), která je určena k použití v html kódu a nebude k dispozici 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řit mail $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

"; // Odesílání $mail->send();

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

Odesílání podepsané a šifrované pošty přes PHPMailer

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

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

Na podepište dopis podpisem DKIM, musíte udělat několik věcí:

  • Generujte soukromé (soukromé) a veřejné (veřejné) klíče pro vaši doménu
  • Přidejte záznam DNS pro doménu typu TXT s veřejným klíčem
  • Před odesláním pošty nastavte 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 pouze 2 příkazy s obvyklými právy vašeho uživatele:

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 jsou 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 (soukromých) a veřejných (veřejných) klíčů a jejich uložení do souborů můžete použít následující kód:

$domain = "test.com"; // vaše doména $privatekeyfile = "test-private.pem"; // název souboru, kam se bude zapisovat soukromý klíč $publickeyfile = "test-public.pem"; // název souboru, kam 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 =(_květy openkeyspKub $privatepk, $privatyp); ); $publickey = $pubKey["klíč"]; file_put_contents($publickeyfile, $publickey); $privatekey = file_get_contents($privatekeyfile); ) echo "

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

" .$privatekey ."
"; echo"

veřejný klíč:

" .$publickey ."
";

Pozornost! Nezapomeňte se ujistit, že do složky, kam budou soubory uloženy, lze zapisovat.

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

DNS záznam je potřeba, aby poštovní servery, které budou přijímat vaše e-maily, mohly ověřit podpis na e-mailu přečtením DNS záznamu vaší domény. DNS záznam lze zpravidla přidat do ovládacího panelu vaší domény nebo do ovládacího panelu hostingu. Pokud nevíte, jak přidat záznam, kontaktujte podporu svého poskytovatele hostingu.

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

Název záznamu: mail._domainkey.test.ru. (na konci tečka ".")

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

Typ záznamu: TXT

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

V názvu položky test.ru by měl 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- -- --“, jen samotný klíč. V tomto případě všechny řádky klíče potřebují zřetězit do jedné dlouhé řady aby nebyly žádné nové řádky.

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

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

// Zahrnout knihovnu use PHPMailer\PHPMailer\PHPMailer; vyžadovat "PHPMailer/PHPMailer.php"; // Vytvořit e-mail $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("

Tohle je zkouška

"); // Nastavení podpisu DKIM $mail->DKIM_domain = "test.ru"; $mail->DKIM_private = "test-private.pem"; $mail->DKIM_selector = "mail"; // Odeslání $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 podepsány podpisem DKIM vašeho soukromého klíče.