Nie pytam o pełną weryfikację adresu e-mail.
Chcę tylko wiedzieć, w jakie znaki są dozwolone user-name
i jakie server
części adresu e-mail. Może to być zbyt uproszczone, może adresy e-mail mogą przybierać inne formy, ale mnie to nie obchodzi. Pytam tylko o tę prostą formę: user-name@server
(np. [email protected]) i dozwolone znaki w obu częściach.
forms
email
email-validation
email-address
WildWezyr
źródło
źródło
+
Jest dozwolone. Doprowadza mnie to do szału, gdy strony internetowe na to nie pozwalają, ponieważ mój e-mail ma+
w sobie taką zawartość, a wiele stron na to nie pozwala."hello world"@example.com
jest ważny.Odpowiedzi:
Patrz RFC 5322: Internetowy format wiadomości oraz, w mniejszym stopniu, RFC 5321: Simple Mail Transfer Protocol .
RFC 822 obejmuje również adresy e-mail, ale zajmuje się głównie jego strukturą:
I jak zwykle Wikipedia ma porządny artykuł na temat adresów e-mail :
Oprócz znaków ASCII od 2012 r. Można używać znaków międzynarodowych powyżej
U+007F
, zakodowanych jako UTF-8, jak opisano w specyfikacji RFC 6532 i wyjaśniono na Wikipedii . Należy pamiętać, że od 2019 r. Standardy te są nadal oznaczone jako Proponowane, ale są wdrażane powoli. Zmiany w tym konkretnym dodaniu znaków międzynarodowych jako prawidłowych znaków alfanumerycznych (atext) bez wpływu na zasady dotyczące dozwolonych i ograniczonych znaków specjalnych, takich jak!#
i@:
.Aby sprawdzić poprawność, zobacz Używanie wyrażenia regularnego do sprawdzania poprawności adresu e-mail .
domain
Część jest określona w następujący sposób :źródło
[email protected]
nie jest prawidłowym adresem e-mail, ale[email protected]
jest, mimo że oba używają tych samych znaków.Uważaj! W tym wątku jest zgnilizna wiedzy (rzeczy, które kiedyś były prawdziwe, a teraz nie są).
Aby uniknąć fałszywie pozytywnych odrzuceń rzeczywistych adresów e-mail w obecnym i przyszłym świecie oraz z dowolnego miejsca na świecie, musisz znać przynajmniej ogólną koncepcję RFC 3490 „Internacjonalizacja nazw domen w aplikacjach (IDNA)”. Wiem, że ludzie w USA i A często tego nie lubią, ale jest to już szeroko rozpowszechnione i szybko rośnie na całym świecie (głównie części zdominowane przez język angielski).
Chodzi o to, że możesz teraz używać adresów takich jak mason @ 日本 .com i wildwezyr@fahrvergnügen.net. Nie, nie jest to jeszcze zgodne ze wszystkim, co istnieje (jak wielu lamentowało powyżej, nawet proste adresy w stylu qmail + identyfikatory są często błędnie odrzucane). Ale jest RFC, jest specyfikacja, jest teraz wspierany przez IETF i ICANN, a - co ważniejsze - istnieje duża i wciąż rosnąca liczba wdrożeń wspierających to ulepszenie, które są obecnie w użyciu.
Sam nie wiedziałem wiele o tym rozwoju, dopóki nie wróciłem do Japonii i nie zobaczyłem adresów e-mail takich jak hei @ や る .ca i adresów URL Amazon:
http://www.amazon.co.jp/ エ レ ク ト ロ ニ ク ク デ - デ ジ タ ル カ メ ラ - ポ ー タ ブ ル オ ー デ デ ィ オ / b / ref = topnav_storetab_e? ie = UTF8 & node = 3210981
Wiem, że nie chcesz linków do specyfikacji, ale jeśli polegasz wyłącznie na przestarzałej wiedzy hakerów na forach internetowych, Twój weryfikator wiadomości e-mail ostatecznie odrzuci adresy e-mail, których użytkownicy nieanglojęzyczni coraz częściej oczekują pracy. Dla tych użytkowników taka walidacja będzie tak samo denerwująca, jak powszechna, martwa mózg forma, której wszyscy nienawidzimy, ta, która nie może poradzić sobie z + lub trzyczęściową nazwą domeny lub czymkolwiek innym.
Nie mówię więc, że to nie jest kłopot, ale pełna lista znaków „dozwolona pod pewnymi / dowolnymi / żadnymi warunkami” to (prawie) wszystkie znaki we wszystkich językach. Jeśli chcesz „zaakceptować wszystkie prawidłowe adresy e-mail (a także wiele niepoprawnych)”, musisz wziąć pod uwagę IDN, co w zasadzie czyni podejście oparte na znakach bezużyteczne (przepraszam), chyba że najpierw przekształcisz międzynarodowe adresy e-mail na Punycode .
Po wykonaniu tej czynności możesz postępować zgodnie z (większością) powyższych rad.
źródło
Format adresu e-mail to:
local-part@domain-part
(maks. 64 @ 255 znaków, w sumie nie więcej niż 256).local-part
Idomain-part
może mieć inny zestaw dozwolonych znaków, ale to nie wszystko, ponieważ istnieje więcej zasad do niego.Zasadniczo część lokalna może mieć następujące znaki ASCII:
abcdefghijklmnopqrstuvwxyz
,ABCDEFGHIJKLMNOPQRSTUVWXYZ
,0123456789
,!#$%&'*+-/=?^_`{|}~
,.
(nie pierwszy lub ostatni znak lub powtarzany, chyba że jest cytowany),"(),:;<>@[\]
(z pewnymi ograniczeniami),()
(są dozwolone w nawiasach, np(comment)[email protected]
.).Część domeny:
abcdefghijklmnopqrstuvwxyz
,ABCDEFGHIJKLMNOPQRSTUVWXYZ
,0123456789
,-
(nie pierwszy lub ostatni znak),jsmith@[192.168.2.1]
lubjsmith@[IPv6:2001:db8::1]
.Te adresy e-mail są prawidłowe:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
(jednoliterowa część lokalna)"much.more unusual"@example.com
"[email protected]"@example.com
"very.(),:;<>[]\".VERY.\"very@\ \"very\".unusual"@strange.example.com
[email protected]
admin@mailserver1
(nazwa domeny lokalnej bez domeny najwyższego poziomu)#!$%&'*+-/=?^_`{}|[email protected]
"()<>[]:,;@\\"!#$%&'-/=?^_`{}| ~.a"@example.org
" "@example.org
(odstęp między cytatami)example@localhost
(wysłane z localhost)[email protected]
(patrz Lista internetowych domen najwyższego poziomu )user@com
user@localserver
user@[IPv6:2001:db8::1]
A te przykłady nieważności:
Abc.example.com
(bez@
postaci)A@b@[email protected]
(tylko jeden@
znak jest dozwolony poza cudzysłowem)a"b(c)d,e:f;gi[j\k][email protected]
(żaden ze znaków specjalnych w tej lokalnej części nie jest dozwolony poza cudzysłowami)just"not"[email protected]
(ciągi cytowane muszą być oddzielone kropkami lub jedynym elementem tworzącym część lokalną)this is"not\[email protected]
(spacje, cytaty i ukośniki odwrotne mogą istnieć tylko wtedy, gdy zawierają ciągi cudzysłowione i są poprzedzone ukośnikiem odwrotnym)this\ still\"not\[email protected]
(nawet jeśli jest to znak ucieczki (poprzedzony odwrotnym ukośnikiem), spacje, cytaty i odwrotne ukośniki muszą być nadal zawarte w cudzysłowach)[email protected]
(podwójna kropka przed@
); (z zastrzeżeniem: Gmail przepuszcza to)[email protected]
(podwójna kropka po@
)Źródło: adres e-mail z Wikipedii
Wyrażenie regularne RFC2822 Perla do sprawdzania poprawności wiadomości e-mail:
Zobacz także: Parser adresów e-mail RFC 822 w PHP .
Formalne definicje adresów e-mail znajdują się w:
Związane z:
źródło
[email protected]
i nazwij go dzień.Wikipedia ma dobry artykuł na ten temat , a oficjalna specyfikacja jest tutaj . Z Wikipdii:
źródło
Google robi ciekawą rzecz ze swoimi adresami gmail.com. Adresy gmail.com dopuszczają tylko litery (az), cyfry i kropki (które są ignorowane).
np. [email protected] jest taki sam jak [email protected], a oba adresy e-mail zostaną wysłane na tę samą skrzynkę pocztową. [email protected] jest również dostarczany do tej samej skrzynki pocztowej.
Tak więc, aby odpowiedzieć na pytanie, czasami zależy od implementatora, ile standardów RFC chcą przestrzegać. Styl adresu gmail.com firmy Google jest zgodny ze standardami. Robią to w ten sposób, aby uniknąć nieporozumień, gdy różne osoby wybierają podobne adresy e-mail, np
Link do wikipedii jest dobrym źródłem informacji o tym, na co ogólnie pozwalają adresy e-mail. http://en.wikipedia.org/wiki/Email_address
źródło
{john'doe}@my.server
bez problemu możesz wysyłać i odbierać wiadomości e-mail . Testowane również z serwerem hMail.{piotr'kula}@kula.solutions
- jeśli zadziała, otrzymasz od niego ładną automatyczną odpowiedź. W przeciwnym razie nic się nie wydarzy.Możesz zacząć od artykułu na Wikipedii :
źródło
Imię:
Serwer:
źródło
<>
i[]
? Np."()<>[]:,;@\\\"!#$%&'-/=?^_
{} | ~ .a "@ example.org`?Sprawdź @ i. a następnie wyślij im wiadomość e-mail w celu weryfikacji.
Nadal nie mogę używać mojego adresu e-mail .name w 20% witryn w Internecie, ponieważ ktoś spieprzył swoją weryfikację adresu e-mail lub ponieważ poprzedza to, że nowe adresy są prawidłowe.
źródło
Krótka odpowiedź jest taka, że są 2 odpowiedzi. Jest jeden standard tego, co powinieneś zrobić. tj. zachowanie, które jest mądre i uchroni cię przed kłopotami. Istnieje inny (znacznie szerszy) standard zachowania, który powinieneś zaakceptować bez kłopotów. Ta dualność działa w przypadku wysyłania i przyjmowania wiadomości e-mail, ale ma szerokie zastosowanie w życiu.
Dobry przewodnik po twoich adresach; patrz: http://www.remote.org/jochen/mail/info/chars.html
Aby filtrować prawidłowe wiadomości e-mail, przekaż wszystko, co jest wystarczająco zrozumiałe, aby zobaczyć kolejny krok. Lub zacznij czytać kilka RFC, uwaga, tutaj będą smoki.
źródło
Dobra lektura w tej sprawie .
Fragment:
źródło
Joe.\\[email protected]
bez cytatów. Czy to jest rzeczywiście ważne? Nie wydaje się jasne, biorąc pod uwagę odpowiedzi tutaj, ale pytam, ponieważ widziałem (bardzo rzadkie) przypadki ciągów adresów e-mail nazw DNS SoA zawierających odwrotne ukośniki.Przyjęta odpowiedź odnosi się do artykułu w Wikipedii podczas omawiania prawidłowej lokalnej części adresu e-mail, ale Wikipedia nie jest w tym zakresie autorytetem.
IETF RFC 3696 jest organem w tej sprawie i należy się z nim zapoznać w sekcji 3. Ograniczenia dotyczące adresów e-mail na stronie 5:
Podobnie jak inni, przesyłam wyrażenie regularne, które działa zarówno dla PHP, jak i JavaScript, aby zweryfikować adresy e-mail:
źródło
Jak można znaleźć w tym linku do Wikipedii
źródło
Odpowiedź brzmi (prawie)
ALL
(7-bitowy ASCII).Jeśli reguły włączenia to „... dozwolone pod pewnymi / dowolnymi / żadnymi warunkami ...”
Wystarczy spojrzeć na jedną z kilku możliwych reguł włączenia dozwolonego tekstu w części „tekst domeny” w RFC 5322 u góry strony 17 i znajdujemy:
jedyne trzy brakujące znaki w tym opisie są używane w literaturze domenowej
[]
, tworząc parę w cudzysłowie\
i znak spacji(% d32). Dzięki temu wykorzystywany jest cały zakres 32-126 (dziesiętny). Podobny wymóg pojawia się jako „qtext” i „ctext”. Wiele znaków kontrolnych jest również dozwolonych / używanych. Jedna lista takich znaków kontrolnych pojawia się na stronie 31 sekcja 4.1 RFC 5322 jako obs-NO-WS-CTL.
Wszystkie te znaki kontrolne są dozwolone, jak podano na początku sekcji 3.5:
Taka zasada włączenia jest zatem „po prostu zbyt szeroka”. Lub, w innym sensie, oczekiwana zasada jest „zbyt uproszczona”.
źródło
Dla uproszczenia dezynfekuję przesyłanie, usuwając cały tekst z podwójnych cudzysłowów i powiązanych z nimi podwójnych cudzysłowów przed sprawdzeniem poprawności, umieszczając kibosh na przesyłanych adresach e-mail w oparciu o to, co jest niedozwolone. To, że ktoś może mieć Johna ... „The * $ hizzle * Bizzle” .. [email protected] adres nie oznacza, że muszę pozwolić na to w moim systemie. Żyjemy w przyszłości, w której uzyskanie darmowego adresu e-mail może zająć mniej czasu niż wykonanie dobrej pracy wycierania tyłka. I nie jest tak, że kryteria e-mail nie są umieszczane obok danych wejściowych z informacją o tym, co jest i nie jest dozwolone.
Oczyszczam również to, co nie jest dozwolone przez różne RFC po usunięciu cytowanego materiału. Lista szczególnie niedozwolonych znaków i wzorców wydaje się być o wiele krótszą listą do przetestowania.
Niedozwolone:
W podanym przykładzie:
Wysłanie potwierdzającej wiadomości e-mail do resztkowego wyniku przy próbie dodania lub zmiany adresu e-mail to dobry sposób na sprawdzenie, czy kod obsługuje podany adres e-mail. Jeśli wiadomość e-mail przejdzie walidację po tylu rundach dezynfekcji, ile potrzeba, odpal to potwierdzenie. Jeśli żądanie powróci z linku potwierdzającego, nowy adres e-mail można przenieść ze stanu tymczasowego || czyśćca lub magazynu, aby stać się prawdziwym, przechowywanym w dobrej wierze e-mailem pierwszej klasy.
Powiadomienie o niepowodzeniu lub powodzeniu zmiany adresu e-mail może zostać wysłane na stary adres e-mail, jeśli chcesz się nad tym zastanowić. Niepotwierdzone ustawienia konta mogą wypaść z systemu, ponieważ nieudane próby całkowicie po rozsądnym czasie.
Nie zezwalam na e-maile śmierdzące w moim systemie, może to po prostu wyrzucanie pieniędzy. Ale w 99,9% przypadków ludzie po prostu postępują właściwie i mają wiadomości e-mail, które nie przekraczają granic zgodności na krawędzi, wykorzystując scenariusze zgodności z przypadkami granicznymi. Uważaj na regex DDoS, jest to miejsce, w którym możesz wpaść w kłopoty. Jest to związane z trzecią rzeczą, którą robię, ograniczam czas, przez jaki jestem gotów przetworzyć dowolny e-mail. Jeśli musi spowolnić mój komputer, aby zostać sprawdzonym - nie przechodzi poza logikę punktu końcowego interfejsu API danych przychodzących.
Edycja: Ta odpowiedź ciągle się wahała za to, że była „zła” i być może zasługiwała na to. Może nadal jest źle, a może nie.
źródło
W moim PHP używam tego czeku
spróbuj sam http://phpfiddle.org/main/code/9av6-d10r
źródło
Utworzyłem ten regex zgodnie z wytycznymi RFC:
źródło
Gmail zezwala tylko na znak + jako znak specjalny, aw niektórych przypadkach (.), Ale żadne inne znaki specjalne nie są dozwolone w Gmailu. RFC mówi, że możesz używać znaków specjalnych, ale powinieneś unikać wysyłania poczty do Gmaila ze znakami specjalnymi.
źródło