Odesílání e-mailů
Chystáte se odesílat e-maily, například newslettery nebo potvrzení objednávek? Nette Framework poskytuje potřebné nástroje s velmi příjemným API. Ukážeme si:
- jak e-mail vytvořit včetně příloh
- jak ho odeslat
- jak spojit e-maily a šablony
Instalace
Knihovnu stáhnete a nainstalujete pomocí nástroje Composer:
Vytvoření e-mailu
E-mail je objektem třídy Nette\Mail\Message. Vytvoříme jej třeba takto:
Všechny zadávané parametry musí být v UTF-8.
Kromě uvedení příjemce metodou addTo()
lze uvést i příjemce kopie addCc()
, nebo příjemce
skryté kopie addBcc()
. Ve všech těchto metodách včetně setFrom()
můžeme adresáta zapsat třemi
způsoby:
Tělo e-mailu zapsaného v HTML se předává metodou setHtmlBody()
:
Textovou alternativu nemusíte vytvářet, Nette ji vygeneruje automaticky za vás. A pokud e-mail nemá nastavený subjekt,
pokusí se jej převzít z elementu <title>
.
Do HTML těla lze také neobyčejně snadno vkládat obrázky. Stačí jako druhý parametr předat cestu, kde se obrázky fyzicky nacházejí, a Nette je automaticky zahrne do e-mailu:
Algoritmus vkládající obrázky vyhledává tyto vzory: <img src=...>
,
<body background=...>
, url(...)
uvnitř HTML atributu style
a speciální syntaxi
[[...]]
.
Může být odesílání e-mailů ještě jednodušší?
E-mail je něco jako pohlednice. Nikdy e-mailem neposílejte hesla ani jiné přístupové údaje.
Přílohy
Do e-mailu lze samozřejmě vkládat přílohy. Slouží k tomu metoda
addAttachment(string $file, ?string $content = null, ?string $contentType = null)
.
Šablony
Pokud posíláte HTML e-maily, přímo se nabízí je zapisovat v šablonovacím systému Latte. Jak na to?
Soubor email.latte
:
Nette automaticky vloží všechny obrázky, nastaví subject podle elementu <title>
a vygeneruje textovou
alternativu k HTML.
Použití v Nette Application
Pokud e-maily používáte společeně s Nette Application, tj. s presentery, můžete chtít v šablonách vytvářet
odkazy pomocí atributu n:href
nebo značky {link}
. Ty Latte v základu nezná, ale je velmi snadné je
doplnit. Vytvářet odkazy umí objekt Nette\Application\LinkGenerator
, ke kterému se dostanete tak, že si jej
necháte předat pomocí dependency injection:
V šabloně potom vytváříme odkazy tak, jak jsme zvyklí. Všechny odkazy vytvořene přes LinkGenerator budou absolutní.
Odeslání e-mailu
Mailer je třída zajišťující odesílání e-mailů. Implementuje rozhraní Nette\Mail\Mailer a k dispozici je několik předpřipravených mailerů, které si představíme.
Framework automaticky přidává do DI kontejneru službu typu Nette\Mail\Mailer
sestavenou na základě konfigurace, a ke které se dostanete tak, že si ji necháte předat pomocí dependency injection.
SendmailMailer
Výchozí mailer je SendmailMailer, který používá PHP funkci mail. Příklad použití:
Pokud chcete nastavit returnPath
a server vám ho pořád přepisuje, použijte
$mailer->commandArgs = '-fMuj@email.cz'
.
SmtpMailer
K odeslání pošty přes SMTP server slouží SmtpMailer
.
Konstruktoru lze předat tyto další parametry:
port
– pokud není nastaven, použije se výchozí 25 nebo 465 prossl
timeout
– timeout pro SMTP spojenípersistent
– použít persistent spojeníclientHost
– nastavení hlavičky Host klientastreamOptions
– umožňuje nastavit SSL context options pro spojení
FallbackMailer
E-maily přímo neodesílá, ale odesílání zprostředkovává přes sadu mailerů. V případě, že jeden mailer selže, zopakuje pokus u dalšího. Pokud selže i poslední, začíná znovu od prvního.
Jako další parametry v konstruktoru můžeme uvést počet opakování a čekací dobu v milisekundách.
DKIM
DKIM (DomainKeys Identified Mail) je technologie pro zvýšení důvěryhodnosti e-mailů, která také napomáhá odhalení podvržených zpráv. Odeslaná zpráva je podepsána privátním klíčem domény odesílatele a tento podpis je uložen v hlavičce e-mailu. Server příjemce porovná tento podpis s veřejným klíčem uloženým v DNS záznamech domény. Tím, že podpis odpovídá, je prokázáno, že e-mail skutečně pochází z odesílatelovy domény a že během přenosu zprávy nedošlo k její úpravě.
Podepisování e-mailů můžete maileru nastavit přímo v konfiguraci. Pokud nepoužíváte dependency injection, používá se tímto způsobem:
Konfigurace
Přehled konfiguračních voleb pro Nette Mail. Pokud nepoužívate celý framework, ale jen tuto knihovnu, přečtěte si, jak konfiguraci načíst.
Pro odesílání e-mailů se standardně používá mailer Nette\Mail\SendmailMailer
, který se dále
nekonfiguruje. Můžeme jej však přepnout na Nette\Mail\SmtpMailer
:
Pomocí volby context › ssl › verify_peer: false
lze vypnout ověřování SSL certifikátů. Důrazně
nedoporučujeme tohle dělat, protože se aplikace stane zranitelnou. Místo toho přidejte certifikáty do uložiště.
Pro zvýšení důvěryhodnosti můžeme e-maily podpisovat pomocí technologie DKIM:
Služby DI
Tyto služby se přidávají do DI kontejneru:
Název | Typ | Popis |
---|---|---|
mail.mailer |
Nette\Mail\Mailer | třída odesílající e-maily |
mail.signer |
Nette\Mail\Signer | DKIM podepisování |