2011-08-30 26 views
5

A volte gli utenti digitavano male il loro dominio di posta elettronica e quindi inserivano un indirizzo email errato. Es. [email protected] piuttosto che [email protected]Come correggere i domini degli indirizzi di posta elettronica errati?

Qualcuno ci ha pensato prima? Qualcuno può suggerire come gestire questo tipo di errori?

+8

Il problema è che gmial.com potrebbe essere un nome di dominio perfettamente valido. Ti suggerisco di non provare a farlo, ma se vuoi davvero, crea una whitelist di errori ortografici in modo da correggerti automaticamente e non creare regole generiche. – Prescott

+0

Problemi con il tentativo di fare questo è che si potrebbe finire con l'invio di e-mail alla persona sbagliata e fastidiosi potenziali clienti. –

+1

@Prescott, questo sarebbe vero per quasi tutti i correttori ortografici. Spero che non stia cercando un auto-corretto, che ovviamente sarebbe un passo falso. –

risposta

13

Qualcuno può suggerire come gestire questo tipo di errori?

Di solito si invia una e-mail di conferma all'indirizzo indicato e si procede solo se è stato fatto clic su un collegamento in tale e-mail.

Non c'è altro buon modo per gestire questo problema: è impossibile dire con certezza se gmial.com è un errore di battitura o meno, visto che si tratta di un dominio valido.

+1

+1 L'e-mail di conferma è la migliore. L'altra cosa che vedi spesso è che li digiti due volte (e spero che non sappiano come copiare/incollare). – Thilo

+0

È anche impossibile per Google sapere se hai digitato correttamente la tua query, tuttavia molto spesso può suggerire sostituzioni per una query migliorata. –

+0

@Captain la parola magica qui è ** di sicuro **. Sebbene ovviamente non ci sia nulla di contrario a suggerire una correzione prima di accettare un indirizzo 'gmial.com' e altri errori comuni, è vero. +1 per il tuo suggerimento –

1

La cosa divertente è che l'URL esiste http://www.gmial.com In effetti sarebbe molto difficile per te sapere se è un errore o solo un dominio "strano". Guarda le Google API, perché quando si digita qualcosa di sbagliato in Google propongono voi "volevi dire ...."

buona fortuna

Arnaud

3

A mio parere è confinante con impossibile venire con una soluzione generica per il caso generico.

Detto questo, l'errore più comune è quello di scambiare due lettere adatte. Quindi potresti voler controllare il contenuto dei personaggi per i maggiori siti gmail, yahoo e cosa hai; Sulla base di tale suggerire una grafia alternativa se l'originale non corrisponde gmail ecc

  • Non date per scontato che l'utente è in difetto, suggerire alternative se sembra sospetto rispetto ai nomi comuni. Una white-list è stata menzionata in un'altra risposta.
  • Utilizzare i messaggi di conferma se è necessario sapere che è possibile ottenere una risposta da questo indirizzo. Non si può presumere che l'ortografia trovata sia errata, questo è il significato delle mail di conferma.
  • Renderlo molto non invadente (ajax viene in mente).
0

Come accennato in precedenza, non è una buona idea presumere automaticamente che qualcuno abbia digitato erroneamente un'e-mail. Un approccio migliore sarebbe quello di implementare una piccola funzione javascript che controlla se il dominio dell'e-mail è stato digitato erroneamente e avvisare l'utente invece di presumere che erano sbagliati dall'inizio.

Dammi un minuto per creare un piccolo mockup.

MODIFICA: OK, quindi forse è stato più di un minuto. Dai uno sguardo allo http://jsbin.com/iyaxuq/8/edit e scopri di persona come javascript può aiutare a prevenire errori di battitura comuni. Prova e-mail come [email protected], [email protected].com, [email protected] (typo of hotmail) e [email protected]

Nota: Ho usato un regex pigro per convalidare l'e-mail. Non fare affidamento su di esso (o, peraltro, sulla maggior parte delle regex) per una vera app.

0

Non è possibile fornire questa funzionalità in modo tale da correggere automaticamente i nomi di dominio di posta elettronica errati, poiché il nome che si presume non sia valido, sarebbe valido. dovresti aspettarti che tutto venga inserito come nome di dominio di un indirizzo email.

Vorrei suggerire, se si sta creando un modulo di registrazione, fornire all'utente un elenco a discesa con tutti i possibili nomi di dominio di cui si è a conoscenza in modo che possa effettuare una selezione da tale.

Spero che questo aiuti.

0

È possibile creare un elenco di domini di posta elettronica popolari (gmail.com, yahoo.com, ymail.com, ecc.) Nel db e convalidare l'indirizzo di posta elettronica che l'utente immette in questo elenco e, se il dominio è simile a uno di questi domini, dovresti mostrare un avviso e consentire all'utente di correggerlo se necessario, non correggerlo automaticamente. E per confrontare il dominio inserito con i domini nell'elenco, è possibile utilizzare un algoritmo come quello utilizzato nella funzione soundex in SQL Server, che corrisponde alle parole in base a se una parola suona come il secondo.

Modifica: è possibile trovare more details the SOUNDEX function here.

+0

soundex per un nome di dominio ?! Mi chiedo come funzionerà con nomi come flickr.com ... SQL lo troverebbe se inserissi invece flicker.com? –

0

Provare ad automatizzare la correzione di dati errati è una pratica molto pericolosa. In definitiva, solo l'utente può fornire i dati corretti. Tuttavia ci sono regole rigide sulla formattazione di un indirizzo e-mail - un controllo regex può essere eseguito in javascript (o usando le funzioni preg con la stessa sintassi regex) - ma si noti che ci sono molti cattivi esempi su internet delle regex che affermano di risolvere il problema.

questo dovrebbe essere un'implementazione abbastanza completo di un validatore RFC2822 ADDR_SPEC:

/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/gi 

Tuttavia, in pratica, trovo che questo sia un adeguato:

/^[a-z0-9\._%+!$&*=^|~#%'`?{}/\-][email protected]([a-z0-9\-]+\.){1,}([a-z]{2,6})$/gi 

Poi, serverside, si può fare un MX lookup per verificare che il dominio fornito non solo soddisfi i requisiti di formattazione ma esista come sito di ricezione di e-mail.

Ciò non dimostra che la cassetta postale denominata esista in quel sito, né che stia accettando e-mail: in definitiva, è necessario inviare una e-mail a tale indirizzo includendo un link/password di richiamo per stabilire se l'indirizzo e-mail è valido.

2

Nelle nostre forme utilizziamo una combinazione di tecniche. Mentre i dati cattivi possono ancora passare, le possibilità sono notevolmente ridotte.

Per prima cosa è necessario eseguire una semplice espressione regolare che sia comunemente disponibile, ma accertarsi che sia conforme a RFC. Se ciò non riesce, è utile offrire all'utente un modulo di conferma a questo punto, poiché potrebbero rilevare altri errori durante la risoluzione del problema.

La parte successiva è controllare la parte TLD del dominio. Dal momento che tutti i TLD possono essere conosciuti, questi sono relativamente facili da analizzare per errori di ortografia usando alcuni test regex. Basta tenere un elenco di tutti i TLD attuali in una tabella da qualche parte e aggiornarlo di volta in volta in base alle necessità (attenzione, questo elenco può diventare complesso quando si tratta di TLD internazionali. Se si ha a che fare solo con il traffico USA, le regole sono molto più semplice, ed è un'altra cosa che puoi filtrare. Ad esempio, se stai vendendo un servizio disponibile solo negli Stati Uniti, sarebbe opportuno filtrare le email internazionali al momento dell'invio del modulo. .

Terzo è fare qualcosa di simile a quanto suggerito da @npclaudiu: cercare i comuni errori di ortografia degli host di posta più grandi (gmail, hotmail, yahoo, ecc.) Nella parte del dominio e se viene rilevato un possibile hit, offrire un modulo di conferma per l'utente. (Hai inserito [email protected], intendevi hotmail.com?)

Se superi questi passaggi, puoi eseguire la ricerca MX suggerita da @symcbean.

Infine, se tutto ciò ha esito positivo, esiste un metodo (ma non l'ho ancora testato) per comunicare con l'host SMTP remoto per verificare se la cassetta postale esiste. Stiamo per iniziare a testarlo da soli. Ho trovato l'how-to per tale qui: http://www.webdigi.co.uk/blog/2009/how-to-check-if-an-email-address-exists-without-sending-an-email/

+0

Ho scritto una libreria C/C++ che controlla la validità di un indirizzo email. La RFC per gli indirizzi email è MOLTO complessa ed è davvero difficile da implementare con una regex (se si vuole davvero accettare tutto ciò che supporta la RFC). La mia libreria è gratuita e può essere trovata qui: http://snapwebsites.org/project/libtld - Inoltre penso che proibire indirizzi e-mail internazionali sia "pericoloso" perché potrei avere un'email come [email protected] e .me non è un nome di dominio statunitense (anche se ampiamente usato qui come .co, .fm, .ws, ecc.) La mia tabella TLD è 7075 voci ... che deve essere anche abbastanza complessa! –

6

E non esisteva quando questa domanda è stato chiesto, ma vi consiglio MailCheck che auto-suggerisce le correzioni alle e-mail inseriti. È usato con successo da grandi aziende.

+0

^Questo, più se avete bisogno del wrapper AngularJS, date un'occhiata a questa risposta [direttiva AngularJs per offrire suggerimenti per e-mail con errori di ortografia] (http: // stackoverflow.it/questions/34446950/angularjs-direttiva-per-offrire-suggerimenti-per-email-errate/34446951 # 34446951) – kape123

+0

La domanda è stata taggata 'php', ma questa è una libreria Javascript. – Flimm

0

creare una lista di nomi di dominio di posta elettronica comune:

hotmail.com 
gmail.com 
googlemail.com 
... etc 

Quando un utente inserisce un indirizzo email, prendono il nome di dominio l'indirizzo inserito e prendere la distanza Levenstein tra la vostra lista. Se la distanza è 1 (o forse fino a 2), chiedete all'utente di confermare che è l'indirizzo email che intendevano.

Problemi correlati