No estoy preguntando sobre la validación completa del correo electrónico.
Solo quiero saber qué caracteres están permitidos user-name
y server
partes de la dirección de correo electrónico. Esto puede estar demasiado simplificado, tal vez las direcciones de correo electrónico pueden tomar otras formas, pero no me importa. Solo pregunto sobre esta forma simple: user-name@server
(por ejemplo, [email protected]) y los caracteres permitidos en ambas partes.
forms
email
email-validation
email-address
WildWezyr
fuente
fuente
+
está permitido. Me vuelve loco cuando los sitios web no lo permiten porque mi correo electrónico tiene contenido+
y muchos sitios no lo permiten."hello world"@example.com
es válida.Respuestas:
Consulte RFC 5322: Formato de mensaje de Internet y, en menor medida, RFC 5321: Protocolo simple de transferencia de correo .
RFC 822 también cubre direcciones de correo electrónico, pero se ocupa principalmente de su estructura:
Y como de costumbre, Wikipedia tiene un artículo decente sobre direcciones de correo electrónico :
Además de los caracteres ASCII, a partir de 2012 puede usar los caracteres internacionales anteriores
U+007F
, codificados como UTF-8 como se describe en la especificación RFC 6532 y se explica en Wikipedia . Tenga en cuenta que a partir de 2019, estos estándares todavía están marcados como Propuestos, pero se están implementando lentamente. Los cambios en esta especificación esencialmente agregaron caracteres internacionales como caracteres alfanuméricos válidos (texto) sin afectar las reglas sobre caracteres especiales permitidos y restringidos como!#
y@:
.Para la validación, consulte Uso de una expresión regular para validar una dirección de correo electrónico .
La
domain
parte se define de la siguiente manera :fuente
[email protected]
no es una dirección de correo electrónico válida, pero lo[email protected]
es, aunque ambos usan los mismos caracteres.¡Cuidado! Hay un montón de conocimientos podridos en este hilo (cosas que solían ser ciertas y ahora no lo son).
Para evitar rechazos falsos positivos de direcciones de correo electrónico reales en el mundo actual y futuro, y desde cualquier parte del mundo, debe conocer al menos el concepto de alto nivel de RFC 3490 , "Internacionalización de nombres de dominio en aplicaciones (IDNA)". Sé que la gente en EE. UU. Y A a menudo no está al tanto de esto, pero ya está en uso generalizado y en rápido aumento en todo el mundo (principalmente las partes no dominadas por el inglés).
La esencia es que ahora puede usar direcciones como mason @ 日本 .com y wildwezyr@fahrvergnügen.net. No, esto aún no es compatible con todo lo que existe (como muchos se han lamentado anteriormente, incluso las direcciones simples de identificación + estilo qmail a menudo se rechazan erróneamente). Pero hay un RFC, hay una especificación, ahora está respaldado por el IETF y la ICANN, y, lo que es más importante, hay un gran y creciente número de implementaciones que respaldan esta mejora que están actualmente en servicio.
No sabía mucho sobre este desarrollo hasta que me mudé a Japón y comencé a ver direcciones de correo electrónico como hei @ や る .ca y URL de Amazon como esta:
http://www.amazon.co.jp/ エ レ ク ト ロ ニ ク ス - デ ジ タ ル カ メ ラ - ポ ー タ ブ ル オ ー デ ィ オ / b / ref = topnav_storetab_e? ie = UTF8 & node = 3210981
Sé que no quieres enlaces a especificaciones, pero si confías únicamente en el conocimiento desactualizado de los piratas informáticos en los foros de Internet, tu validador de correo electrónico terminará rechazando las direcciones de correo electrónico que los usuarios que no hablan inglés esperan trabajar cada vez más. Para esos usuarios, dicha validación será tan molesta como la forma común de muerte cerebral que todos odiamos, la que no puede manejar un + o un nombre de dominio de tres partes o lo que sea.
Por lo tanto, no digo que no sea una molestia, pero la lista completa de caracteres "permitidos bajo algunas condiciones / ninguna / ninguna" es (casi) todos los caracteres en todos los idiomas. Si desea "aceptar todas las direcciones de correo electrónico válidas (y también muchas inválidas)", debe tener en cuenta IDN, lo que básicamente hace que un enfoque basado en caracteres sea inútil (lo siento), a menos que primero convierta las direcciones de correo electrónico internacionalizadas a Punycode .
Después de hacerlo, puede seguir (la mayoría de) los consejos anteriores.
fuente
El formato de la dirección de correo electrónico es:
local-part@domain-part
(máx. 64 @ 255 caracteres, no más 256 en total).El
local-part
ydomain-part
podría tener un conjunto diferente de caracteres permitidos, pero eso no es todo, ya que hay más reglas.En general, la parte local puede tener estos caracteres ASCII:
abcdefghijklmnopqrstuvwxyz
,ABCDEFGHIJKLMNOPQRSTUVWXYZ
,0123456789
,!#$%&'*+-/=?^_`{|}~
,.
(no primer o último carácter o repetido a menos que se cite),"(),:;<>@[\]
(con algunas restricciones),()
(están permitidos entre paréntesis, por ejemplo(comment)[email protected]
).Parte del dominio:
abcdefghijklmnopqrstuvwxyz
,ABCDEFGHIJKLMNOPQRSTUVWXYZ
,0123456789
,-
(no primer o último carácter),jsmith@[192.168.2.1]
ojsmith@[IPv6:2001:db8::1]
.Estas direcciones de correo electrónico son válidas:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
(parte local de una letra)"much.more unusual"@example.com
"[email protected]"@example.com
"very.(),:;<>[]\".VERY.\"very@\ \"very\".unusual"@strange.example.com
[email protected]
admin@mailserver1
(nombre de dominio local sin dominio de nivel superior)#!$%&'*+-/=?^_`{}|[email protected]
"()<>[]:,;@\\"!#$%&'-/=?^_`{}| ~.a"@example.org
" "@example.org
(espacio entre comillas)example@localhost
(enviado desde localhost)[email protected]
(vea la Lista de dominios de nivel superior de Internet )user@com
user@localserver
user@[IPv6:2001:db8::1]
Y estos ejemplos de inválido:
Abc.example.com
(sin@
personaje)A@b@[email protected]
(solo@
se permite una fuera de las comillas)a"b(c)d,e:f;gi[j\k][email protected]
(ninguno de los caracteres especiales en esta parte local está permitido fuera de las comillas)just"not"[email protected]
(las cadenas entre comillas deben estar separadas por puntos o el único elemento que forma la parte local)this is"not\[email protected]
(los espacios, las comillas y las barras diagonales inversas solo pueden existir dentro de las cadenas entre comillas y precedidas por una barra diagonal inversa)this\ still\"not\[email protected]
(incluso si se escapa (precedido por una barra diagonal inversa), los espacios, las comillas y las barras inclinadas invertidas todavía deben estar entre comillas)[email protected]
(doble punto antes@
); (con advertencia: Gmail deja pasar esto)[email protected]
(doble punto después@
)Fuente: dirección de correo electrónico en Wikipedia
La expresión regular RFC2822 de Perl para validar correos electrónicos:
Ver también: RFC 822 Email Address Parser en PHP .
Las definiciones formales de las direcciones de correo electrónico se encuentran en:
Relacionado:
fuente
[email protected]
y llámelo al día.Wikipedia tiene un buen artículo sobre esto , y la especificación oficial está aquí . De Wikipdia:
fuente
Google hace algo interesante con sus direcciones de gmail.com. Las direcciones de gmail.com solo permiten letras (az), números y puntos (que se ignoran).
por ejemplo, [email protected] es lo mismo que [email protected], y ambas direcciones de correo electrónico se enviarán al mismo buzón. [email protected] también se entrega al mismo buzón.
Entonces, para responder la pregunta, a veces depende del implementador de cuánto de los estándares RFC quieren seguir. El estilo de dirección de gmail.com de Google es compatible con los estándares. Lo hacen de esa manera para evitar confusiones donde diferentes personas tomarían direcciones de correo electrónico similares, por ejemplo
El enlace de wikipedia es una buena referencia sobre lo que generalmente permiten las direcciones de correo electrónico. http://en.wikipedia.org/wiki/Email_address
fuente
{john'doe}@my.server
sin ningún problema. Probado con el servidor hMail también.{piotr'kula}@kula.solutions
: si funciona, recibirá un buen formulario de respuesta automática. De lo contrario no pasará nada.Puedes comenzar desde el artículo de Wikipedia :
fuente
Nombre:
Servidor:
fuente
<>
y[]
? Por ejemplo,"()<>[]:,;@\\\"!#$%&'-/=?^_
{} | ~ .a "@ example.org`?Verifique @ y. y luego envíe un correo electrónico para que lo verifiquen.
Todavía no puedo usar mi dirección de correo electrónico .name en el 20% de los sitios en Internet porque alguien arruinó su validación de correo electrónico o porque es anterior a que las nuevas direcciones sean válidas.
fuente
La respuesta corta es que hay 2 respuestas. Hay un estándar para lo que debe hacer. es decir, un comportamiento que es sabio y lo mantendrá alejado de los problemas. Hay otro estándar (mucho más amplio) para el comportamiento que debe aceptar sin causar problemas. Esta dualidad funciona para enviar y aceptar correos electrónicos, pero tiene una amplia aplicación en la vida.
Para una buena guía de las direcciones que crea; ver: http://www.remote.org/jochen/mail/info/chars.html
Para filtrar correos electrónicos válidos, simplemente pase cualquier cosa lo suficientemente comprensible para ver el siguiente paso. O comience a leer un montón de RFC, precaución, aquí hay dragones.
fuente
Una buena lectura al respecto .
Extracto:
fuente
Joe.\\[email protected]
sin citas. ¿Es esto realmente válido? No parece claro dadas las respuestas aquí, pero lo pregunto porque he visto casos (muy raros) de cadenas de correo electrónico DNS SoA rname que contienen barras invertidas.La respuesta aceptada se refiere a un artículo de Wikipedia cuando se discute la parte local válida de una dirección de correo electrónico, pero Wikipedia no es una autoridad en esto.
IETF RFC 3696 es una autoridad en este asunto, y debe ser consultado en la sección 3. Restricciones a las direcciones de correo electrónico en la página 5:
Como lo han hecho otros, envío una expresión regular que funciona tanto para PHP como para JavaScript para validar las direcciones de correo electrónico:
fuente
Como se puede encontrar en este enlace de Wikipedia
fuente
La respuesta es (casi)
ALL
(ASCII de 7 bits).Si las reglas de inclusión son "... permitidas bajo algunas condiciones / ninguna / ninguna ..."
Simplemente observando una de las varias posibles reglas de inclusión para el texto permitido en la parte de "texto de dominio" en RFC 5322 en la parte superior de la página 17 encontramos:
los únicos tres caracteres faltantes en esta descripción se usan en literal de dominio
[]
, para formar un par entre comillas\
, y el carácter de espacio en blanco(% d32). Con eso se usa todo el rango 32-126 (decimal). Un requisito similar aparece como "qtext" y "ctext". Muchos caracteres de control también están permitidos / utilizados. Una lista de tales caracteres de control aparece en la página 31 sección 4.1 de RFC 5322 como obs-NO-WS-CTL.
Todos estos caracteres de control están permitidos como se indica al comienzo de la sección 3.5:
Y esa regla de inclusión es, por lo tanto, "demasiado amplia". O, en otro sentido, la regla esperada es "demasiado simplista".
fuente
En aras de la simplicidad, desinfecto el envío eliminando todo el texto entre comillas dobles y las comillas dobles que lo rodean antes de la validación, poniendo el quiste en los envíos de direcciones de correo electrónico en función de lo que está prohibido. El hecho de que alguien pueda tener el John ... "La dirección * $ hizzle * Bizzle" .. [email protected] no significa que deba permitirlo en mi sistema. Estamos viviendo en el futuro donde tal vez tome menos tiempo obtener una dirección de correo electrónico gratuita que hacer un buen trabajo limpiando su trasero. Y no es como si los criterios de correo electrónico no estuvieran pegados justo al lado de la entrada diciendo lo que está y no está permitido.
También desinfecta lo que específicamente no está permitido por varios RFC después de que se elimine el material citado. La lista de caracteres y patrones específicamente no permitidos parece ser una lista mucho más corta para probar.
No permitido:
En el ejemplo dado:
Enviar un mensaje de correo electrónico de confirmación al resultado sobrante al intentar agregar o cambiar la dirección de correo electrónico es una buena manera de ver si su código puede manejar la dirección de correo electrónico enviada. Si el correo electrónico pasa la validación después de tantas rondas de desinfección como sea necesario, entonces active esa confirmación. Si una solicitud regresa del enlace de confirmación, entonces el nuevo correo electrónico se puede mover del estado o almacenamiento del purgatorio || temporario || para convertirse en un correo electrónico almacenado de primera clase real y de buena fe.
Si desea ser considerado, puede enviar una notificación de falla o éxito en el cambio de la dirección de correo electrónico a la dirección de correo electrónico anterior. Las configuraciones de cuenta no confirmadas pueden caerse del sistema como intentos fallidos por completo después de un período de tiempo razonable.
No permito correos electrónicos apestosos en mi sistema, tal vez eso sea solo tirar dinero. Pero, el 99.9% de las veces las personas simplemente hacen lo correcto y tienen un correo electrónico que no empuja los límites de conformidad al límite utilizando escenarios de compatibilidad de casos extremos. Tenga cuidado con regex DDoS, este es un lugar donde puede meterse en problemas. Y esto está relacionado con la tercera cosa que hago, pongo un límite a cuánto tiempo estoy dispuesto a procesar cualquier correo electrónico. Si necesita ralentizar mi máquina para que se valide, no está pasando la lógica de mi punto final de API de datos entrantes.
Editar: Esta respuesta siguió siendo criticada por ser "mala", y tal vez se la merecía. Quizás todavía es malo, quizás no.
fuente
En mi PHP utilizo esta verificación
Pruébelo usted mismo http://phpfiddle.org/main/code/9av6-d10r
fuente
Creé esta expresión regular de acuerdo con las pautas de RFC:
fuente
Gmail solo permitirá + signo como carácter especial y, en algunos casos (.), Pero no se permiten otros caracteres especiales en Gmail. RFC dice que puede usar caracteres especiales, pero debe evitar enviar correos a Gmail con caracteres especiales.
fuente