Validità indirizzo email

felino

Utente Attivo
12 Dic 2013
886
9
18
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!
 

maxk

Nuovo Utente
13 Dic 2013
1
0
0
Sembra molto interessante, secondo voi può essere richiamata molte volte in un arco di tempo breve?
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.
 

felino

Utente Attivo
12 Dic 2013
886
9
18
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.
 

marino51

Utente Attivo
28 Feb 2013
2.744
141
63
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:

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
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($email, FILTER_SANITIZE_EMAIL);

	return checkdnsrr(array_pop($mailSplit), 'MX') && 
		filter_var($email, FILTER_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)
 

felino

Utente Attivo
12 Dic 2013
886
9
18
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:

felino

Utente Attivo
12 Dic 2013
886
9
18
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.
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Che figuraccia... string(18) indica il numero di caratteri nella stringa e nient'altro giusto?
"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.

- la funzione checkdnsrr mi restituisce diversi codice (21, 25, 34) come faccio a capire di cosa si tratta?
Che mi sembra strano, sicuro di non star confondendoti ancora con l'output della funzione var_dump() ? Stando a php.net, checkdnsrr()..
Returns TRUE if any records are found; returns FALSE if no records were found or if an error occurred.
 

felino

Utente Attivo
12 Dic 2013
886
9
18
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?
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
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?

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.
 

felino

Utente Attivo
12 Dic 2013
886
9
18
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:

felino

Utente Attivo
12 Dic 2013
886
9
18
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.
 

felino

Utente Attivo
12 Dic 2013
886
9
18
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?