Validità indirizzo email

Discussione in 'PHP' iniziata da felino, 12 Dicembre 2013.

Tag (etichette):
  1. felino

    felino Utente Attivo

    Registrato:
    12 Dicembre 2013
    Messaggi:
    792
    Mi Piace Ricevuti:
    7
    Punteggio:
    18
    Occupazione:
    Developer Senior
    Località:
    Aci Catena (Catania)
    Salve,
    esiste un modo per verificare che una casella email sia attiva o no?

    Ho un piccola mailing-list, inviata tramite PHPMailer, vorrei evitare che vengano inviate email a caselle che sono non attive o 'over quota'.

    Ho letto che c'è un modo per testarla via telnet, tramite il comando nslookup ma non mi viene riconosciuto.

    Oppure ho trovato questa classse PHP SMTP Email Validation (code.google.com/p/php-smtp-email-validation/), qualcuno di voi la conosce? Provata?
    Leggo che è possibile inviare più indirizzi mail, la funzione pensa a raggruppare quelli con lo stesso dominio così da effettuare una sola richiesta SMTP.
    Ma "molti" secondo voi quanti sono?
    Vi spiego: nel mio portale turistico ho 2600 iscritti, posso inviare periodicamente la richiesta di verifica di 2600 iscritti?

    Suggerimenti?

    Grazie!
     
  2. criric

    criric Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    21 Agosto 2010
    Messaggi:
    5.594
    Mi Piace Ricevuti:
    54
    Punteggio:
    48
    Località:
    TN
  3. felino

    felino Utente Attivo

    Registrato:
    12 Dicembre 2013
    Messaggi:
    792
    Mi Piace Ricevuti:
    7
    Punteggio:
    18
    Occupazione:
    Developer Senior
    Località:
    Aci Catena (Catania)
    Sembra molto interessante, secondo voi può essere richiamata molte volte in un arco di tempo breve?
     
  4. maxk

    maxk Nuovo Utente

    Registrato:
    13 Dicembre 2013
    Messaggi:
    1
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ciao, sono l'autore di quello script... non ci sono limiti di richieste ne di tempo, se non i limiti del server dove metterai lo script e i tempi di latenza tecnici per la risposta del server remoto.
     
  5. felino

    felino Utente Attivo

    Registrato:
    12 Dicembre 2013
    Messaggi:
    792
    Mi Piace Ricevuti:
    7
    Punteggio:
    18
    Occupazione:
    Developer Senior
    Località:
    Aci Catena (Catania)
    Grazie davvero!

    Effettuo qualche test e vi faccio sapere.
     
  6. felino

    felino Utente Attivo

    Registrato:
    12 Dicembre 2013
    Messaggi:
    792
    Mi Piace Ricevuti:
    7
    Punteggio:
    18
    Occupazione:
    Developer Senior
    Località:
    Aci Catena (Catania)
    Un'informazione: per il server che riceve la richiesta e come se gli stessi inviando una mail?

    Non vorrei che sommasse la mia richiesta più l'invio delle mail considerandomi come SPAM.

    Grazie.
     
  7. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.124
    Mi Piace Ricevuti:
    86
    Punteggio:
    48
    Occupazione:
    free lance
    Località:
    Lombardia
    ho provato i software suggeriti da "criric", entrambi funzionano bene, ho verificato mail sia aziendali che non,
    la curiosità viene dalla solita nostra Telecom,
    verificato un indirizzo mail di tin.it da alice.it come sender, collegato alla adsl alice casa (IP Telecom) risultato
    550 mail not accepted from blacklisted IP address [IP.IP.IP.IP]
    xxxx@tin.it is invalid The email addresses you entered is not valid
    un altro mistero misterioso della Telecom
    saluti
    Marino

    ps lo stesso indirizzo tin.it viene verificato passando da un alias (ovvero viene verificato l'alias)
     
    Ultima modifica: 21 Dicembre 2013
  8. flameseeker

    flameseeker Utente Attivo

    Registrato:
    27 Novembre 2013
    Messaggi:
    699
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Occupazione:
    Web Developer
    Non so se è il posto giusto, ma volevo condividere una mia riflessione.
    Molto semplicemente credo sia inutile eseguire tutta questa caterva di controlli che rischiano solo di bloccare utenti che fanno soltanto uso di mail provider che, magari, gestiscono le caselle di alias in un modo non proprio verificabile (vedi esempio @tin.it), anche perché servizi di mail temporanee come 10minutemail sono ormai ingrado di superare da un pò di tempo questo tipo di controlli e le blacklist servono a poco se non sono continuamente aggiornate.

    Chiaro, dipende dalle esigenze, ma se si vuol evitare di ricevere spam ci sono sempre alternative come il captcha (o altri escamotage più accessibili) per difendersi dagli invii di dati a puro fine di spam.

    Detto questo, c'è anche da considerare che per l'iscrizione ad un servizio, un altro valido mezzo è l'attivazione dell'account tramite link spedito via email. Se dopo ti inondano di spam il problema tange relativamente poiché periodicamente gli account mai attivati possono essere eliminati senza problemi da un job pianificato in automatico.

    A questo punto, personalmente, la soluzione che in genere adotto e/o che mi sento di consigliare è un qualcosa che si limiti a:
    • verificare l'esistenza del record MX del DNS della email;
    • verificare la validità sintattica della email;
    • sanitizzare la stringa dell'email.
    Riassunta al volo, la funzione risultante potrebbe essere qualcosa di simile a questa:
    PHP:
    function is_email($email) {

        
    $mailSplit explode('@'$email);
        
    $sanitizedEmail filter_var($emailFILTER_SANITIZE_EMAIL);

        return 
    checkdnsrr(array_pop($mailSplit), 'MX') && 
            
    filter_var($emailFILTER_VALIDATE_EMAIL) == $sanitizedEmail?
                
    $sanitizedEmail false;
    }



    var_dump(is_email('xxx@tin.it'));  // string(10) "xxx@tin.it"
    var_dump(is_email('something@gmail.it'));  // string(18) "something@gmail.it"
    var_dump(is_email('invalid@pincomail.boh'));  // bool(false)
    var_dump(is_email('invalìd"syntax@libero.it'));  // bool(false) 
     
  9. felino

    felino Utente Attivo

    Registrato:
    12 Dicembre 2013
    Messaggi:
    792
    Mi Piace Ricevuti:
    7
    Punteggio:
    18
    Occupazione:
    Developer Senior
    Località:
    Aci Catena (Catania)
    Grazie,
    ho effettuato un test del tuo codice, sembra ottimo, ma vorrei farti due domande:
    - posso effettuare la richiesta per un numero considerevole di mail senza problemi?
    - la funzione checkdnsrr mi restituisce diversi codice (21, 25, 34) come faccio a capire di cosa si tratta?

    Grazie.
     
    Ultima modifica: 22 Dicembre 2013
  10. felino

    felino Utente Attivo

    Registrato:
    12 Dicembre 2013
    Messaggi:
    792
    Mi Piace Ricevuti:
    7
    Punteggio:
    18
    Occupazione:
    Developer Senior
    Località:
    Aci Catena (Catania)
    Che figuraccia... string(18) indica il numero di caratteri nella stringa e nient'altro giusto?

    Quindi l'indirizzo non è buono solo quando la funzione mi ritorna false, giusto?

    Grazie.
     
  11. flameseeker

    flameseeker Utente Attivo

    Registrato:
    27 Novembre 2013
    Messaggi:
    699
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Occupazione:
    Web Developer
    "string(18)" è l'output del var_dump, la funzione che ho scritto ritorna l'indirizzo email verificato (se risulta valido), false altrimenti.
    Questo implica che puoi fare controlli molto semplici per determinare se l'indirizzo email è valido:
    PHP:
    $email is_email('email@tizio.it');

    if (!
    $email) {
        echo 
    "Email non valida";
    }
    La funzione si occupa anche di filtrare la stringa dell'email da tutti i caratteri non ammessi che potrebbero trovarcisi dentro, di conseguenza se il risultato della funzione non è false lo puoi andare ad inserire in un istruzione SQL (esempio) senza rischio.

    Che mi sembra strano, sicuro di non star confondendoti ancora con l'output della funzione var_dump() ? Stando a php.net, checkdnsrr()..
     
  12. felino

    felino Utente Attivo

    Registrato:
    12 Dicembre 2013
    Messaggi:
    792
    Mi Piace Ricevuti:
    7
    Punteggio:
    18
    Occupazione:
    Developer Senior
    Località:
    Aci Catena (Catania)
    Grazie per tutti i dettagli e l'ottima spiegazione! :)

    Esatto, gli identificativi numerici sono quelli restituiti dal var_dump.

    Quindi nel caso in cui la funzione is_mail() torni false significa solo che la mail non esiste più, giusto?
     
  13. flameseeker

    flameseeker Utente Attivo

    Registrato:
    27 Novembre 2013
    Messaggi:
    699
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Occupazione:
    Web Developer

    Con la mia funzione significa o che la mail è scritta in un formato non valido o che per esempio @email.it (la parte dopo la chiocciola in un qualunque indirizzo email insomma) non è regolarmente registrato nei dns come server email.

    Con la funzione proposta in precedenza è possibile invece sapere anche se un preciso indirizzo email è realmente esistente presso quel provider, la mia invece questo non te lo dice e prende per buona qualsiasi email se il provider di posta esiste.
     
  14. felino

    felino Utente Attivo

    Registrato:
    12 Dicembre 2013
    Messaggi:
    792
    Mi Piace Ricevuti:
    7
    Punteggio:
    18
    Occupazione:
    Developer Senior
    Località:
    Aci Catena (Catania)
    Esatto, grazie a tutti per l'ottimo supporto e disponibilità.

    Un'info, quando mi viene restituito il seguente messaggio:
    Codice:
    This is an automatically generated Delivery Status Notification.      
    Delivery to the following recipients was aborted after 0 second(s):
    
    Cosa significa?
     
    Ultima modifica: 27 Dicembre 2013
  15. felino

    felino Utente Attivo

    Registrato:
    12 Dicembre 2013
    Messaggi:
    792
    Mi Piace Ricevuti:
    7
    Punteggio:
    18
    Occupazione:
    Developer Senior
    Località:
    Aci Catena (Catania)
    In questo caso posso considerare la casella mail attiva/valida oppure no?

    Grazie.
     
  16. felino

    felino Utente Attivo

    Registrato:
    12 Dicembre 2013
    Messaggi:
    792
    Mi Piace Ricevuti:
    7
    Punteggio:
    18
    Occupazione:
    Developer Senior
    Località:
    Aci Catena (Catania)
    (Scusate, ma purtropo non posso più modificare il vecchio messaggio!)

    Vorrei ricevere del supporto su alcune stringhe che mi vengono restituite per capire effettivamente lo stato della casella messa in esame:

    1) Remote server replied: 550 5.7.1 more information. h45si7530082eeo.46 - gsmtp

    2) Nessun DNS record utilizzabile per il dominio*villavitina.it

    3) Indirizzo non verificato:*mx1.hotmail.com*dice*550 Requested action not taken: mailbox unavailable
    Non esiste più la casella mail?

    4) Indirizzo non verificato:*mx.bedandbreakfastorchidea.com*dice*550 5.1.1*recipient rejected

    5) Indirizzo non verificato:*gmail-smtp-in.l.google.com*dice*550-5.1.1 The email account that you tried to reach does not exist. Please try

    6) Nessun mailserver per il dominio specificato può essere contattato

    7) Errore:*smtp.secureserver.net*dice*554 p3plibsmtp01-09.prod.phx3.secureserver.net bizsmtp RBL Reject -

    Grazie per il supporto.
     
  17. felino

    felino Utente Attivo

    Registrato:
    12 Dicembre 2013
    Messaggi:
    792
    Mi Piace Ricevuti:
    7
    Punteggio:
    18
    Occupazione:
    Developer Senior
    Località:
    Aci Catena (Catania)
    Ho provato ad eseguire lo script con un bel gruppo di indirizzi mail, visualizza solo alcuni risultati delle mail passate e non di tutti.

    Anche il caricamento della pagina si blocca, non da alcun messaggio di timeout.

    Come mai?
     
Sto caricando...

Condividi questa Pagina