TeamQuest Blog

Dlaczego źle walidujesz adresy e-mail?

Dlaczego źle walidujesz adresy e-mail?

Marcin Sarna , 07.06.2021 r.

Czyli między innymi o tym, że adres e-mail może mieć więcej niż jedną”@”.

Nie wróżka a specyfikacja prawdę Ci powie

Myślałeś, że proste jest weryfikować czy to co użytkownik wpisał w formularzu to faktycznie adres e-mail skoro powstało na ten temat tyle porad czy gotowych wzorców regex? Nic bardziej mylnego.

Jak wygląda adres e-mail? Mamy nazwę użytkownika, po której następuje znak @, po którym następuje nazwa domeny i gotowe. Na przykład: office@teamquest.pl. Niestety, okazuje się, że nie jest to takie proste. Aby naprawdę zrozumieć, co jest ważne (nawet jeśli niekoniecznie jest to powszechnie akceptowane), a co nieważne (nawet jeśli być może nadal jest akceptowane przez niektóre serwery pocztowe), musimy oczywiście wrócić do specyfikacji RFC.

Adresy e-mail mogą zawierać wiele znaków „@”

Podczas próby zweryfikowania adresu e-mail większość ludzi sugeruje się tym, że możemy podzielić adres na dwie części rozdzielone „małpką”. Ale jest coś takiego jak RFC1711 Service Routing. Tak więc dziwny, ale prawidłowy adres e-mail to na przykład: @rekrutacja.pierwszy,@rekrutacja.drugi:office@teamquest.pl. Fun fact: o tym, że to jest prawdziwy e-mail nie wie nawet Word, który nie przerobił mi tego zapisu na hiperłącze podczas pisania artykułu.

Prawdopodobnie następny rekruter jaki się z nami skontaktuje nie poda nam takiego dziwoląga a i niewiele serwerów pocztowych będzie go honorować ale popularne publiczne usługi pocztowe i MTA akceptują te adresy i po prostu dostarczą wiadomość na adres office@teamquest.pl.

Można używać wykrzyknika po lewej stronie od znaku „@”

Tak, rekrutujemy.it!zawsze@teamquest.pl jest prawidłowym adresem e-mail. Tymczasem niektóre implementacje serwera pocztowego interpretując to jako próbę przekazania poczty i wiadomość może zostać odrzucona: 554 5.7.1 <teamquest.pl!jakis_adres@jakisserwer.pl>: Relay access denied.

Podobnie sprawy się mają ze znakiem „%”. Jest on jak najbardziej „legalny” po lewej stronie od małpki ale na przykład Postfix zaprotestuje przez 501 5.1.3 Bad recipient address any other % constructs.

Dozwolone są różne znaki interpunkcyjne

Wykrzykniki i procenty to nie jedyne znaki dozwolone przez RFC5321, o których zapominają nawet doświadczeni admini. BNF w RFC5321 / RFC5322 dopuszcza jeden lub więcej znaków a-zA-Z0-9!#$%&'*+/=?^_`{|}~-. Tak tak, to też jest prawidłowy adres: '*+-/=?^_`{|}~#$@teamquest.pl. Word znowu uważa inaczej…

Znaki plus nie są specjalne, chyba że są

Jak pokazuje poprzedni przykład, znak + to tylko kolejny zwykły znak, jeśli chodzi o to co uważa o nim RFC5321. Jednak niektóre usługi pocztowe zdecydowały się nadać mu specjalne znaczenie i traktują wszystkie trzy poniższe adresy jako takie same:

office@teamquest.pl
office+backend@teamquest.pl
offce+frontend@teamquest.pl

Na przykład Gmail traktuje to jako „adresowanie dodatkowe”.

Kropki są wyjątkowe

Taaak, kropki są wyjątkowe. Nawet jeśli Gmail zdecydował się je zignorować i traktować taki adres jak office@teamquest.pl jako identyczny z o.f.f.i.c.e.@teamquest.pl. Ale kropki są wyjątkowe: nie możesz rozpoczynać ani kończyć części przed „@” od kropki ani też nie możesz mieć dwóch kolejnych kropek. Nieprawidłowe adresy e-mail to więc na przykład:

.office@teamquest.pl
office.@teamquest.pl
off..ice@teamquest.pl

Najnowsze oferty pracy:

Polecane wpisy na blogu IT:

Szukasz pracownika IT?

Dostarczymy Ci najlepszych specjalistów z branży IT. Wyślij zapytanie

Wyrażam zgodę TeamQuest Sp. z o.o. na przetwarzanie moich danych osobowych w celu marketingu produktów i usług własnych TeamQuest, w tym na kontaktowanie się ze mną w formie połączenia telefonicznego lub środkami elektronicznymi.
Administratorem podanych przez Ciebie danych osobowych jest TeamQuest Sp. z o.o., z siedzibą w Warszawie (00-814), ul. Miedziana 3a/21, zwana dalej „Administratorem".
Jeśli masz jakiekolwiek pytania odnośnie przetwarzania przez nas Twoich danych, skontaktuj się z naszym Inspektorem Ochrony Danych (IOD). Do Twojej dyspozycji jest pod adresem e-mail: office@teamquest.pl.
W jakim celu i na jakiej podstawie będziemy wykorzystywać Twoje dane? Dowiedz się więcej