Walidacja adresu e-mail

PHP - Tips & Tricks Zostaw komentarz

Tworząc jakikolwiek formularz rejestracyjny (bądź formularz zamówienia) zazwyczaj użytkownik musi podać swój adres e-mail. Jest to jak najbardziej zrozumiałe – jeśli jesteś właścicielem sklepu internetowego, to musisz mieć e-mail klienta, aby poinformować go o kolejnych etapach realizacji zamówienia (np. wysłać mail o tym, że właśnie wyszła przesyłka). Czasami istnieje konieczność poinformowania klienta o chwilowych problemach (np. informacja o opóźnieniu, gdyż z jakiegoś powodu towar będzie na magazynie dopiero za kilka dni itp.)

Dodatkowo w przypadku formularza zamówienia warto jest zachęcać klientów do podawania telefonu kontaktowego (w razie jakichkolwiek problemów można szybko i sprawnie się skomunikować z klientem poprzez wykonanie telefonu).

Jak widać – adres e-mail jest jedną z ważniejszych rzeczy, jaką podaje osoba wypełniająca formularz. Dlatego trzeba zadbać, aby e-mail podany przez użytkownika był prawidłowy. Jednym ze sposobów na sprawdzenie adresu e-mail jest wysłanie na owy adres specjalnego linka weryfikacyjnego. Jeśli dana osoba kliknie w link to znaczy, że otrzymała e-mail, a więc e-mail jest prawidłowy. Jednak gdy dana osoba popełni jakiś błąd, to może w nieskończoność czekać na e-mail, który nie dojdzie. Dlatego też warto jest weryfikować „z grubsza” adres e-mail, czy ma prawidłowy format (tj. jeśli ktoś wpisze np. to system przepuści taki adres pomimo, że pewnie on nie istnieje, ale za to odsieje on różnego rodzaju błędne e-maile w stylu: bla (przypadkowo dodana spacja podczas pisania w pośpiechu)).

Poniżej podaję gotową funkcję, która weryfikuje poprawność adresu e-mail. Znalazłem ją na stronie http://ocaoimh.ie Co ciekawe funkcja jest dobra, gdyż nie przepuszcza e-maili z „polskimi ogonkami” (np. czasami ktoś odruchowo zamiast nowako wpisuje nowakó). Niektóre znalezione w internecie funkcje do walidacji adresu e-mail mają tę wadę, że przepuszczają takie błędne adresy.

function verifyEmail($email)
{
// checks proper syntax
if( !preg_match( "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $email))
{
return false;
}
else
{// gets domain name
list($username,$domain)=split('@',$email);
// checks for if MX records in the DNS
$mxhosts = array();
if(!getmxrr($domain, $mxhosts))
{
// no mx records, ok to check domain
if (!fsockopen($domain,25,$errno,$errstr,30))
{
return false;
}
else
{
return true;
}
}
else
{
// mx records found
foreach ($mxhosts as $host)
{
if (fsockopen($host,25,$errno,$errstr,30))
{
return true;
}
}
return false;
}
}

Owszem ta funkcja jest dobra, bo gdy się okaże, że e-mail ma poprawną budowę, to jeszcze sprawdza, czy na danej domenie jest w DNSach rekord MX (czyli jeśli wpiszesz a dana domena nie istnieje to funkcja zwróci wartość false, bo pomimo, że dany e-mail ma poprawny format, to on nie istnieje). Jeśli chcesz, aby dana funkcja tylko sprawdzała, czy dany ciąg znaków ma format adresu e-mail (czyli nie chcesz sprawdzać rekordów MX) to funkcja jest wtedy dużo prostsza:

function verifyEmail($email)
{
// checks proper syntax
if( !preg_match( "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $email))
{
return false;
}
else
{
return true;
}
}

Podsumowując: jeśli wymagasz od użytkownika, aby podał adres e-mail, to warto jest sprawdzić czy podany przez niego adres ma poprawną budowę.

Tagi: , ,

Zanim dodasz komentarz, zapoznaj się z kilkoma podstawowymi zasadami:

  1. Jeśli zamiast imienia (lub pseudonimu) wpiszesz jakiś mało logiczny ciąg znaków np. asdfg, to taki komentarz zostanie usunięty.
  2. Jeśli się za kogoś podszywasz, to taki komentarz zostanie usunęty
  3. Jeśli zamiast imienia (pseudonimu) wpiszesz jakieś słowo kluczowe (np. tani hosting), to taki komentarz zostanie usunięty
  4. Jeśli Twoim jedynym celem jest zareklamowanie się, to taki komentarz zostanie niezwłocznie usunięty
  5. Komentarze nie związane z tematem notki są kasowane.
  6. Komentarze, które zawierają wulgarne słowa, bądź są obraźliwe (nie dotyczy konstruktywnej krytyki) są kasowane.
  7. Komentarze z mailem typu "nie.podam@coś.tam.pl" są kasowane
  8. Komentarze pisane niechlujnie (bez interpunkcji, w błędami ortograficznymi, z licznymi literówkami, pisane WIELKIMI LITERAMI) są kasowane

4 komentarze do “Walidacja adresu e-mail”

  1. Prosta walidacja formularza za pomocą skryptu JavaScript | Pomocnik webmastera Says:

    […] czy wszystkie pola zostały wypełnione i czy wprowadzone dane mają poprawny format (np. czy adres e-mail ma prawidłowy format, czy oba hasła się pokrywają, czy kod pocztowy jest w formacie ab-cde itp.) Jeśli dane są […]

  2. Kaznov Says:

    Jak toto umieścić? Mam stronę w joomli, formularz wysyłany przez skrypt php ze strony html dla zielonych, i nie wiem gdzie zamieścić ten kod.

  3. Damian Daszkiewicz Says:

    Trzeba znaleźć odpowiednie miejsce w kodzie, gdzie jest „pobierany” adres e-mail z formularza. Pewnie będzie to coś w stylu: $email=$_POST[’email’]; i tam trzeba dodać sprawdzanie poprawności adresu e-mail w razie gdyby on miał błędny format, to trzeba „wyrzucić” błąd.

  4. Adam Says:

    Dzięki Damianie za tą stronę bardzo przydatne rzeczy.

    Mam mały problem z tą funkcją, dodałem ją u siebie na stronie i wywołuje błąd gdy podam adres, który na pewno
    istnienie (z mojej domeny), a kiedy jest to np. adres z gmail (istniejący) skrypt strasznie długo się wywołuje.

    Mówię o tej wersji rozszerzonej, bo ta podstawowa działa extra :).

Zostaw komentarz

WordPress - Hosting: Twój hosting - Skórka: N.Design Studio - Spolszczenie: Adam Klimowski.
RSS wpisów RSS komentarzy Zaloguj się