Php odesílání pošty přes Yandex smtp. Odesílání pošty přes SMTP z lokálního serveru

Domov / Instalace programů

PHPMailer je velmi pohodlná a oblíbená knihovna pro odeslání e-mailu zprávy 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.

Aby měl určitý web možnost pracovat efektivně a produktivně, mělo by se k jeho tvorbě přistupovat co nejzodpovědněji a nejpečlivěji. Zvláštní pozornost si zaslouží výběr systému, který bude použit k vytvoření internetového obchodu. Faktem je, že komerční platforma specializovaná na prodej zboží nebo služeb musí umožňovat implementaci veškeré potřebné funkcionality a být snadno použitelná, a to jak pro správce podílející se na údržbě a plnění stránek, tak pro klienty internetových obchodů. Mnoho lidí a firem, kteří stojí před otázkou výběru vhodného CMS pro sebe, analyzuje, zda zvolit Magento nebo OkayCMS. Porovnejme vlastnosti a možnosti těchto webových motorů.

Při práci na vlastním webu bude muset člověk nebo firma vynaložit velké úsilí – pouze v tomto případě můžete počítat s pozitivní výsledky a získat skutečně účinný nástroj. Jednou ze zásadních otázek, kterou je nutné vyřešit ještě před zahájením tvorby webu, bude, jak se rozhodnout pro nejvhodnější variantu CMS. Dále porovnáme dva CMS: Joomla nebo OkayCMS a věnujeme pozornost funkcím každého z nich.

Mít vlastní webové stránky je jedním ze základních požadavků pro efektivní a úspěšně fungující podnikání. Statistiky jasně ukazují nárůst počtu nákupů různého zboží a objednávek služeb přes internet. Když to vezmeme v úvahu, většina komerčních společností si již uvědomuje nutnost mít vlastní webové stránky. Pouhá skutečnost, že máme internetový zdroj, však nestačí k tomu, abychom mohli počítat s jeho efektivitou, ziskovostí a očekávanými obchodními přínosy.

Při přípravě na vytvoření vlastního webu nebo otevření internetového obchodu musíte vzít v úvahu a analyzovat mnoho problémů a také řešit různé problémy. Pouze v tomto případě můžete počítat s tím, že váš projekt přinese pozitivní výsledky a dokáže plně naplnit vaše očekávání. Mezi různými problémy souvisejícími s rozvojem internetového obchodu si zvláštní pozornost zaslouží otázka výběru CMS. Abychom vám usnadnili rozhodování o optimálním motoru pro vás

Při plánování vytvoření vlastního webu pro budoucí internetový obchod stojí poměrně velké množství lidí a dokonce i společností specializujících se na prodej před nelehkou a nesmírně důležitou volbou: který ze stávajících CMS zvolit. Pokud přemýšlíte, co si vybrat: PrestaShop nebo OkayCMS, doporučujeme vám přečíst si tento článek, ve kterém porovnáme tyto dva systémy pro tvorbu internetových stránek, zejména internetových obchodů.

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 který se dnes podíváme na příkladu odeslání formuláře zpětná vazba. 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 adresu e-mail odesílatel;
  • "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 my tyto dopisy pošleme poštovní schránka 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

V PHP je docela populární používat skripty, které automatizují proces odesílání dopisů. V tomto článku se podíváme na jednoduchý skript, který odesílá dopisy příjemcům přes SMTP( Jednoduchý protokol pro přenos pošty ). Bylo by příliš snadné omezit se pouze na tuto funkci; skript také podporuje přílohy, to znamená, že k dopisu můžete připojit soubor pdf, txt nebo doc.

Nastavení skriptu je celkem jednoduché; potřebujete pouze přihlašovací jméno odesílatele a heslo k e-mailu, ze kterého budou dopisy odesílány.

Skript pracuje s třídou km_smtp_class.php, dobrá věc na třídě je, že podporuje různé protokoly SSL a TLS, které zajišťují bezpečný přenos dat.

Zde je samotný skript:

"smtp.mail.ru", "SMTP_port" => "25", "SMTP_email" => " [e-mail chráněný]", "SMTP_pass" => "1111111", "SMTP_type" => "null"); // E-mail příjemce $Receiver = " [e-mail chráněný]"; // Předmět zprávy $Subject = "Odesílání e-mailu z PHP"; // Text zprávy (v HTML) $Text = "Dobrý den!
Zpráva odeslaná ze skriptu Mowshon Web: http://site"; // Příloha v dopise - adresa k souboru $Attachment = ""; /* $mail = nový KM_Mailer(server, port, uživatel, heslo, typ); */ /* Typ může být: null, tls nebo ssl */ $mail = new KM_Mailer($SenderConfig["SMTP_server"], $SenderConfig["SMTP_port"], $SenderConfig["SMTP_email"], $SenderConfig["SMTP_pass"], $ SenderConfig[" SMTP_type"]] if($mail->isLogin) ( // Připojit soubor if($Attachment) ($mail->addAttachment($Attachment);) // Přidat další příjemce $mail->addRecipient(). " [e-mail chráněný]"); $mail->addRecipient(" [e-mail chráněný]"); /* $mail->send(Od, Pro, Předmět, Text, Předmět = volitelné) */ $SendMail = $mail->send($SenderConfig["SMTP_email"], $Receiver, $Předmět, $Text ); // Vymazat seznam příjemců $mail->clearBCC( $mail->clearAttachments( echo) "Při připojování k SMTP serveru";

Nastavení skriptu je založeno především na poli $SenderConfig, zde musíme zadat SMTP:server, port, login a heslo k emailu. Pojďme si popsat každý klíč pole:

SMTP_server – adresa SMTP serveru (individuální adresa pro různé e-maily)

Mail.ru mail: Port smtp.mail.ru: 25, 587 a 465 (se šifrováním SSL)

Yandex mail: Port smtp.yandex.ru: 25, 587 465 (port SSL)

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

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

(Pokud potřebujete adresu smtp serverů, které nejsou na seznamu, napište do komentářů)

SMTP_port - Již jsme to popsali výše pro každý smtp server.

SMTP_email - uživatel by byl přesnější, ale pro přehlednost jsem napsal email, uvádíme emailovou adresu.

SMTP_pass – Heslo pro e-mail, který byl zadán jako hodnota v klíči SMTP_email


SMTP_type - výchozí NULL. Protokol, podle kterého budou dopisy zasílány. Protokoly: SSL a TLS

K dopisu můžete přidat přílohy jednoduchým zadáním úplné adresy souboru v proměnné $Attachment (/var/patch/to/file/File.pdf)

Pokud máte nějaké dotazy, napište je do komentářů níže.

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 přes SMTP server, 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í dopisů 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; funkce 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 SMTP serveru$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);<" . $mail_from . ">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 FROM:<" . $reciever . ">" ); smtp_msg ($sock , "DATA" ); $headers = "Předmět: " . $předmět . "\r\n" . $headers ; $data = $headers . "\r\n\r\n" $obsah . "\r\n." "debug" ]) && $_SERVER [ "debug" ]) ( printf ( "Odeslat od nás: %s
" , nl2br (htmlspecialchars ($msg)); ) fputs ($sock, " $msg \r\n" ); $str = fgets ($sock, 512); if (! $sock) ( printf ( "Zásuvka je down\n" ); exit(1); ) else ( if (isset($_SERVER [ "ladit" ]) && $_SERVER [ "ladit" ]) ( printf ("Přijato 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: // Záhlaví zpráv, definují kódování zprávy, pole From, To 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: 
 
 

Text:

Poslat!

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ám při spouštění skriptu. Jak posílat e-maily pomocí ASP.NET? Pokud používáte verzi 2.0, pak pomocí třídy MailMessage

System.Net.Mail

), dobře popsané.

<% @Page Language="c#" %> <% @Import Namespace="System.Net.Mail" %> <% @Import Namespace="System.Net" %> <% MailMessage message = new MailMessage(); Níže jsou uvedeny příklady jeho použití pro jazyky C# a VisualBasic: Příklad pro jazyk C#: [e-mail chráněný]"); // vytvoření nového písmene message.To.Add(" // přidání adresy příjemce message.From = new MailAddress("from@ doména.tld", "Jméno_odesílatele"); // zadání jména a adresy odesílatele message.Subject = "Předmět zprávy"; // s uvedením předmětu dopisu message.BodyEncoding = System.Text.Encoding.UTF8; // určení kódování písmen message.Body = "Text 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 způsob odesílání zpráv client.EnableSsl = false; // zakáže potřebu používat zabezpečené připojení k serveru client.UseDefaultCredentials = false; // zakáže použití výchozích podrobností autorizace client.Credentials = new NetworkCredential("postmaster@ // přidání adresy příjemce", "***heslo***"); // zadání nezbytných údajů (uživatelské jméno a heslo) pro autorizaci na SMTP serveru klient.Odeslat(zprava); // odeslat zprávu %>

Stáhněte si příklad hotového formuláře demonstrující 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 ("admin@// přidání adresy příjemce", "Sender_name") smtpMssg.To.Add (" [e-mail chráněný]") “ přidání adresy příjemce smtpMssg.Subject = "Předmět e-mailu" „označení předmětu dopisu smtpMssg.Body = "Text zprávy" “ označení textu (těla) dopisu smtpMssg.BodyEncoding = System.Text.Encoding.UTF8 “ označení kódování písmen 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 „označení způsobu doručení dopisu SmtpMail.UseDefaultCredentials = False "ve výchozím nastavení zakázání použití autorizačních údajů" SmtpMail.EnableSsl = False " zakáže potřebu používat zabezpečené připojení k serveru SmtpMail.Credentials = new NetworkCredential("postmaster@ // přidání adresy příjemce", "***heslo***") "označující potřebné údaje (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 " deklarace nového objektu typu "MailMessage" smtpMssg.From = "Jméno_odesílatele // přidání adresy příjemce>" „Uvedení jména a adresy odesílatele smtpMssg.To = "admin@ // přidání adresy příjemce" “ uvedení adresy příjemce smtpMssg.BodyFormat = MailFormat.Text “ označení formátu dopisu smtpMssg.BodyEncoding = Kódování.UTF8 "označující kódování písmen smtpMssg.Subject = "Předmět e-mailu" „označení předmětu dopisu smtpMssg.Body = "Text zprávy" “ označení textu dopisu smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",1) "označující potřebu autorizace SMTP na serveru smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "admin@ // přidání adresy příjemce") "uživatelské jméno pro autorizaci smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "***heslo***") "heslo pro autorizaci SmtpMail.SmtpServer = "smtp.site" " s uvedením adresy serveru SMTP SmtpMail.Send(smtpMssg) “ odeslání zprávy %>

Jak posí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") = "postmaster@// přidání adresy příjemce" .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "heslo" .Update End With Set cdoMessage = CreateObject("CDO.Message") S cdoMessage Set .Configuration = iConfig .From = "Test uživatele // přidání adresy příjemce>" .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; pojďme se podívat na ty nejoblíbenější.

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 našem poštovním systému je nutné použít 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 „Pošta“ musíte vybrat způsob odesílání jako „SMTP server“, v polích „Adresa serveru SMTP“ a „Přihlášení k SMTP“ a „Heslo SMTP“ zadejte příslušné údaje o poštovním systému, například: smtp.site, box@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 dostupný v archivu s ním.

NetCat

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

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

    • $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áložní kopii souboru domain.tld/www/netcat/admin/mail.inc.php;
  • Nahrajte soubory send_auth_mail.php A mail.inc.php na virtuální web v adresáři doména.tld/www/netcat/admin/

// přidání adresy příjemce 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.

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