Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Weryfikacja adresu e-mail w PHP

Walidacja domen adresów e-mail przy pomocy checkdnsrr()

W celu sprawdzenia, czy adres mailowy użytkownika przynależy do jakiejś domeny, powinniśmy poszukać odpowiedniego rekordu domeny w DNS. Upewniamy się w ten sposób, że podany adres należy do istniejącej domeny. W celu przeprowadzenia tego sprawdzenia, z powodzeniem możemy wykorzystać parę funkcji PHP.

Funkcja checkdnsrr() sprawdza rekord DNS, czy przynależy do podanej nazwy hosta lub adresu IP. Dokładniej mówiąc szuka rekordu DNS określonego typu należącego do podanego hosta i jeśli znajdzie to funkcja zwróci wartość logiczną true. W przeciwnym wypadku lub jeśli wystąpi błąd false.

O to prototyp funkcji checkdnsrr():

int checkdnsrr ( string host [, string type]) ;

Funkcja akceptuje następujące typy rekordów: A, MX, NS, SOA, PTR, CNAME lub ANY razem z MX jako wyjściowy typ. Jeżeli więc nie podano żadnego typu funkcja będzie szukać rekordów MX dla podanego hosta. My, w naszym przypadku musimy szukać rekordu MX zgodnie z hostem podanym w ramach adresu e-mail. Zatem teraz dosyć łatwo możemy napisać nową funkcję, która zajmie się sprawdzaniem, czy istnieje dla podanego hosta rekord MX. Do dzieła:

function checkEmail($email) {
 if(preg_match("/^( [a-zA-Z0-9] )+( [a-zA-Z0-9\._-] )*@( [a-zA-Z0-9_-] )+( [a-zA-Z0-9\._-] +)+$/" , $email)){
  list($username,$domain)=split('@',$email);
  if(!checkdnsrr($domain,'MX')) {
   return false;
  }
  return true;
 }
 return false;
}

Powyższa funkcja przyjmuje ciąg jako parametr adresu e-mail, aby sprawdzić czy pasuje do odpowiedniego wzorca i czy należy do istniejącej domeny. W celu uzyskania części domeny rozbiliśmy adres e-mail na dwie części: nazwa użytkownika i sekcja domeny, odpowiednio używając w tym celu funkcji split():

list($username,$domain)=split('@',$email);

Teraz zmienna $domain przechowuje domenę. Mamy już to co nas interesuje, więc jedyne co pozostaje to przekazać tą wiedzę jako parametr do funkcji checkdnsrr(), aby mogła sprawdzić czy jest to aby na pewno istniejąca domena. Funkcja zacznie szukać rekordu Mail Exchange (MX) w DNSie (pamiętaj, że funkcja wyjściowo szuka typu MX) i jeśli znajdzie to zwróci true, co będzie oznaczać, że adres wyświetla poprawną domenę. Jeśli funkcja zwróci false domena adresu e-mail nie jest poprawna. Oczywiście adres e-mail, który przynależy do istniejącej domeny niekoniecznie musi oznaczać, że nazwa użytkownika jest poprawna. Mamy, więc spore wyzwanie przed sobą.

Kiedyś zdefiniowaliśmy nową funkcję, moglibyśmy nazwać to w ten sposób, zakładając, że przychodzące maile wysyłane są metodą POST z formularza:

$email = trim($_POST['email']);   
if(!checkEmail($email)) {  
echo 'Invalid email address!';
}
else {
 echo 'Email address is valid';
}

Nasza funkcja jest bardzo prosta do zaimplementowania i na tyle dobra, aby poradzić sobie z problemem weryfikacji istniejącej domeny adresu, z jakim mamy do czynienia. Jednakże, jak podano w manualu PHP funkcja checkdnsrr() nie jest zaimplementowana pod platformy Windows. Było by, więc przydane posiadanie wersji działającej pod okienkami dla tych programistów, którzy tworzą swoje aplikacje i uruchamiają je na serwerach z Windowsem.

Można to obejść na parę sposobów. Większość z nich oznacza pisanie swego rodzaju innej wersji funkcji checkdnsrr(). No to zabierajmy się do roboty i napiszmy troszkę kodu dla tej funkcji pod winde.

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (0)
Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2024 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System