Přeskočit na obsah

SaaS posílá maily „jménem zákazníka" v From — DMARC fail a Gmail je tiše quarantinuje

import { Aside } from ‘@astrojs/starlight/components’;

API endpoint pro odeslání dokladu vrací sent: true s messageId, SMTP server loguje úspěšné předání (status=sent, 250 2.0.0 OK), fronta je prázdná — ale příjemcům na Gmail/Google Workspace mail nikdy nedorazí (ani do spamu u Workspace, admin quarantine). Žádný bounce se nevrací.

Klíčová stopa je až v postfix logu v textu odpovědi Googlu:

status=sent (250 2.0.0 OK DMARC:Quarantine 17841... - gsmtp)

DMARC:Quarantine v gsmtp odpovědi = zpráva neprošla DMARC a byla přijata jen do karantény.

Aplikace chtěla „white-label” odesílání — faktura má vypadat, že ji poslala firma zákazníka. Endpoint proto stavěl hlavičku From z e-mailu organizace:

// ŠPATNĚ — From na doméně zákazníka
await sendEmail({
to,
...,
from: company?.email ? `${companyName} <${company.email}>` : undefined,
});

Jenže:

  • SMTP envelope-from zůstal na platformní schránce (noreply@example.com) → SPF se vyhodnocuje pro doménu platformy, ne pro doménu z From → žádný SPF alignment.
  • DKIM (rspamd, use_domain = "envelope") podepisuje d=platforma.exampležádný DKIM alignment s From doménou zákazníka.
  • DMARC příjemce se vyhodnocuje vždy proti doméně v hlavičce From. Doména zákazníka měla p=quarantine → Google mail přijal (250 OK!) a tiše zahodil do karantény.

Zákeřné: druhý, interně používaný endpoint stejné aplikace posílal správně (From platformní + Reply-To zákazníka), takže „maily fungují” — rozbité byly jen cesty, které předávaly from explicitně (public API + cron s připomínkami).

Identita zákazníka jde do display name a Reply-To, From zůstává na doméně, kterou infrastruktura podepisuje:

// SPRÁVNĚ — From platformní, zákazník v display name + Reply-To
await sendEmail({
to,
...,
fromName: companyName, // "Firma s.r.o." <noreply@example.com>
replyTo: company?.email || undefined, // odpověď jde zákazníkovi
});

Plus regresní test, že sendEmail nikdy nedostane from s cizí doménou.

Ověření po nasazení: poslat testovací mail na Gmail a v postfix logu zkontrolovat, že odpověď je čisté 250 2.0.0 OK bez DMARC:Quarantine.

Jak se tomu vyvarovat v jiných systémech

Sekce “Jak se tomu vyvarovat v jiných systémech”
  • Detection: grep na from: / From: skládané z uživatelských/tenant dat (company.email, user.email, org.email). V postfix logu grep DMARC — Google důvod přibaluje přímo do 250 odpovědi.
  • Anti-pattern: mail helper s volitelným from parametrem, který callerům dovolí přepsat doménu odesílatele. Helper má přijímat jen fromName + replyTo.
  • Lepší přístup: pokud je white-label From tvrdý požadavek, je to per-doména onboarding: zákazník musí delegovat DKIM (CNAME selektor) a povolit odesílací server v SPF své domény — jinak From na jeho doméně nejde legálně poslat.
  • Pozor: 250 OK od příjemce ≠ doručeno do inboxu. Gmail/Workspace umí přijmout a tiše quarantinovat.

Sister bugs / související

Sekce “Sister bugs / související”
Přidal aiarchitekt.cz · 16. 7. 2026 2:00
Provozuje aiarchitekt.cz