Convalida email in PHP

2

Ho scritto la seguente funzione per convalidare i messaggi di posta elettronica per un'app Web su cui sto lavorando:

function validate_email($email) {
    $valid = true;

    if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $valid = false;
    }

    $email_parts = explode("@", $email);

    if(count($email_parts) < 2) {
        $valid = false;
    }
    else {
        if(!checkdnsrr($email_parts[1], "MX")) {
            $valid = false;
        }
    }

    return $valid;
}

Non è inteso a sostituire l'e-mail di convalida inviata all'utente con un link per completare la registrazione. So che non prenderà tutti quelli non validi, li ridurrà solo. Quindi ridurre la quantità di email rimbalzate ricevute. Le mie domande sono:

  1. Indicherà una e-mail valida come un falso positivo?
  2. Va bene dipendere da un controllo DNS per convalidare il dominio?

Qualsiasi aiuto è apprezzato. Grazie.

    
posta Amged Rustom 27.02.2013 - 12:21
fonte

2 risposte

5

Sì, contrassegna erroneamente le e-mail valide. Un indirizzo di posta elettronica può contenere legalmente un% escape@ nella parte locale, nel qual caso il codice non riuscirebbe a estrarre correttamente il nome di dominio.

Invece di reinventare la ruota, controlla IsEmail .

    
risposta data 27.02.2013 - 12:33
fonte
2

Il record MX MX è necessario per inviare qualsiasi email al dominio. Pertanto, il controllo contrassegnerà solo le email a cui non è possibile recapitare in questo momento .

L'agente di trasferimento della posta (MTA) normalmente riproverà, comunque. Di solito riprova per circa una settimana. Quindi MTA consegnerebbe l'e-mail se ci fosse una configurazione errata temporanea del dominio o un problema temporaneo con il tuo DNS locale che causerebbe il fallimento del controllo dove avrebbe avuto successo in un altro momento.

Tale caso sarebbe molto raro e se l'utente si aspetta di ricevere immediatamente un'email di conferma, non lo otterrebbe comunque.

Vedi anche la risposta di Peter Taylor per il bug nell'analisi stessa.

    
risposta data 27.02.2013 - 12:35
fonte

Leggi altre domande sui tag