• 7. září 2022

Jak debugovat renderování emailů v Djangu

Každá webová aplikace posílá emaily. I když má Django velice sofistikovaný systém na posílání emailů, který vám spousty věcí ulehčí, tak stejně vy jako programátor musíte nakódovat HTML šablonu a poslat do šablony správná data, která se mají vyrenderovat. Vše musíte samozřejmě před nasazením na produkci otestovat, protože zvlášť v případě emailů může být HTML dost problematické. Každý emailový klient zobrazuje HTML po svém, v emailu je nutné použít inline CSS styly, nefunguje Javascript, všechny odkazy musí mít absolutní adresy a další odlišnosti od renderování klasické webové stránky.

V případě odesílání emailů narážíte na problém, že na localhostu neprovozujete SMTP server potřebný k odeslání emailu. Každého napadne posílat emaily skrze svůj běžný emailový účet, aby si otestoval, co potřebuje. Toto řešení je celkem nevhodné z několika důvodů:

  1. Někteří emailový provideři (Google) vyžadují vyšší stupeň zabezpečení komunikace a nedovolí vám klasickou SMTP AUTH autentifikaci.
  2. Pokud budete posílat "špatné" emaily, tak vám ve výsledku nemusí dorazit vůbec, protože budou blokované Antispam filtry a dalšími mechanismy.
  3. Bude se vám blbě testovat generování emailů pro různé uživatele, protože budete muset mít pro každého uživatele svojí emailovou adresu.

Pro testování emailů používejte na localhostu filebased EMAIL BACKEND.

  1. Nastavte Filebased EMAIL_BACKEND v nastavení vašeho projektu a nechte emaily generovat do složky v rámci projektu.
EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = os.path.join(BASE_DIR, "temp", "emails")

2. Odešlete email.

from django.core.mail import send_mail

send_mail(
    'Subject here',
    'Here is the message.',
    'from@example.com',
    ['to@example.com'],
    fail_silently=False,
)

3. Přejděte do složky, kde se generují emaily.

cd BASE_DIR/temp/emails/

4. změňte koncovku souboru, který se vám vygeneroval

mv 2022090410344444.log 2022090410344444.eml

5. otevřete daný soubor pomocí emailového klienta např. Thunderbird nebo Evolution

Nyní máte naprosto stejný pohled na email jako kdyby jste jej odeslali přes SMTP.

career

Zajímá tě debugování?

Mrkni se, jestli by ses nám nehodil.