Pokud váš validační formulář odmítá adresy jako jmeno+tag@example.com,
porušujete internetový standard. Tato stránka vysvětluje proč, s odkazy na RFC
a ukázkami správné validace v PHP, Pythonu, JavaScriptu a Ruby.
user@example.com OKuser+newsletter@example.com OKfirst.last+work+2024@example.com OK
Co říká RFC 5322
Formát internetových zpráv (Internet Message Format) je definován dokumentem
RFC 5322, který nahrazuje starší RFC 2822 a RFC 822.
Relevantní části pro lokální část adresy (vše před znakem @) jsou
§ 3.2.3 Atom a § 3.4.1 Addr-Spec Specification.
§ 3.2.3
Atom
Definuje množinu povolených znaků zvanou atext
(atom-text). Jde o ASCII znaky mimo řídicí a speciální znaky.
Znak + je zde výslovně uveden jako povolený.
Rozšíření atomu: jeden nebo více atomů spojených tečkou. Právě
tvar dot-atom se typicky používá jako lokální část
adresy, takže smí obsahovat tečky, znak + i další
atext znaky v libovolné kombinaci.
Popisuje strukturu samotné adresy. Lokální část (local-part)
je buď dot-atom, nebo uvozovkami obalený quoted-string —
v obou případech smí obsahovat znak +.
Odmítání platných adres je chyba ve vašem systému, ne v adrese uživatele.
Dodržování RFC 5322 je minimum, které lze očekávat.
02
Sub-addressing
Gmail, Fastmail, iCloud a další poskytovatelé používají +
pro tzv. plus addressing — uživatel si může vytvořit štítky jako
jmeno+shop@gmail.com, které pomáhají filtrovat poštu
a odhalovat úniky.
03
Bezpečnost uživatele
Pokud uživatel použije jmeno+vase-sluzba@example.com
a dostává spam na tuto adresu, ví, že data unikla právě od vás.
Blokováním plusu tuto transparentnost bráníte.
04
Ztráta zákazníků
Uživatel, kterému formulář hlásí „neplatný e-mail" u jeho vlastní,
dlouhodobě fungující adresy, vás opustí — a nebude to jeho chyba.
05
Je to triviální
Všechny hlavní jazyky mají vestavěné nebo knihovní validátory,
které RFC respektují. Vlastní regulární výraz obvykle není třeba
a bývá zdrojem chyb.
06
Žádná bezpečnostní výhoda
Zákaz znaku + nechrání před SQL injection, XSS ani spamem.
Správná obrana je escapování, prepared statements a rate-limiting —
ne mrzačení standardu.
Správná validace v kódu
Používejte vestavěné validátory. Nevymýšlejte vlastní regulární výrazy —
RFC 5322 je natolik komplexní, že i známé „univerzální" regexy jsou
tisíce znaků dlouhé a stejně nepokrývají všechny okrajové případy.
Znak + je podle RFC 5322 § 3.2.3 a § 3.4.1 plnohodnotnou
součástí lokální části e-mailové adresy. Existuje přes čtyřicet let
a opírá se o něj řada užitečných funkcí. Odmítáním zhoršujete
uživatelský zážitek a prokazujete, že jste standard nečetli.
Nebuďte tím, kdo brání uživatelům použít vlastní e-mailovou adresu.