Jak daleko należy podjąć weryfikację adresu e-mail?

chcesz poprawić ten post? Podaj szczegółowe odpowiedzi na to pytanie, w tym cytaty i wyjaśnienie, dlaczego Twoja odpowiedź jest prawidłowa. Odpowiedzi bez wystarczającej ilości szczegółów mogą być edytowane lub usuwane.

Zastanawiam się, jak daleko ludzie powinni wziąć walidację adresu e-mail. Moją dziedziną jest przede wszystkim tworzenie stron internetowych, ale dotyczy to wszędzie.

Widziałem kilka podejść:

  • po prostu sprawdzam, czy istnieje prezent"@", który jest śmiertelnie prosty, ale oczywiście nie aż tak wiarygodny.
  • bardziej złożony test regex dla standardowych formatów wiadomości e-mail
  • a pełny regex przeciwko RFC 2822 - problem w tym, że często adres e-mail może być poprawny, ale prawdopodobnie nie jest co użytkownik miał na myśli
  • Walidacja DNS
  • Walidacja SMTP

Jak Wiele osób może wiedzieć (ale wiele nie wie), adresy e-mail mogą mieć wiele dziwnych różnic, których większość ludzi zwykle nie bierze pod uwagę (patrz RFC 2822 3.4.1 ), ale musisz pomyśleć o celach walidacji: czy po prostu starasz się zapewnić, że wiadomość e-mail może zostać wysłana na adres, lub że jest to, co użytkownik prawdopodobnie chciał umieścić w (co jest mało prawdopodobne w wielu innych niejasne przypadki innych "ważnych" adresów).

Opcja, którą rozważałem, to po prostu podanie ostrzeżenia z bardziej ezoterycznym adresem, ale nadal zezwalanie na przejście żądania, ale to zwiększa złożoność formularza i większość użytkowników może być zdezorientowana.

Podczas gdy Walidacja DNS / Walidacja SMTP wydaje się być bezmyślna, przewiduję problemy, w których serwer DNS / serwer SMTP jest tymczasowo wyłączony, a użytkownik nie może się gdzieś zarejestrować lub serwer SMTP użytkownika nie obsługa wymaganych funkcji.

Jak doświadczeni programiści mogą sobie z tym poradzić? Czy są jakieś inne podejścia niż te, które wymieniłem?

Edit: zupełnie zapomniałem o najbardziej oczywistym ze wszystkich, wysłaniu e-maila z potwierdzeniem! Dzięki za wskazówkę. Tak, ten jest dość niezawodny, ale wymaga dodatkowych kłopotów ze strony wszystkich zaangażowanych. Użytkownik musi pobrać kilka wiadomości e-mail, a deweloper musi zapamiętać dane użytkownika, zanim zostaną nawet potwierdzone jako ważne.

Author: mike65535, 2008-08-06

25 answers

Nie ma w 100% wiarygodnego sposobu potwierdzania poprawnego adresu e-mail innego niż wysłanie wiadomości e-mail do użytkownika i oczekiwanie na odpowiedź, jak większość forów.

Wybrałbym prostą regułę walidacji"@", a następnie wysłał e-mail do użytkownika, aby potwierdzić jego adres e-mail.

Chociaż, to jest moja osobista opinia... Czekam na inne propozycje.

 82
Author: GateKiller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 09:54:14

Jedna sugestia: nie odrzucaj adresów z + w nich. Irytująco często się je odrzuca, ale to ważny znak, a użytkownicy Gmaila mogą używać [email protected] aby łatwiej etykietować i sortować przychodzące wiadomości.

 58
Author: Peter Burns,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 09:57:01

W Twoim poście wydaje się, że mówiąc "Walidacja SMTP" masz na myśli połączenie z serwerem i próbę RCPT, aby sprawdzić, czy jest akceptowane. Ponieważ odróżniasz go od wysyłania wiadomości e-mail z potwierdzeniem, zakładam, że chcesz to zrobić inline z akcjami użytkownika. Oprócz problemów, takich jak problemy z siecią, awarie DNS itp., szara lista może siać spustoszenie dzięki tej metodzie. Metoda jest różna, ale zasadniczo szary listing zawsze odkłada pierwszą próbę dostarczenia do odbiorcy na Podłączanie IP. Jak powiedziałem, może się to różnić, niektóre hosty mogą odrzucić niepoprawne adresy przy pierwszej próbie i tylko odroczyć poprawne adresy, ale nie ma niezawodnego sposobu, aby programowo uporządkować różne implementacje.

Jedynym sposobem, w jaki będziesz mieć pewność, że adres jest poprawny i został przesłany przez jego właściciela, który naprawdę chce go użyć do Twojej aplikacji, jest wysłanie weryfikacyjnej wiadomości e-mail. Cóż, dopóki nie zostanie filtrowany spam chyba =).

 29
Author: jj33,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 14:02:00

Kolejną wadą używania wyrażenia regularnego do walidacji wiadomości e-mail jest to, że prawie niemożliwe jest przechwycenie wszystkich ważnych domen najwyższego poziomu podczas odrzucania wszystkich nieprawidłowych.

Na przykład, podstawowe Wyrażenie regularne e-mail w odpowiedzi Jeffa Atwooda:

\b [a-Z0-9._%+- ] + @[A-Z0-9.-]+.[A-z] {2,4}\B

Przyjmie dowolny TLD od dwóch do czterech znaków. Na przykład .spam zostanie zaakceptowany, ale .museum i. travel (oba ważne TLD) zostaną odrzucone.

Just one więcej powodów lepiej po prostu poszukać @ i wysłać e-mail z potwierdzeniem.

 27
Author: Bruce Alderman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 13:38:48

Z nazwami domen międzynarodowych prawie wszystko jest możliwe:

  • Håkan.Söderström@malmö.se
  • [email protected]
  • 试@例子.测试.مثال.آزمایشی

Jeśli chcesz wykonać jakieś testy, powinieneś najpierw przekonwertować go na punycode.

Bez punycode wszystko co powinieneś zrobić to przetestować to tam:

  • jest co najmniej jednym @
  • jest co najmniej jednym znakiem w części lokalnej
  • jest co najmniej jedną kropką w domenie część
  • W domenie tld znajduje się co najmniej 4 znaki (zakładając, że nikt nie ma adresu w tld, tld ma co najmniej 2 znaki)
function isEmail(address) {
    var pos = address.lastIndexOf("@");
    return pos > 0 && (address.lastIndexOf(".") > pos) && (address.length - pos > 4);
}
 25
Author: some,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-02 19:38:54

Najlepiej po prostu sprawdzić proste rzeczy, takie jak @ i . w JavaScript, a następnie wysłać im weryfikację na ich e-mail. Jeśli zweryfikują swoje konto, masz prawidłowy adres e-mail. W ten sposób masz pewność, że masz działający adres i nie musisz być zbyt apodyktyczny w formularzu.

 19
Author: andrewrk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 09:55:18

Użyj walidatora open-source, który nie daje fałszywych negatywów. Zero wysiłku dla Ciebie i solidna Walidacja dla Twojej aplikacji.

Zestawiłem teraz testy cala Hendersona, Dave ' a Childa, Phila Haacka, Douga Lovella i RFC 3696. W sumie 158 adresów testowych.

Przeprowadziłem wszystkie testy przeciwko wszystkim walidatorom, których udało mi się znaleźć. Porównanie jest tutaj: http://www.dominicsayers.com/isemail

Postaram się, aby ta strona była aktualna, ponieważ ludzie poprawiają swoje walidatory. Dzięki Cal, Dave i Phil za ich pomoc i współpracę w kompilacji tych testów i konstruktywną krytykę mojego własnego walidatora .

Ludzie powinni być świadomi erraty przeciwko RFC 3696 w szczególności. Trzy z kanonicznych przykładów to w rzeczywistości niepoprawne adresy. Maksymalna długość adresu to 254 lub 256 znaków, Nie 320.

 11
Author: Dominic Sayers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-10 21:41:45

Po rozważeniu odpowiedzi (ponieważ zupełnie zapomniałem o e-mailach potwierdzających) wydaje mi się, że odpowiednim kompromisem dla rozwiązania o niskim współczynniku tarcia byłoby:

  1. Użyj regex, aby sprawdzić, czy adres e-mail wygląda poprawnie, i dać ostrzeżenie, jeśli jest bardziej niejasny, ale uniknąć odrzucenia wprost.
  2. Użyj walidacji SMTP, aby upewnić się, że adres e-mail jest prawidłowy.
  3. If SMTP validation fails then -- and only then -- use a e-mail z potwierdzeniem w ostateczności. E-maile z potwierdzeniem wydają się wymagać zbyt dużej interakcji poza aplikacją, aby można je było uznać za niskie tarcie, ale są idealnym rozwiązaniem awaryjnym.
 10
Author: Lauren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 10:24:57

RegexBuddy oferuje następujące wyrażenia regularne związane z e-mailem ze swojej biblioteki:

Adres e-mail (podstawowy)

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b

Adres e-mail (RFC 2822, uproszczony)

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

Ale Zgadzam się z odpowiedziami Petera i SuperJoe; jedynym prawdziwym "testowaniem"jest wysłanie e-maila potwierdzającego.

 6
Author: Jeff Atwood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 10:20:36

Pracowałem w 4 różnych firmach, gdzie ktoś z help desk został nakrzyczany przez kogoś o imieniu O 'Malley lub O' Brien lub jakiś inny adres e-mail z apostrofem. Jak sugerowano wcześniej, nie wszystkie wyrażenia regularne wyłapują wszystko, ale oszczędzają sobie trochę kłopotów i akceptują apostrof bez generowania Ostrzeżenia.

--
bmb

 4
Author: bmb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 00:35:33

@Mike - myślę, że jednym z powodów, dla których wysyłane są e-maile z potwierdzeniem jest nie tylko upewnienie się, że adres e-mail jest prawidłowy, ale że jest on dostępny dla użytkownika, który go przesłał. Osoba mogłaby łatwo wpisać jednoliterową literówkę w adresie e-mail, która prowadziłaby do innego, poprawnego adresu e-mail, ale nadal byłby to błąd, ponieważ byłby to adres niewłaściwy.

 3
Author: Yaakov Ellis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:40:27

Na niektórych stronach opracowanych w miejscach, w których pracowałem, zawsze korzystaliśmy z e-maili potwierdzających. Jednak zaskakująco często użytkownicy błędnie wpisywali swój adres e-mail w sposób, który nie mógł zadziałać, a następnie czekali na wiadomość e-mail z potwierdzeniem, która nie nadeszła. Dodanie kodu ad-hoc (lub, w przypadku nazwy domeny, weryfikacji DNS), aby ostrzec użytkownika w takich przypadkach może być dobrym pomysłem.

Najczęstsze przypadki, które widziałem:

  • rzucenie listu na środku nazwy domeny lub kilka innych prostych wariantów literówki.
  • zamieszanie TLD (na przykład dodanie .br do domeny .com lub zrzucenie .br z domeny .com.br).
  • dodanie www. na początku lokalnej części adresu e-mail(nie wymyślam tego, widziałem kilka adresów e-mail formularza [email protected]).

Były jeszcze bardziej dziwaczne przypadki; rzeczy takie jak kompletna nazwa domeny jako część lokalna, adresy z dwa @ (coś jak [email protected]@example.com), i tak dalej.

Oczywiście większość z nich była nadal poprawnymi adresami RFC-822, więc technicznie można było pozwolić MTA się nimi zająć. Jednak Ostrzeżenie użytkownika, że wprowadzony adres e-mail jest prawdopodobnie fałszywy, może być pomocne, zwłaszcza jeśli grupa docelowa nie jest zbyt biegła w obsłudze komputera.

 3
Author: CesarB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-15 22:11:21

Możesz jeszcze dalej sprawdzać poprawność wiadomości e-mail, aby sprawdzić, czy istnieje Skrzynka pocztowa. Technika ta ma swoje wady (czas rozwoju, a także możliwość uzyskania czarnej listy za niewłaściwe użycie). http://www.webdigi.co.uk/blog/2009/how-to-check-if-an-email-address-exists-without-sending-an-email/

 3
Author: Webber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-03 10:55:15

Jeśli chcesz zweryfikować e-mail (tj. upewnić się, że użytkownik jest właścicielem adresu e-mail), e-mail z potwierdzeniem jest jedyną rzeczą, którą możesz zrobić. Potem znowu wiele osób ma dedykowane adresy spamowe lub korzysta z usług takich jak OneWayMail i jeśli nie chcą podać swojego rzeczywistego adresu e-mail, nie będą. więc zasadniczo tworzysz blokadę użytkowników.

Jeśli chodzi o Walidacja, aby upewnić się, że użytkownik nie wprowadzi w sposób niezamierzony błędnego adres e-mail, to zdecydowanie odpowiednia motywacja. Jednak przynajmniej w przypadku formularzy HTML (które są zdecydowanie najczęstszym sposobem gromadzenia adresów e-mail), nie jest to właściwy instrument.

Po pierwsze, nie będziesz w stanie rozpoznać literówek w rzeczywistych "słowach" adresu e-mail. Nie ma sposobu, aby dowiedzieć się, że [email protected] jest źle, wyłącznie na podstawie formatu.
Ale co ważniejsze, z punktu widzenia użytkownika istnieje tylko jeden (lub pełna ręka) adres e-mail, który możesz być może chcę wejść. I pewnie już w nim wszedłeś.
Więc zamiast próbować zweryfikować adres, należy skupić się na zapewnieniu, że wszystkie przeglądarki rozpoznają pole e-mail, a tym samym wyeliminować potrzebę wpisywania adresu e-mail w pierwszej kolejności. Oczywiście nie ma to zastosowania, jeśli budujesz witrynę, która prawdopodobnie zostanie trafiona przez użytkowników, którzy nigdy wcześniej nie wprowadzili swojego adresu e-mail do przeglądarki. Ale przypuszczam, że najmniej z nas jest w takiej sytuacji.

 3
Author: back2dos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-23 01:51:37

Myślę, że to zależy od kontekstu, w jakim używasz e-maila. Poważniejsze projekty wymagają bardziej rygorystycznej walidacji, ale myślę, że w większości przypadków wysyłanie wiadomości e-mail na podany adres z linkiem zgodności zapewni poprawność adresu e-mail.

 2
Author: DShook,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 09:55:01

Najbardziej kompletny i dokładny regex, jaki kiedykolwiek spotkałem do walidacji poczty e-mail, to ten udokumentowany tutaj. Jest na tyle skomplikowany, że jest podzielony na części, aby ułatwić ludziom analizowanie (przykładowy kod jest w Javie). Ale w przypadkach, w których przejście przez całą drogę z walidacją jest zasłużone, nie sądzę, że będzie lepiej.

W każdym razie sugerowałbym, abyś użył testów jednostkowych, aby potwierdzić, że Twoje wyrażenie obejmuje przypadki, które ty czuć jest ważne. W ten sposób, kiedy będziesz się z tym obijał, będziesz mieć pewność, że nie złamałeś żadnej sprawy, która wcześniej zadziałała.

 2
Author: Robert J. Walker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-04 16:08:04

Cokolwiek wybierzesz, myślę, że musisz błądzić po stronie wierząc, że w 99% przypadków użytkownik wie, jaki jest jego adres e-mail. Jako ktoś z Australii wciąż znajduję bardzo od czasu do czasu potwierdzenie e-maila, które mówi mi ,że nie mogę mieć. com.au domena. Kiedyś zdarzyło się o wiele więcej w pierwszych dniach Internet mind you.

Wysyłanie wiadomości e-mail z potwierdzeniem jest akceptowalne dla użytkowników, a także przydatne w zakresie opt-in, jak również potwierdzenie ich podanego adresu.

 2
Author: warren_s,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 00:46:31

Cała Walidacja regex na świecie nie uniemożliwi komuś wprowadzenia nieprawidłowego lub fałszywego adresu e-mail. To naprawdę denerwujące.

 2
Author: Kevin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-07 21:02:37

Zależy od celu. Jeśli jesteś dostawcą usług internetowych i musisz potwierdzić, że użytkownicy tworzą poprawne adresy e-mail, wybierz Wyrażenie regularne, które sprawdza się we wszystkim, co możliwe. Jeśli chcesz tylko wychwycić błędy użytkownika, co powiesz na następujący wzór:

[Wszystkie znaki, bez spacji] @ [litery i cyfry] (.[litery i cyfry]) gdzie grupa Finałowa pojawia się co najmniej raz.

RegEx dla tego może wyglądać tak:

[\S]+@[\w]+(.[\w-]+)+

A następnie wyślij e-mail z potwierdzeniem, aby mieć pewność.

 2
Author: Yaakov Ellis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-14 09:01:13

@Yaakov (mógłby tu odpowiedzieć jakimś "odpowiadaniem")

Myślę, że jednym z powodów, dla których wysyłane są e-maile z potwierdzeniem jest nie tylko upewnienie się, że adres e-mail jest prawidłowy, ale także, że jest dostępny dla użytkownika, który go przesłał. Osoba może łatwo umieścić jednoliterową literówkę w adresie e-mail, która doprowadziłaby do innego, poprawnego adresu e-mail, ale nadal byłby to błąd, ponieważ byłby to zły adres.

Zgadzam się, ale nie jestem na pewno warto. W tym celu posiadamy również pola potwierdzające (ponowne powtórzenie adresu e-mail). Inna sytuacja, w której rodzaj strony może uzasadniać różne podejścia.

DODATKOWO samo wysłanie wiadomości e-mail z potwierdzeniem nie daje możliwości wskazania oryginalnemu użytkownikowi, że wprowadzony adres był błędny. Po otrzymaniu potwierdzenia e-mail mogą po prostu założyć, że Twoja aplikacja / strona jest wadliwa; przynajmniej umożliwiając użytkownikowi natychmiastowe rozpoczęcie korzystania z konta może poprawić swój adres e-mail, szczególnie jeśli jest wyświetlany w odpowiednio widocznym miejscu.

 1
Author: Lauren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:40:27

Konie na kursy.

Wszystkie te systemy są poprawne, kompletne systemy weryfikacji poczty e-mail same w sobie, a dla danej strony internetowej jeden będzie bardziej odpowiedni (lub tak dobry, jak jest to uzasadnione) niż pozostałe. W wielu przypadkach przydatne może być kilka etapów weryfikacji.

Jeśli tworzysz stronę internetową dla banku, to na dodatek będziesz potrzebował weryfikacji mailowej lub telefonicznej.

Jeśli tworzysz stronę internetową na konkurs, możesz nie chcieć żadnej z oni-zweryfikuj wiadomości e-mail w post processing, a jeśli jeden się nie powiedzie, to szkoda dla osoby, która go wprowadziła - możesz cenić wydajność serwera, biorąc pod uwagę ogromną liczbę osób (na przykład konkurs telewizyjny), ponad upewnienie się, że wszyscy zostaną poprawnie zweryfikowani w linii.

Jak daleko należy posunąć weryfikację poczty e-mail?

o ile to konieczne i uzasadnione.

And no further (KISS)

 1
Author: Adam Davis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 00:47:58

Widziałem strony, które również chronią przed osobami używającymi tymczasowych witryn typu "throwaway spam bucket", takich jak Mailinator lub MyTrashMail , które ominęły e-mail potwierdzający. Nie mówię, że powinieneś je filtrować, tylko mówię.

 1
Author: jodonnell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 00:53:58

Co próbujesz złapać w walidacji poczty e-mail?

Sprawdzanie poprawności Regex adresów e-mail może w najlepszym przypadku sprawdzić, czy adres jest poprawny składniowo i względnie wiarygodny. Ma również zagrożenie (jak już wspomniano wiele razy) ewentualnego odrzucenia rzeczywistych, dostarczalnych adresów, jeśli regex nie jest całkiem poprawny.

Weryfikacja SMTP może stwierdzić, że adres jest dostarczalny, z zastrzeżeniem ograniczeń nałożonych przez greylisting lub serwery, które są skonfigurowane tak, aby przekazywać jak najmniej informacji o swoich Użytkownikach. Nie masz możliwości, aby wiedzieć, czy MTA tylko twierdził, że akceptuje pocztę na fałszywy adres, a następnie po prostu upuścił go na podłodze w ramach strategii antyspamowej.

Wysłanie wiadomości z potwierdzeniem jest jednak tylko sposobem sprawdzenia, czy adres należy do użytkownika, który go wprowadził. Jeśli wypełniam twój formularz, mogę dość łatwo powiedzieć, że mój adres e-mail to [email protected]. Regex powie Ci, że jest poprawny składniowo, SMTP RCPT TO powie Ci, że jest to adres dostarczalny, ale na pewno nie jest to mój adres.

 1
Author: Dave Sherohman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-22 17:18:10

Wraz z pojawieniem się HTML5 co najmniej jedno nowe podejście jest dodawane do możliwości: użycie wejścia typu " email ", które umożliwia walidację Po stronie klienta. Obecne wersje Firefoksa, Chrome, Safari i opery to obsługują (a inne przeglądarki traktują to jak type = text, więc można go używać bez problemów, chociaż nie masz oczywiście walidacji.)

Nigdy nie może (jak zaznaczono kilka razy) zagwarantować poprawnego adresu, ale może być bardzo korzystne (i ostatecznie zastąpić sprawdzenie po stronie serwera) w miejscach, w których po prostu trzeba złapać prawdopodobne błędy użytkownika.

 1
Author: Inca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-14 11:22:46

Trzy główne poziomy walidacji wiadomości e-mail:

1) sprawdzenie poprawnego sformatowanego adresu e-mail [email protected]

2) Sprawdź domenę e-mail z rekordami MX, aby sprawdzić, czy nazwa domeny ma usługę e-mail

3) wysłanie e-maila potwierdzającego z linkiem potwierdzającym lub kodem

Poziom 1:

W Visual Studio możesz użyć "weryfikatora wyrażeń regularnych". A w właściwości "ValidationExpression" możesz kliknąć na "..."przycisk z kreatorem do dodania w formacie wyrażenia regularnego dla adresów e-mail.

Poziom 2:

Oto Mój kod C# poniżej, aby użyć nslookup, aby sprawdzić, czy domena e-mail ma ważne rekordy MX. Działa szybko i ok na Win 2008 R2 i wygrać 7.

using System.Net.Mail;
using System.Diagnostics;

public static bool checkMXRecords(string email) 
    {
        MailAddress addr = new MailAddress(email);
        string domain = addr.Host;

        string command = "nslookup -querytype=mx " + domain;
        ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + command);

        procStartInfo.RedirectStandardOutput = true;
        procStartInfo.UseShellExecute = false;

        procStartInfo.CreateNoWindow = true;

        Process proc = new Process();
        proc.StartInfo = procStartInfo;
        proc.Start();
        string result = proc.StandardOutput.ReadToEnd();

        if (result.ToLower().Contains("mail exchanger"))
        {
            return true;
        }
        else return false;

     } // checkMXRecords

Inną opcją jest użycie pakietu Arsofttools NuGet, ale może to być powolne na Windows Server 2008 R2, jak doświadczyłem, ale działa szybko na Win 7.

Poziom 3:

Na e-mail potwierdzenie, możesz albo wygenerować adres hex określony przez e - mail (za pomocą funkcji szyfrowania) itp http://domain.com/validateEmail?code=abcd1234 aby zweryfikować adres e-mail po kliknięciu go przez użytkownika. Nie ma potrzeby przechowywania tego adresu url w pamięci.

 0
Author: Norman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-02 19:39:38