Solución:
De RFC 5321, sección 2.3.11:
La convención estándar de nomenclatura de buzones de correo se define como “[email protected]”; el uso contemporáneo permite un conjunto mucho más amplio de aplicaciones que los simples” nombres de usuario “. En consecuencia, y debido a un largo historial de problemas cuando los hosts intermedios han intentado optimizar el transporte modificándolos, la parte local DEBE interpretarse y asignarse semántica solo por el host especificado en la parte de dominio de la dirección.
Así que sí, la parte antes de la “@” podría distinguir entre mayúsculas y minúsculas, ya que está completamente bajo el control del sistema host. Sin embargo, en la práctica, ningún sistema de correo ampliamente utilizado distingue las diferentes direcciones según el caso.
Sin embargo, la parte después del signo @ es el dominio y, de acuerdo con RFC 1035, sección 3.1,
“Los servidores de nombres y los resolutores deben comparar [domains] de una manera que no distingue entre mayúsculas y minúsculas “
En resumen, puede tratar las direcciones de correo electrónico sin distinción entre mayúsculas y minúsculas.
Sé que esta es una pregunta antigua, pero solo quiero comentar aquí: Hasta cierto punto, las direcciones de correo electrónico SON sensibles a mayúsculas y minúsculas, la mayoría de los usuarios sería “muy imprudente” si usaran activamente una dirección de correo electrónico que requiera mayúsculas. Pronto dejarían de usar la dirección porque perderían gran parte de su correo. (A menos que tengan una razón específica para complicar las cosas, y solo esperan correo de remitentes específicos que conocen).
Esto se debe a que existen tanto humanos imperfectos como software imperfecto, (¡sorpresa!) Que supondrá que todo el correo electrónico está en minúsculas, y por esta razón estos humanos y software enviarán mensajes utilizando una “versión en minúsculas” de la dirección, independientemente de cómo se haya proporcionado. a ellos. Si el destinatario no puede recibir dichos mensajes, no pasará mucho tiempo antes de que se dé cuenta de que faltan muchos y cambie a una dirección de correo electrónico solo en minúsculas, o configure su servidor para que no distinga entre mayúsculas y minúsculas.
Es muy tarde para esta publicación, pero tengo algo ligeramente diferente que decir …
>> "Are email addresses case sensitive?"
Bien, “Depende…” (TM)
Algunas organizaciones piensan que es una buena idea y sus servidores de correo electrónico imponen la distinción entre mayúsculas y minúsculas.
Entonces, para esos lugares locos, “Sí, los correos electrónicos distinguen entre mayúsculas y minúsculas”.
Nota: El hecho de que una especificación diga que puede hacer algo no significa que sea una buena idea hacerlo.
El principio de KISS sugiere que nuestro los sistemas utilizan correos electrónicos que no distinguen entre mayúsculas y minúsculas.
Mientras que el principio de robustez sugiere que aceptamos correos electrónicos que distinguen entre mayúsculas y minúsculas.
Solución:
- Almacene correos electrónicos con distinción entre mayúsculas y minúsculas
- Envíe correos electrónicos con distinción entre mayúsculas y minúsculas
- Realizar búsquedas internas sin distinción entre mayúsculas y minúsculas
Esto significaría que si este correo electrónico ya existe: [email protected]
… y aparece otro usuario y quiere utilizar este correo electrónico: [email protected]
… que nuestra lógica de búsqueda que no distingue entre mayúsculas y minúsculas devolvería un mensaje de error “Ese correo electrónico ya existe”.
Ahora, tienes que tomar una decisión: ¿Esa solución es adecuada en su caso?
De lo contrario, puede cobrar una tarifa de conveniencia a aquellos clientes que exigen soporte para sus correos electrónicos sensibles a mayúsculas y minúsculas e implementar una lógica personalizada que permita la [email protected] en su sistema, incluso si [email protected] ya existe.
En cuyo caso, su lógica de búsqueda / validación de correo electrónico podría parecerse a algo como este pseudocódigo:
if (user.paidEmailFee) {
// case sensitive email
query = "select * from users where email LIKE ' + user.email + '"
} else {
// case insensitive email
query = "select * from users where email ILIKE ' + user.email + '"
}
De esta manera, en su mayor parte está imponiendo la insensibilidad a mayúsculas y minúsculas, pero permitiendo que los clientes paguen por este soporte si están utilizando sistemas de correo electrónico que admiten tales tonterías.
ps ILIKE es una palabra clave de PostgreSQL: http://www.postgresql.org/docs/9.2/static/functions-matching.html