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 funkciamail()
, ktorá umožňuje emaily
rozosielať. Prečo teda používať špeciálnu knižnicu? Dôvodov je naozaj
veľa:
- PHPMailer podporuje SMTP servery
- 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
- PHPMailer overuje existenciu emailov
- 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žkuPHPMailer-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:
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:
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+
:
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é 16x (128.86 kB)
Aplikácia je vrátane zdrojových kódov v jazyku PHP