Verifica di un indirizzo email

Discussione in 'Snippet PHP' iniziata da MarcoGrazia, 29 Novembre 2017.

  1. MarcoGrazia

    MarcoGrazia Utente Attivo

    Registrato:
    15 Dicembre 2009
    Messaggi:
    652
    Mi Piace Ricevuti:
    7
    Punteggio:
    18
    Sesso:
    Maschio
    Occupazione:
    Sviluppare web design (Studiare)
    Località:
    Udine
    Home Page:
    Allora, navigando a naso tra gli snippet presenti sul sito di Mr.Webmaster mi sono imbattuto in una semplice funzione che dovrebbe ( il condizionale è d'obbligo perché per ora non posso provarla ) verificare l'esistenza di un indirizzo email, basandosi sulla funzione PHP checkdnsrr() e ho voluto svilupparla ulteriormente per migliorare il supporto di verifica dell'indirizzo che è carente.
    Origine: https://www.mrwebmaster.it/php/verificare-se-indirizzo-email-esiste_11259.html
    Tralasciando le migliaia di script REGEX esistenti, ho usato solo i filtri del PHP, così se non è verificato un determinato indirizzo è solo colpa di Zeev Suraski e Andi Gutmans :D
    Ecco lo script commentato, almeno in parte:
    PHP:
    /**
     *    Verifica un indirizzo email
    */
    function verificaEmail$valore ) {
        
    $sanitized filter_var$valoreFILTER_SANITIZE_EMAIL );
        if ( 
    filter_var$sanitizedFILTER_VALIDATE_EMAIL )) {
            return 
    $sanitized;
        }
    return 
    false;
    }    
    //    verificaEmail()

    /**
        *    Verifica l'esistenza di un indirizzo email
        *    uso:
        *    if (!emailExist('esempio@dominio-inesistente.com')) echo 'Email inesistente';
        *    else echo 'Email valida';
    */
    function emailExist$email ) {
        
    $email verificaEmail$email );
        if ( 
    $email )
            if ( !
    checkdnsrrarray_popexplode'@'$email )), 'MX' )) return false;
    return 
    $email;
    }    
    emailExist()
    Come funziona:
    intanto ho diviso l'unica funzione dello snippet iniziale in due funzioni distinte, così facendo è anche possibile utilizzare solo una o l'altra a seconda di cosa abbiamo bisogno.
    Quindi parlo ora della prima, la verificaEmail()
    PHP:
    function verificaEmail$valore ) {
        
    $sanitized filter_var$valoreFILTER_SANITIZE_EMAIL );
        if ( 
    filter_var$sanitizedFILTER_VALIDATE_EMAIL )) {
            return 
    $sanitized;
        }
    return 
    false;
    }    
    //    verificaEmail()
    FILTER_SANITIZE_EMAIL filtra la parte spuria di un indirizzo email, ad esempio: gino@lemon.org è valida e non c'è nulla da fare (gino@lemon.org) è valida ma vanno tolte le parentesi e questo lo fa il filtro restituendo l'indirizzo nel modo corretto.
    Se passa il test però non è detto che sia valida, perché avrei potuto scrivere gino AT lemon DOT org e FILTER_VALIDATE_EMAIL darebbe errore, cioè false.
    Se uso solo FILTER_VALIDATE_EMAIL come nell'esempio originale, pure passando l'indirizzo corretto ma con le parentesi non passerebbe, ecco perché la sanitizzazione.

    Ultima parte:
    PHP:
    function emailExist$email ) {
        
    $email verificaEmail$email );
        if ( 
    $email )
            if ( !
    checkdnsrrarray_popexplode'@'$email )), 'MX' )) return false;
    return 
    $email;
    }    
    emailExist()
    Da notare che fa da se il check sulla correttezza dell'indirizzo, quindi basta richiamare questa, e fa tutto, quindi se $email non è false, controlla se esiste il record MX, se questo esiste torna l'indirizzo email, se no false.

    Dato che da dove sono ora non posso verificarla, troppi controlli sul proxy dell'ufficio, se qualcuno vuole divertirsi a controllarla e dire qui se funziona o proporre modifiche è il benvenuto.
     
Sto caricando...

Condividi questa Pagina