Nepoškozujte reputaci svého e-mailu při automatických rozesílkách

[gtranslate]

Potvrzení registrace, faktura, obnova hesla, notifikace z formuláře. Váš web rozesílá e-maily nepřetržitě a bez vašeho přičinění, a každá jedna z těchto zpráv přitom buduje, nebo naopak poškozuje reputaci vaší domény u Gmailu, Outlooku a dalších velkých příjemců. Právě automatické rozesílky jsou nejčastější místo, kde reputace tiše krvácí: běží samy, nikdo je nekontroluje a chyba v nastavení se násobí každou odeslanou zprávou. V tomto článku si ukážeme, jak jednomu z nejčastějších problémů předejít vlastním DKIM podpisem, který si nasadíte sami během půl hodiny.

Reputaci domény píše každá odeslaná zpráva

Velcí poskytovatelé schránek si o každé odesílající doméně vedou skóre: kolik pošty posílá, jak často ji příjemci označují za spam, a hlavně jak spolehlivě je ověřená. Doména, jejíž zprávy pravidelně přicházejí správně podepsané a zarovnané, si buduje historii důvěryhodného odesílatele. Doména, jejíž pošta chodí neověřená nebo se ověření rozpadá cestou, žádnou historii nebuduje, a v horším případě sbírá negativní signály. U transakčních e-mailů je to dvojnásob citlivé: potvrzení objednávky nebo obnovu hesla zákazník potřebuje hned, a když skončí ve spamu, píše vám naštvaný na podporu.

O tom, jestli se zpráva počítá vaší doméně k dobru, rozhoduje trojice SPF, DKIM a DMARC. A tady je klíčové slovo zarovnání (alignment): DMARC vyžaduje, aby ověření prošlo pro stejnou doménu, jakou máte v adrese odesílatele (hlavička From). Ověření cizí domény je technicky platné, ale vaší doméně reputaci nestaví.

Háček sdíleného hostingu

Sdílený webhosting odesílá poštu přes společný mailserver a ten zprávy podepisuje sdíleným klíčem, tedy doménou poskytovatele, ne vaší. Z pohledu DKIM je vše validní, jenže podpis není zarovnaný s vaší doménou ve From. Kredit za poctivě odeslanou poštu tak nesbírá vaše doména a její DMARC vyhodnocení stojí čistě na SPF.

A SPF má známou slabinu: nepřežije přeposlání. Jakmile si příjemce nechává poštu forwardovat (firemní alias, stará schránka přesměrovaná na novou), SPF kontrola u finálního serveru selže, protože zpráva už nepřichází z původní IP adresy. Bez zarovnaného DKIM podpisu tím padá celé DMARC, zpráva míří do spamu a vaše doména si připisuje další neúspěšné doručení. Zarovnaný DKIM podpis naproti tomu cestuje uvnitř zprávy a přeposlání v drtivé většině případů přežije.

Řešení je přímočaré: podepisovat zprávy vlastním klíčem a vlastní doménou přímo v aplikaci, která e-mail sestavuje. Sdílený server pak přidá ještě svůj podpis, ale to vůbec nevadí. Zpráva smí nést podpisů více a příjemce si pro DMARC vybere ten, který je zarovnaný s vaší doménou.

Krok 1: Vygenerujte si pár klíčů

Potřebujete privátní klíč (zůstane u vás na hostingu) a veřejný klíč (půjde do DNS). Vygenerujete je jedním nástrojem, který je dnes všude: OpenSSL. Na Linuxu a macOS ho máte v terminálu, na Windows je součástí Git Bash. Doporučená délka je 2048 bitů.

openssl genrsa -out dkim_private.pem 2048
openssl rsa -in dkim_private.pem -pubout -out dkim_public.pem

Privátní klíč nahrajte na hosting mimo veřejný webroot (tedy ne do složky, kam vede web, ideálně o úroveň výš) a nastavte mu co nejpřísnější práva. Kdo získá privátní klíč, může podepisovat poštu vaším jménem.

Krok 2: Veřejný klíč do DNS

Veřejný klíč zveřejníte jako TXT záznam na jméně ve tvaru selektor._domainkey.vasedomena.cz. Selektor je libovolný identifikátor klíče, který si zvolíte, například web2026. Díky selektorům můžete mít klíčů více vedle sebe a v budoucnu je bez výpadku měnit. Obsah záznamu je veřejný klíč bez hlaviček BEGIN/END a bez zalomení řádků:

web2026._domainkey.vasedomena.cz.  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC...zbytek klíče...IDAQAB"

Záznam přidáte v administraci DNS své domény stejně jako jakýkoliv jiný TXT záznam (postup najdete v návodu DNS – Záznamy domény). Nový záznam se propíše během několika minut, poté si ho ověřte:

dig TXT web2026._domainkey.vasedomena.cz +short

Krok 3: Podepisujte v aplikaci

Teď zbývá říct aplikaci, aby odchozí poštu podepisovala. Pokud používáte PHPMailer (dnes de facto standard pro odesílání pošty z PHP), má podporu DKIM vestavěnou a stačí čtyři řádky:

$mail = new PHPMailer(true);

// ... běžné nastavení From, adresátů, obsahu ...

$mail->DKIM_domain   = 'vasedomena.cz';
$mail->DKIM_selector = 'web2026';
$mail->DKIM_private  = '/cesta/mimo/webroot/dkim_private.pem';
$mail->DKIM_identity = $mail->From;

$mail->send();

Ve WordPressu nemusíte zasahovat do žádného pluginu. WordPress posílá veškerou poštu přes PHPMailer a nabízí háček phpmailer_init, kterým podpis zapnete globálně pro celý web, od notifikací po formuláře. Následující kód vložte do souboru functions.php vašeho (child) motivu nebo do malého vlastního pluginu:

add_action('phpmailer_init', function ($phpmailer) {
    $phpmailer->DKIM_domain   = 'vasedomena.cz';
    $phpmailer->DKIM_selector = 'web2026';
    $phpmailer->DKIM_private  = '/cesta/mimo/webroot/dkim_private.pem';
    $phpmailer->DKIM_identity = $phpmailer->From;
});

Jediná podmínka: adresa ve From musí být na doméně, pro kterou jste klíč zveřejnili. Podepisovat vasedomena.cz a odesílat z gmail.com nedává smysl a zarovnání nevznikne.

Ověření, že to funguje

Pošlete si testovací zprávu do Gmailu a otevřete Zobrazit originál (Show original). V přehledu nahoře by mělo svítit DKIM: PASS s vaší doménou a pod tím zpravidla i druhý podpis sdíleného serveru, což je v pořádku. V hlavičkách zprávy uvidíte řádek Authentication-Results, kde hledáte dkim=pass a u DMARC zarovnání s vaší doménou. Rychlou celkovou kontrolu odesílání (SPF, DKIM, DMARC i obsah) uděláte přes službu mail-tester.com: pošlete zprávu na vygenerovanou adresu a dostanete přehledné hodnocení.

Zpozorněte, když se vrací mailer-daemon

Vrácená zpráva od mailer-daemon (nedoručenka) není šum, který stačí smazat. Je to nejčasnější varovný signál, že s vaším odesíláním něco není v pořádku, a u automatických rozesílek často jediný, protože si jich jinak nikdo nevšimne. Otevřete ji a přečtěte si důvod odmítnutí: kód 550 s hláškou o neexistující schránce znamená mrtvou adresu v databázi, zmínka o spamu, politice nebo autentizaci ukazuje na problém s SPF, DKIM či DMARC, který je potřeba řešit hned.

Hlavně to aktivně řešte, nepřehlížejte to. Opakované odesílání na neexistující adresy je jeden z nejsilnějších negativních signálů, jaké o sobě doména může vyslat, takže adresy, které se trvale vracejí, z rozesílek vyřazujte. A protože automatické systémy často odesílají z adresy, kterou nikdo nečte, ověřte si, že se nedoručenky vracejí do schránky, kterou někdo skutečně sleduje. Ignorovaná chyba v automatické rozesílce se opakuje s každou další zprávou a reputaci domény ukrajuje potichu, ale vytrvale.

Pár tipů na závěr

Podpis nastavte tak, aby jeho případné selhání neshodilo odesílání: pokud klíč chybí nebo se podpis nepovede, je lepší poslat zprávu nepodepsanou než neposlat vůbec. Privátní klíč držte důsledně mimo webroot a nikdy ho nevkládejte do veřejného repozitáře. Selektor pojmenujte tak, aby nesl rok nebo verzi (web2026), rotace klíče je pak jen otázka vygenerování nového páru, přidání druhého TXT záznamu a přepnutí selektoru v aplikaci, starý záznam smažete až po pár týdnech. A pokud máte na doméně publikovanou DMARC politiku s reportingem, po nasazení vlastního podpisu uvidíte v reportech sami, jak se zarovnání zlepšilo.

Shrnuto: automatické rozesílky jsou vizitka vaší domény a její reputace se píše každou jednotlivou zprávou, kterou váš web odešle. Vlastní DKIM klíč, jeden TXT záznam a pár řádků v aplikaci zajistí, že se každé potvrzení registrace, faktura i notifikace počítá vaší doméně k dobru, přežije přeposlání a spolehlivě dorazí tam, kam má.