2011-08-30 15 views
5

A veces los usuarios escriben mal su dominio de correo electrónico y, por lo tanto, ingresan una dirección de correo electrónico incorrecta. Eg. [email protected] en lugar de [email protected]¿Cómo corregir los dominios de las direcciones de correo electrónico que están mal escritos?

¿Alguien ha pensado en esto antes? ¿Alguien puede sugerir cómo manejar este tipo de errores?

+8

El problema es que gmial.com podría ser un nombre de dominio perfectamente válido. Sugeriría que no intentes hacer esto, pero si realmente lo deseas, crea una lista blanca de errores ortográficos para autocorregir y no crees reglas genéricas. – Prescott

+0

Problemas para tratar de hacer esto es que podría terminar enviando correos electrónicos a la persona equivocada y clientes potenciales molestos. –

+1

@Prescott, eso sería cierto para casi cualquier corrector ortográfico. Espero que no esté buscando una autocorrección, lo que por supuesto sería un paso en falso. –

Respuesta

13

¿Alguien puede sugerir cómo manejar este tipo de errores?

Por lo general, debe enviar un correo electrónico de confirmación a la dirección indicada y continuar solo si se ha hecho clic en un enlace de ese correo electrónico.

No hay otra manera buena de tratar con esto - es imposible saber con certeza si gmial.com es un error tipográfico o no, ya que es un dominio válido.

+1

+1 El correo electrónico de confirmación es el mejor. La otra cosa que ve con frecuencia es hacer que lo tipeen dos veces (y espero que no sepan copiar/pegar). – Thilo

+0

También es imposible que Google sepa si usted deletreó su consulta correctamente, sin embargo, con bastante frecuencia puede sugerir reemplazos para una consulta mejorada. –

+0

@Capitán la palabra mágica aquí es ** seguro **. Aunque, por supuesto, no hay nada en contra de sugerir una corrección antes de aceptar una dirección 'gmial.com' y otros tipos de letra comunes, eso es cierto. +1 para su sugerencia –

1

Lo curioso es que la url existe http://www.gmial.com De hecho, le será muy difícil saber si es un error o simplemente un dominio "extraño". Mira las API de Google, porque cuando se escribe algo malo en Google que proponen que "quiso decir ...."

buena suerte

Arnaud

3

En mi opinión, está al borde de imposible llegar con una solución genérica para el caso genérico.

Dicho esto, el error tipográfico más común es el intercambio de dos letras adajcent. Así que es posible que desee comprobar el contenido del personaje para los sitios más grandes gmail, yahoo y qué tiene usted; Basado en eso sugiere una ortografía alternativa si el original no coincide con gmail, etc.

  • No asuma que el usuario tiene la culpa, sugiera alternativas si parece sospechoso en comparación con los nombres comunes. Se mencionó una lista blanca en otra respuesta.
  • Utilice los correos de confirmación si necesita saber que puede obtener una respuesta de esta dirección. No puede suponer que la ortografía que encuentra es un error, para eso sirven los correos de confirmación.
  • Haz que sea muy discreto (se me ocurren los resortes ajax).
0

Como se mencionó anteriormente, no es una buena idea suponer automáticamente que alguien ha escrito mal un correo electrónico. Un mejor enfoque sería implementar una pequeña función de JavaScript que compruebe si el dominio del correo electrónico posiblemente fue mal escrito y alertar al usuario en lugar de asumir que estuvo equivocado desde el principio.

Dame un minuto para crear una pequeña maqueta.

EDITAR: Bien, quizás fue más de un minuto. Eche un vistazo al http://jsbin.com/iyaxuq/8/edit y vea por usted mismo cómo JavaScript puede ayudar a prevenir errores de tipeo comunes. Pruebe correos electrónicos como: [email protected], [email protected], [email protected] (typo of hotmail) y [email protected]

Nota: Utilicé un regex perezoso para validar el correo electrónico. No confíe en él (o para el caso, la mayoría de los regex) para una aplicación real.

0

No puede proporcionar esta funcionalidad de manera que corrija automáticamente los nombres de dominio de correo electrónico mal escritos, porque el nombre que está asumiendo como inválido sería válido. debe esperar que se ingrese cualquier cosa como nombre de dominio de la dirección de correo electrónico.

Sugeriría, si está creando un formulario de inscripción, proporcionar al usuario un menú desplegable con todos los nombres de dominio posibles que usted conoce para que pueda hacer una selección de eso.

Espero que esto ayude.

0

Puede crear una lista de dominios de correo electrónico populares (gmail.com, yahoo.com, ymail.com, etc.) en su db y validar la dirección de correo electrónico que el usuario ingresa en esta lista, y si el dominio se asemeja a uno de estos dominios, debe mostrar una advertencia y permitir al usuario corregirlo si es necesario, no corregirlo automáticamente. Y para comparar el dominio ingresado con los dominios en su lista, puede usar un algoritmo como el usado en la función soundex en SQL Server, que coincide con palabras basadas en si una palabra suena como la segunda.

Editar: puede encontrar more details the SOUNDEX function here.

+0

soundex para un nombre de dominio ?! Me pregunto cómo funcionará eso con nombres como flickr.com ... ¿Lo encontraría SQL si tuviera que ingresar a flicker.com? –

0

Intentar automatizar la corrección de datos incorrectos es una práctica muy peligrosa. En última instancia, solo el usuario puede proporcionar los datos correctos. Sin embargo, existen reglas estrictas para formatear una dirección de correo electrónico: una comprobación de expresiones regulares puede ejecutarse en JavaScript (o utilizando las funciones de pregistro con la misma sintaxis de expresiones regulares), pero tenga en cuenta que hay muchos malos ejemplos en Internet de expresiones regulares que afirman resolver el problema.

Esto debería ser una aplicación bastante completa de un validador 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 

Sin embargo, en la práctica me parece que esto sea adecuada:

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

Entonces, serverside, se puede hacer una MX lookup para verificar que el dominio proporcionado no solo cumpla con los requisitos de formato sino que exista como un sitio de recepción de correo electrónico.

Esto no prueba que exista un buzón con nombre en ese sitio, ni que acepte correos electrónicos; en última instancia, deberá enviar un correo electrónico a esa dirección incluyendo un enlace/contraseña para establecer si la dirección de correo electrónico es válido.

2

En nuestros formularios estamos utilizando una combinación de técnicas. Mientras que los datos malos todavía pueden pasar, las posibilidades son muy reducidas.

Lo primero es hacer una expresión regular de formato que esté comúnmente disponible, solo asegúrese de que sea compatible con RFC. Si esto falla, es bueno ofrecer al usuario un formulario de confirmación en este punto, ya que pueden detectar otros errores mientras resuelve este problema.

La siguiente parte es verificar la parte del dominio TLD. Dado que todos los TLD se pueden conocer, estos son relativamente fáciles de detectar errores ortográficos utilizando algunas pruebas de expresiones regulares. Simplemente mantenga una lista de todos los TLD actuales en una tabla en algún lugar y actualícela periódicamente según sea necesario (tenga en cuenta que esta lista puede ser compleja cuando se trata de TLD internacionales. Si solo se trata del tráfico de EE. UU., Las reglas son muchas más fácil, y eso es algo más que puede filtrar. Por ejemplo, si está vendiendo un servicio solo disponible en los EE. UU., tendría sentido filtrar los correos electrónicos internacionales en el momento del envío del formulario. Somos, entonces esto nos funciona) .

Tercero es hacer algo como lo que sugirió @npclaudiu: busque faltas de ortografía comunes de los hosts de correo de gran nombre (gmail, hotmail, yahoo, etc.) en la parte del dominio y si se detecta un posible impacto, ofrezca un formulario de confirmación para el usuario. (Usted ingresó a [email protected], ¿se refirió a hotmail.com?)

Si sigue estos pasos, puede hacer la búsqueda de MX sugerida por @symcbean.

Finalmente, si todo eso tiene éxito, hay un método (pero aún no lo he probado) para comunicarse con el host SMTP remoto para ver si existe el buzón. Estamos a punto de comenzar a probar esto nosotros mismos. He encontrado el cómo-a para tal aquí: http://www.webdigi.co.uk/blog/2009/how-to-check-if-an-email-address-exists-without-sending-an-email/

+0

Escribí una biblioteca C/C++ que verifica la validez de una dirección de correo electrónico. El RFC para direcciones de correo electrónico es MUY complejo y es realmente difícil de implementar con una expresión regular (si realmente quiere aceptar todo lo que RFC admite). Mi biblioteca es gratuita y se puede encontrar aquí: http://snapwebsites.org/project/libtld - También creo que prohibir las direcciones de correo electrónico internacionales es "peligroso" porque podría tener un correo electrónico como [email protected] y .me no es un nombre de dominio estadounidense (aunque se usa ampliamente aquí como .co, .fm, .ws, etc.) Mi tabla de TLD es 7075 entradas ... ¡que también debe ser bastante compleja! –

6

No existía cuando se hizo esta pregunta, pero recomiendo MailCheck cual sugiere automáticamente correcciones a los correos electrónicos introducidos. Se usa con éxito en grandes compañías.

+0

^Esto, más si necesita el contenedor AngularJS, eche un vistazo a esta respuesta [Directiva AngularJs para ofrecer sugerencias para correos electrónicos mal escritos] (http: // stackoverflow.com/questions/34446950/angularjs-directive-to-offer-suggestions-for-misspelled-emails/34446951 # 34446951) – kape123

+0

La pregunta fue etiquetada como 'php', pero esta es una biblioteca de Javascript. – Flimm

0

Crear una lista de nombres de dominio de correo electrónico común:

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

Cuando un usuario introduce una dirección de correo electrónico, toman el nombre de dominio de la dirección introducida y tomar la distancia Levenstein entre su lista. Si la distancia es 1 (o tal vez hasta 2), solicite al usuario que confirme que esa es la dirección de correo electrónico que indicaron.

Cuestiones relacionadas