SendGrid–odesílání a přijímání e-mailů v Azure Web Apps

Rozesílání e-mailů řeší většina webových aplikací. Microsoft Azure v základu neobsahuje vlastní službu, která by tuto funkci poskytla, ale je umí se velmi jednoduše napojit na externího poskytovatele – službu SendGrid. Co to znamená a proč je to výhodné, popisuje Jan Hájek ( TheNetw.org s.r.o. ).


Pokud jste do Azure Web Apps nasazovali vlastní aplikaci, která ke svému chodu vyžaduje odesílání e-mailů (typicky WordPress a registrace nových uživatelů) – zjistili jste, že něco není správně – e-maily vám nikdy nedorazí. Jde o to, že v rámci samotného Azure neexistuje možnost pro odesílání e-mailů. Prakticky se vám však nabízí několik možných scénářů pro řešení:

  • Zahostovat si vlastní e-mailový server
  • Napojit webovou aplikaci na Office 365 nebo jiné e-mailové řešení
  • Využít řešení třetí strany dostupné a podporované v rámci Azure – SendGrid

Co je SendGrid a k čemu je vlastně dobrý?

SendGrid je cloudová SMTP služba, která umožňuje odesílat maily ať už tradičním způsobem přes protokol SMTP, nebo pomocí REST API. Hlavní výhodou je, že nemusíte řešit správu ani údržbu e-mailových serverů.

sendgrid_azure

V základě má dvě funkce: odesílání „transakčních“ e-mailů a odesílání marketingových e-mailů. Také disponuje velmi dobře vybaveným online editorem, ve kterém můžete velmi jednoduše vytvářet působivé marketingové e-maily.

Z pokročilých funkcí stojí za zmínku možnost odesílat e-maily přes API pomocí šablony – nadefinujete na webu šablony, textové oblasti, které se mají pomocí API callu vyplnit, a hotovo. SendGrid se stará dokonce i o to, aby byl e-mail čitelný napříč různými klienty, a také se snaží snížit pravděpodobnost, že e-mail bude označen jako spam.

V neposlední řadě je z pohledu vývojáře důležité zmínit funkci, kterou můžeme pojmenovat jako „SMTP2HTTP“ (neboli inbound e-mail, parse API). Z názvu vyplývá, že SendGrid také umí řešit příchozí maily – nemusíte tak ani spravovat server pro příchozí poštu, a díky tomu vám odpadne poměrně hodně administračních úkonů.

Výhody oproti ostatním možnostem řešení pro odesílání e-mailů z Azure

Výhody oproti vlastnímu provozování e-mailového serveru jsou jasné – nemusíte řešit aktualizace systému, softwaru, který řeší samotné e-maily a složitě dohledávat chyby v logu aplikace. Přehled všech e-mailů (odeslaných i přijatých) máte tak dostupný na jednom místě – v dashboardu.

Kdybyste chtěli využít existující e-mailové řešení, např. Office 365 nebo jinou konkurenční službu, mohli byste narazit na limity pro odesílání zpráv. Je také potřeba zmínit, že tyto služby nejsou určené pro rozesílání velkého objemu e-mailových zpráv.

Kolik to stojí a jak to získám?

Pokud nevyužíváte Azure, můžete si účet vytvořit na SendGrid.com a začít odesílat e-maily. V základní verzi, která je zdarma, získáte možnost odeslat 12 000 e-mailů za měsíc (nebo 400 e-mailů denně). Placené plány najdete zde. Pokud však využíváte Azure, můžete si účet vytvořit pomocí Azure Marketplace a získat tak mnohem výhodnější ceny (díky partnerství s Microsoftem). Za zmínku stojí, že ve free plánu získáte možnost odesílat 25 000 e-mailových zpráv měsíčně.

Pro více informací, jak si zřídit účet na SendGridu pomocí Azure Marketplace, najdete v tomto článku.

Integrace s vašimi aplikacemi

SendGrid je možné integrovat buď pomocí existujících knihoven, nebo můžete využít REST API a vytvořit si knihovnu vlastní. Pokud máte nějakou uzavřenou aplikaci nebo nechcete trávit čas přepisováním vaší aplikace, můžete využít i odesílání přes protokol SMTP, takže na SendGrid připojíte většinu již existujících aplikací. Přehled všech možných způsobů integrace najdete zde. Pro větší pravděpodobnost, že vaše zprávy budou doručeny, můžete v DNS nastavit SPF a DKIM záznamy (např. Seznam.cz oznámil , že bude vyžadovat platný DKIM podpis e-mailu, jinak bude pošta zařazena do spamu).

Pro integraci s příchozí poštou stačí nastavit MX záznamy a endpoint, na který bude e-mail ve formě HTTP požadavku předán.

Využití SendGridu v praxi

A jak jsme na SendGrid narazili? Řešili jsme poměrně komplexní problém – aplikace v Node.js, která běží v Microsoft Azure ve VM (WS2012R2 pro techies), a velmi zjednodušeně řečeno zajišťuje rozesílání e-mailů uživatelům z jejich aliasů. Nicméně když došlo na to, že se měl rozeslat hromadný e-mail (400+ uživatelů, z toho asi 30 % u jednoho českého poskytovatele), náš e-mail server byl zablokován (z důvodu velkého množství odeslaných zpráv). Z určitých důvodů každému uživateli posíláme zvlášť e-mail, a tak došlo k tomu, že náš e-mailový server daný poskytovatel zablokoval (vůbec se ho nesnažíme hanit, naprosto chápeme reakci na počet příchozích zpráv atd.). Nicméně řešit nějaké throttlování e-mailů na aplikační straně by nebylo opět vzhledem k potřebné funkcionalitě služby možné – tehdy jsme narazili na SendGrid.

Během pár minut jsem byla aplikace plně funkční přes SMTP API SendGridu a e-mailové zprávy chodily jak po másle. Nicméně když jsme objevili i Parse API (inbound mail), rozhodli jsme se aplikaci upravit a přesunout ji kompletně do Azure Web Apps. Nyní běží kompletně v Azure Web Apps využívá Parse API pro příchozí e-mail (SMTP2HTTP) a REST API (s využitím existujích knihoven pro Node.js) pro odchozí poštu.


Martin