Jak použít aplikaci MailCatcher pro testování emailů

22. února 2024

Lang: cs en de es

Když vyvíjíte aplikaci, která odesílá emaily, typicky potřebujete otestovat, že email odešel. Také potřebujete zkontrolovat obsah emailu. K tomuto všemu výborně poslouží nástroj Mailcatcher, který emaily odchytí, takže máte jistotu, že při testech k reálným uživatelům nic nedojte a obsah si můžete jednoduše zkontrolovat na své počítači. Výborná vlastnost Mailcatcheru je, že si ho můžete jednoduše spustit pomocí dockeru.

Při vývoji a testovaní v webové aplikace chce plně otestovat proces odesílaní emailů a jejich obsah, ale narážíte na dva problémy:

  • nechcete zbytečně šířít přístupové údaje od email účtu
  • nechcete, aby emaily dorazili uživateli

Pokud budete chtít odesílat emaily standardním způsobem znamená to, že musíte nějak aplikaci nakonfigurovat, aby emaily odesílala přes váš mail server, což znamená, že každý vývojář bude mít přistup odesílat emaily přes váš mailserver.

Můžete situaci například řešit tak, že aplikaci upravíte, aby emaily neodcházeli. Sice tím nenastane situace, aby jste omylem uživatelům poslali testovací email a nepotřebujete mít pro vývoj přístup k mailserveru. Ale zase nevíte jestli odesílání emailů skutečně funguje. Také si pak těžko budete kontrolovat obsah emailu. Navíc je úplně zbytečné upravovat aplikaci.

Jednoduchým řešením takové situace je použít MailCatcher. Odesílání emailů nasměrujete na MailCatcher, který umí fungovat jako mailer pro příjem pošty. A z testované aplikace můžete všechno standardně odesílat bez změn. Přitom máte jistotu, že uživateli žádný email nedojde. Nemusíte sdílet přístupové údaje pro odesílaní emailů. A navíc si můžete obsah emailu jednoduše podrobně prohlédnout.

Já MailCatcher používám při vývoji webových aplikací. Ale můžete ho úplně stejně použít pří vývoji despotové aplikace, programování konzolové utility nebo jen testování nástroje co odesílá emaily.

Použití

MailCatcher postavíte jako mailserver k vaší aplikaci. Následně všechny odeslané emaily jsou k vidění ve webovém administračním rozhraní aplikace MailCatcher. V MailCatcheru je možno si zobrazit email v jeho HTML verzi , v tzv. "plain text" verzi a nebo si nechat zobrazit celý zdrojový kód emailu a podrobně se kouknout na hlavičky emailu.

Jak MailCatcher vypadá? Toto je zobrazení odchyceného emailu. Zobrazení HTML verze emailu:
mailcatcher text html

Zobrazení odchyceného emailu a jeho plain text verze:
mailcatcher plain text

Zobrazení zdrojového kódu odchyceného emailu:
mailcatcher mail source

Je možno i celý email stáhnout jako zdrojový soubor - soubor s příponou "eml".

Zprovoznění

MailCatcher si můžete rozběhnout jako docker kontainer.

Doplňte váš docker-compose.yml o následující řádky a při přišitím spuštění vašeho vývojového prostředí se stáhne a spustí MailCatcher.

mailcatcher:
  image: dockage/mailcatcher
  ports:
    - 1080:1080
Následně na adrese http://localhost:1080/ bude již dostupné webové administrační rozhraní aplikace MailCatcher.

Na portu 1025 naslouchá SMTP server, kam můžete posílat emaily z vaší aplikace.

Propojení s aplikací

Nyní je třeba nastavit vaši aplikaci, aby jako mailserver používala MailCatcher. Ukáži vám jak upravit konfiguraci pokud používáte PHP framework Nette nebo Symfony.

Symfony

Pokud používáte PHP framework Symfony verze 6 nebo 7 a Symfony mailer, tak stačí doplnil/upravit konfigurační soubor .env.local o řádek:

MAILER_DSN=smtp://mailcatcher:1025

Podrobněji viz Symfony mailer.

Nette

Pokud používáte PHP framework Nette by default se používá php funkce mail(), která většinou volá systémový příkaz sendmail. Proto je potřeba upravit konfiguraci, aby se používal SMTP protokol.

Pro odesílání pošty v Nette můžete použít třídu \Nette\Mail\SendmailMailer, která používá funkci mail(). Pro odesílání přes SMTP je třída \Nette\Mail\SmtpMailer.
V kódu aplikace však ideálně používejte interface \Nette\Mail\Mailer, kterou Nette připraví a nakonfiguruje dle zadané konfigurace. A tuto třídu si nechte předávat pomocí konstruktoru nebo injectovat do třídy .

Doplňte konfigurační neon soubor o následující konfiguraci:

mail:
	# použije SmtpMailer
	smtp: true       # (bool) výchozí je false
	host: mailcatcher
	port: 1025
Touto úpravou nastavíte, že se má používat SMPT protokol a parametry pro připojení na SMTP server. Následně při použití interface \Nette\Mail\Mailer vám Nette předá nakonfigurovanou třídu \Nette\Mail\SmtpMailer a můžete emaily rovnou odesílat.

Podrobněji viz Nette odesílání emailů a Nette konfigurace SMTP.

Video návod

Video návod jak zprovoznit a použít MailCatcher a začít ho používat u webové aplikace, která je naprogramovaná v PHP frameworku Symfony:

Jiná řešení

Jiná řešení, která mohou zajistit podobnou službu:

Doručení emailů

Odeslání emailů a doručení emailů jsou dvě odlišné, byť navazující akce, které jsou úspěšné pro fungování emailů. Pokud máte problém s doručováním email, že padají do SPAMu nebo nedorazí vůbec. Je potřeba udělat podrobnou analýzu doručitelnosti emailů a podle toho upravit konfiguraci vaší domény a mailserveru.

Potřebujete-li konzultaci nebo jinak pomoci s emaily, Nette nebo Symfony neváhejte mě kontaktovat.

Články na podobné téma

Python program na ovládání Dockeru pomocí API
Návod: Python OpenAI API
Vytvoření WebSocket webové aplikace a nastavení proxy
Řízení projektů: Agilní vývoj softwaru
Jak provozovat staré PHP aplikace
Co by měl umět dobrý programátor
Programovací jazyk Rust
NodeJS: vývoj, konfigurace serveru
Nette security bug CVE-2020-15227
Jak porovnat dvě stejné databáze?
REST API: API platform
Vlastní web a mail hosting se softwarem ISP Config
Programovní v SQL: PostgreSQL, MySQL/MariaDB
HTTPS: zabezpečený web
NoSQL databáze Mongo DB
Připojení k Microsoft SQL Serveru z Linuxu
Co je pracovní náplň programátora
Lokalizace aplikací v jazyce Python
Jaký mail a web hosting vybrat
How to make wireless low power Arduino
Digispark - Programujte mikrokontrolér Atmel ATtiny pomocí Arduino IDE
Program Roulette
Vývoj pro procesory ARM s Arduino IDE
Wireless low power Arduino
Pyradio - Python program for receive Internet radio with text user inteface
UPS monitor pro Android
Bezdrátový bateriově napájený WiFi teploměr
Jak programovat WiFi procesor ESP8266
Comparison IQRF vs Wireless Arduino
Jakou platformu zvolit pro eshop? Například Prestashop
Development kits and gateways for wireless platform IQRF

OpenStreetMap a GPS trasy v mapě na webu
Quickplay
Java program pro přehledné monitorování záložních zdrojů
Čipové kontaktní a bezkontaktní karty Java Card OpenPlatform
Otevřený chytrý telefon s Linuxem - Openmoko Neo FreeRunner
Vývoj pro bezdrátové moduly s procesorem PIC pod GNU/Linux - IQRF
Grafický program pro embeded/mobilní zařízení na vyhledávání dopravního spoje.
O programování a ruzné programy v jazyce Java, Python a dalších
Java program a applet Kalkulačka
Java program na výpočet kvadratické rovnice

Odběr novinek

Pokud máte zájem dostávat příležitostně na email novinky.
Můžete se vyplněním emailu registrovat k odběru novinek.


+