Rozbudowana walidacja adresu e-mail w PHP

1021283_30421186Często projektując różnego typu formularze kontaktowe i nie tylko, na stronach www, borykamy się z problemem sprawdzania poprawności wpisanych danych w tym także weryfikacji poprawności podanego adresu e-mail.

Najlepszym sposobem na weryfikację użytkownika i jego adresu e-mail jest po prostu wysłanie e-maila z linkiem potwierdzającym wpisane dane. Jednak takie rozwiązanie nie jest wygodne dla użytkownika i jeśli bardziej zależy nam na poprawności samego adresu a nie na zabezpieczeniu się przed spambotami to są na to prostsze sposoby.

Przede wszystkim, na początek powinniśmy sprawdzić czy wpisany adres e-mail w ogóle spełnia kryteria prawidłowego adresu tj. składa się z nazwy, znaku małpy i domeny w której znajduję się poczta. Tym zajmie się wbudowana w PHP funkcja filter_var wchodząca w skład rozszerzenia Data Filtering, które jest dostępne w PHP od wersji 5.2:

<!--?php $email = 'mail@example.com'; if (filter_var($email, FILTER_VALIDATE_EMAIL))    echo 'Adres e-mail jest poprawny'; else    echo 'Adres e-mail nie jest poprawny'; ?-->

W przypadku wersji PHP < 5.2 należy korzystać z wyrażeń regularnych lub rozbijania adresu po znaku małpy, przykładów nie będę dawał ponieważ w sieci jest tego bardzo dużo.

To jednak nie wszystko co możemy zrobić aby sprawdzić czy adres e-mail jest poprawny. Przy pomocy wbudowanych funkcji w PHP, możemy dodatkowo sprawdzić czy podana przez użytkownika domena istnieje w sieci i jest dostępna. To w dużym stopniu uchroni nas przed spambotami wpisującymi co popadnie w formularzach kontaktowych. W tym celu musimy skorzystać z funkcji getmxrr:

bool getmxrr ( string $hostname , array &$mxhosts [, array &$weight ] )

Funkcja ta zwraca true jeśli znajdzie zapisany rekord MX domeny lub false w przeciwnym wypadku.

Przykładowa implementacja uwzględniająca sprawdzenie adresu e-mail i dostępności domeny:

<!--?php function check_email($email) {     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) return 0;     list($user,$domain)=split('@',$email);      $mxhosts = array();     if (!getmxrr($domain,$mxhosts)) return 0;     return 1; } $email = 'mail@example.com'; if (check_email($email))    echo 'Adres e-mail jest poprawny'; else    echo 'Adres e-mail nie jest poprawny'; ?-->

Dzięki temu możemy być już prawie pewni, że użytkownik nie popełnił błędu przy wpisywaniu danych i możemy uznać adres e-mail za poprawny. Oczywiście nie daje nam to 100% pewności, ale nawet metoda weryfikacja przez link potwierdzający w mailu nie jest metodą stuprocentową.

Maciej Mortek

Programista PHP i MySQL zajmujący się projektowaniem stron www od kilku lat. Na co dzień student Politechniki Rzeszowskiej i właściciel portalu StudentHELP.pl.

More Posts - Website - Facebook

  • toJA

    Gdzie muszę wstawić ten kod, aby skrypt sprawdzał poprawny adres email?

    Mój skrypt:

    <?php
    if (count($_POST))
    {
    ////////// USTAWIENIA //////////
    $email = 'email-mój'; // Adres e-mail adresata
    $subject = 'Kontakt'; // Temat listu
    $message = 'Dziękujemy za wysłanie formularza'; // Komunikat
    $error = ‚Wystąpił błąd podczas wysyłania formularza'; // Komunikat błędu
    $charset = ‚utf-8′; // Strona kodowa
    //////////////////////////////

    $head =
    „MIME-Version: 1.0rn” .
    „Content-Type: text/plain; charset=$charsetrn” .
    „Content-Transfer-Encoding: 8bit”;
    $body = ”;
    foreach ($_POST as $name => $value)
    {
    if (is_array($value))
    {
    for ($i = 0; $i

    Imię:

    E-mail:

    >

    Czy gdy wpisze się zły adres email to wyskoczy okienko z informacją?

  • toJA

    $value)
    {
    if (is_array($value))
    {
    for ($i = 0; $i

    Imię:

    E-mail:

Nawigacja