Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

PHPMailer

V minulej lekcii, Webový chat Tawk.to , sme sa pozreli na online službu chatu.

V tomto článku si predstavíme prácu s najpoužívanejšou knižnicou na rozosielanie emailov v PHP. Najprv si povieme, prečo PHPMailer používať. Potom si ukážeme, ako ho nainštalovať, nakonfigurujeme si fake SMTP server a zostavíme si funkčný skript na rozosielanie emailov.

PHPMailer

Ako už bolo povedané, PHPMailer je pravdepodobne najrozšírenejšia knižnica na posielanie emailov v PHP. Používa ju napríklad aj WordPress, na ktorom beží podľa oficiálnych stránok WordPressu 42% webov.

Prečo používať PHPMailer?

V čistom PHP existuje funkcia mail(), ktorá umožňuje emaily rozosielať. Prečo teda používať špeciálnu knižnicu? Dôvodov je naozaj veľa:
  1. PHPMailer podporuje SMTP servery
  2. PHPMailer podporuje pokročilé funkcie, ktoré email ponúka. Napríklad:- Rozosielanie kópií
    • Odpovede chodiace na iný email
    • Hromadné rozosielanie emailov
    • Obsah v HTML
    • Odosielanie príloh a mnoho ďalšieho
  3. PHPMailer overuje existenciu emailov
  4. Bezpečnosť - ochrana proti rôznym typom útokov (napríklad header injection)

Inštalácia

1) Inštalácia cez composer

Najľahšia je inštalácia cez nástroj composer, o ktorom nájdete viac v článku tu na ITNetwork. Pokiaľ teda máme composer, pridáme riadok: "phpmailer/phpmailer": "^6.5" do súboru composer.json. Druhou možnosťou je použitie príkazového riadka a spustenie príkazu: composer require phpmailer/phpmailer v koreňovom priečinku projektu.

2) Ručné stiahnutie

Pokiaľ z akéhokoľvek dôvodu nechcete používať composer (aj keď pri väčších projektoch sa bez neho aj tak pravdepodobne nezaobídete), dá sa knižnica stiahnuť aj ručne. Po kliknutí na odkaz sa vám stiahne zips zložka s PHPMailerom. Z nej skopírujte zložku PHPMailer-master a vložte ju do svojho projektu.

Začiatok súboru

Na začiatok súboru, pomocou ktorého budete odosielať maily potom pridajte nasledujúci kód:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;

V prípade, že používate composer pridajte tento riadok:

require 'vendor/autoload.php';

Ak ste si PHPMailer inštalovali ručne, pridajte nasledujúce riadky:

require 'PHPMailer-master/src/Exception.php';
require 'PHPMailer-master/src/PHPMailer.php';
require 'PHPMailer-master/src/SMTP.php';

Použitie PHPMailera

Prvý si do premennej $mail vytvoríme inštanciu PHPMaileru, ktoré odovzdáme hodnotu true, čo povoľuje výnimky. Potom nastavíme jazyk na slovenčinu pomocou metódy setLanguage() a zvolíme kódovanie UTF-8:
$mail = new PHPMailer(true);
$mail->setLanguage('cs', 'PHPMailer-master/language/');
$mail->CharSet = 'UTF-8';

Teraz nás čaká nastavenie SMTP servera. Keďže chceme funkcionalitu iba vyskúšať, použijeme fake SMTP server Mailtrap. Na stránke mailtrapu sa zaregistrujte. Po úspešnej registrácii sa dostanete na nasledujúcu stránku:

Mailtrap po registrácii - Php e-commerce

Kliknutím na ikonku Mailtrapu alebo na záložku Inboxes vľavo hore sa nám zobrazí stránka, na ktorej sú všetky naše projekty a inboxy:

Mailtrap stránka s projektmi a inboxmi - Php e-commerce

Vo verzii zadarmo máme k dispozícii iba 1 projekt a 1 inbox, ktorý nám Mailtrap už vytvoril. Po kliknutí na My Inbox sa vrátime opäť na pôvodnú stránku. Na tej si z ponuky pod nadpisom Integrations vyberieme možnosť CakePHP 3.7+:

Mailtrap nastavenia pre php - Php e-commerce

Teraz krásne vidíme hodnoty na nastavenie nášho Mailtrap servera. Celý nasledujúci kód budeme písať vo vnútri bloku try (až po funkcii catch()), aby sa nám prípadne zobrazovali errory:

try
{
    $mail->SMTPDebug = SMTP::DEBUG_SERVER; // Povolení debugovacího výstupu
    $mail->isSMTP();
    $mail->Host = 'smtp.mailtrap.io'; // Název hostujícího serveru
    $mail->SMTPAuth = true;
    $mail->Username = '7937fdfba8e61c'; // Jméno, které nám vygeneroval Mailtrap
    $mail->Password = 'd84f9c6c8f2081'; // Heslo, které nám vygeneroval Mailtrap
    $mail->SMTPSecure = 'tls';
    $mail->Port = 2525; // Port, který nám sdělil Mailtrap

Nastavením $mail->SMTPDebug povoľujeme debugovací výstup. Ten sa nám zobrazí do okna prehliadača, v ktorom skript pustíme a vyzerá celkom hrozivo. Ide však iba o komunikáciu medzi klientom a serverom. Tento riadok je nepovinný a po vyriešení problémov ho odstráňte. Do premenných $mail->Host, $mail->Username, $mail->Password a $mail->Port dosaďte vaše vlastné hodnoty z poľa, ktoré vám vygeneroval Mailtrap. V reálnom prostredí ich stačí iba nahradiť za hodnoty, ktoré vám poskytuje váš SMTP server.

Teraz už prejdeme k samotnému mailu. Prvé sa nastavujú odosielateľ a príjemcovia mailu a to pomocou nasledujúcich metód:

$mail->setFrom('[email protected]', 'Moje jméno');
$mail->addReplyTo('[email protected]', 'Jméno emailu');
$mail->addAddress('[email protected]', 'Příjemce');
$mail->addCC('[email protected]', 'Karel');
$mail->addBCC('[email protected]', 'Jana');

Metóda setFrom() nastaví emailovú adresu odosielateľa - tú, ktorú uvidí príjemcu mailu ako odosielateľa. Metóda addReplyTo() nastaví, na akú adresu sa bude odosielať prípadná odpoveď príjemcu. addAddress() nastavuje adresu príjemcu a môžete ju používať viackrát. addBCC() pridá príjemcu kópie, ktorý ale nevidí, komu všetkému bol email poslaný. addCC() robí to isté ako addBCC(), ale príjemcovia vidia, kto všetko email dostal. Druhý parameter u týchto metód je nepovinný a jedná sa o meno, ktoré môžete vidieť v maile.

Ďalej sa nastavujú prípadné prílohy:

$mail->addAttachment('dokument.docx');
$mail->addAttachment('obrazek.jpg', 'jmeno-obrazku.jpg');

Prílohy sú samozrejme dobrovoľné. Možnosť druhého parametra je tiež dobrovoľná a udáva meno, pod ktorým uvidí príjemcu prílohu.

Nakoniec sa pridá samotný obsah emailu, ktorý budeme mať v HTML:

    $mail->isHTML(true);
    $mail->Subject = 'Předmět emailu';
    $mail->Body    = '<h1>HTML nadpis</h1>
    <p>Toto je tělo zprávy <strong>tučné</strong></p>';
    $mail->AltBody = 'Toto se zobrazí, když email nepodporuje HTML';

    $mail->send();
    echo('Email byl odeslán');
}

Metóda isHTML() nastavuje formát emailu na HTML. Subject je atribút, ktorý nastavuje predmet emailu. V atribúte Body je telo emailu v html. Atribút AltBody je text, ktorý sa zobrazí, pokiaľ príjemca emailu nepodporuje HTML a metóda send() už len všetko odošle. Na koniec sme si pridali hlásenie, ktoré sa vypíše, pokiaľ všetko prebehne úspešne a email sa odošle. Teraz ešte musíme nastaviť, ako nakladať s errormi. To sa urobí pomocou funkcie catch():

} catch (Exception $e)
{
    echo("Zpráva nebyla odeslána. Error: " . $mail->ErrorInfo);
}

V prípade neúspechu z akéhokoľvek dôvodu sa nám zobrazí hlásenie a výpis atribútu ErrorInfo v slovenčine, ktorú sme si nastavili na začiatku.

Veľké množstvo emailov

V prípade, že by ste potrebovali rozosielať viac mailov, jednoducho si načítate emaily z databázy. Potom zo skriptu v tomto článku odstránite časť s adresami príjemcov a odosielací riadok na konci ($mail->send()). Príjemcu pridáme až na koniec za časť s obsahom. Načítame si ich postupne pomocou foreach cyklu. Mohlo by to vyzerať napríklad nasledovne:
foreach($emailyZDatabaze as $email)
{
     $mail->addAddress($email);
     $mail->send();
     $mail->ClearAddresses();
}

Skript vyššie funguje, ak chceme všetkým používateľom odoslať presne to isté. Pokiaľ potrebujeme pre každého užívateľa zmeniť obsah emailu, stačí do foreach cyklu pridať aj časť skriptu s obsahom. Napríklad môžete chcieť, aby skript odoslal každému užívateľovi email s jeho menom v predmete. Preto si z databázy načítame užívateľa do premennej $uzivatele, kde každý užívateľ je reprezentovaný asociatívnym poľom, ktoré má kľúče email a jmeno. Skript by potom mohol vyzerať napríklad takto:

$mail->isHTML(true);

foreach($uzivatele as $uzivatel)
{
$mail->Subject = 'Ahoj ' . $uzivatel['jmeno'];
$mail->Body    = 'tělo';
$mail->AltBody = 'text';

    $mail->addAddress($uzivatel['email'], $uzivatel['jmeno']);
    $mail->send();
    $mail->ClearAddresses();
}

V slovenčine bude síce email vyzerať ľahko krkolomne, ale o to v tomto článku nejde.

Záver

Výborne, teraz už viete pracovať s PHPMailerom a dokážete odosielať emaily, ako budete potrebovať.

V budúcej lekcii, Platobná brána GoPay - Predstavenie a registrácia , sa budeme venovať základom platobnej brány GoPay a prejdeme proces obchodnej časti implementácie brány.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 15x (128.86 kB)
Aplikácia je vrátane zdrojových kódov v jazyku PHP

 

Predchádzajúci článok
Webový chat Tawk.to
Všetky články v sekcii
Php e-commerce
Preskočiť článok
(neodporúčame)
Platobná brána GoPay - Predstavenie a registrácia
Článok pre vás napísal Jakub Kornel
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity