¿Cuál es el límite de longitud del asunto del correo electrónico?

227

¿Cuántos caracteres pueden estar en la línea de asunto del correo electrónico de Internet? Tuve un escaneo de The RFC por correo electrónico, pero no pude ver específicamente cuánto tiempo se permitió. Tengo un colega que quiere validarlo programáticamente.

Si no hay un límite formal, ¿cuál es una buena extensión en la práctica para sugerir?

Scott Ferguson
fuente
17
255 es el límite en algunos productos de venta de entradas (Jira, por ejemplo) y parece ser el límite en Outlook, Thunderbird y Gmail parecen truncarse después de 130.
Reconbot
1
RFC2047 se adapta mejor a la validación, veo un montón de software de envío masivo que produce contenido RFC2047 no válido.
Jasen
3
En las bases de datos es muy común (una tradición se puede decir) definir la longitud de campos de texto no especialmente largos o cortos como VARCHAR (255) o nombres equivalentes similares. Si se presenta una cadena más larga, generará un error o simplemente se truncará hasta el límite. Es por eso que Jira y Outlook, como se menciona aquí, no admiten más caracteres. Por razones de compatibilidad, no recomendaría 255+ Simplemente agregue un poco de crema en el pastel de 5 años;)
Alph.Dev

Respuestas:

195

Consulte RFC 2822 , sección 2.1.1 para comenzar.

Hay dos límites que este estándar pone en el número de caracteres en una línea. Cada línea de caracteres NO DEBE tener más de 998 caracteres, y NO DEBE tener más de 78 caracteres, excluyendo el CRLF.

Como indica el RFC más adelante, puede evitar este límite (no es lo que debería) doblando el tema en varias líneas.

Cada campo de encabezado es lógicamente una sola línea de caracteres que comprende el nombre del campo, los dos puntos y el cuerpo del campo. Sin embargo, por conveniencia, y para lidiar con las limitaciones de caracteres 998/78 por línea, la parte del cuerpo del campo de un campo de encabezado se puede dividir en una representación de varias líneas; Esto se llama "plegado". La regla general es que siempre que este estándar permita el espacio en blanco plegable (no simplemente caracteres WSP), se puede insertar un CRLF antes que cualquier WSP. Por ejemplo, el campo de encabezado:

       Subject: This is a test

se puede representar como:

       Subject: This
        is a test

La recomendación de no más de 78 caracteres en el encabezado del asunto suena razonable. Nadie quiere desplazarse para ver toda la línea de asunto, y algo importante podría quedar cortado a la derecha.

Michael Petrotta
fuente
8
La versión actual de la especificación del FMI, RFC 5322, se puede encontrar aquí: tools.ietf.org/html/rfc5322#section-2.1.1
james.garriss
66
Esta respuesta solo aborda el límite de longitud de línea, no el límite de longitud total.
Chalky
1
Hay RFC y hay usabilidad. Artículo de Jakob Nielsen Líneas de asunto del correo electrónico: 5 consejos para atraer a los lectores se resumen como: "Céntrese en los primeros 40 caracteres. Las líneas de asunto descriptivas y bien escritas permiten a los destinatarios tomar una decisión informada para obtener más detalles o seguir adelante".
Édouard Lopez
3
Para aclarar, no hay límite de longitud para las líneas de asunto, ya que los estándares permiten encabezados de más de 998 bytes envolviendo un solo encabezado en tantas líneas como desee. La recomendación de ~ 80 caracteres es de hecho razonable. Si estás escribiendo un cliente de correo electrónico que usted tiene que ser capaz de hacer frente a los sujetos ridículamente largas sin romper de una manera horrible, preferentemente por truncamiento cuando se muestran como parte de una lista.
thomasrutter
1
... Este también sería el caso con cualquier otro campo de encabezado (por ejemplo, "De"). PD: si se pregunta por qué 78 en lugar de 80, o por qué 998 en lugar de 1000, es porque el estándar de correo electrónico especifica CRLF (\ r \ n) como separador, que es de dos bytes, por lo que es 1000 bytes por línea, de los cuales 998 es El encabezado en sí. Tenga en cuenta también que el nombre del encabezado y cualquier espacio después de los dos puntos, por ejemplo, "Asunto:" también tiene que encajar en esto.
thomasrutter
20

RFC2322 indica que el encabezado de asunto "no tiene restricción de longitud"

pero para producir encabezados largos pero necesita dividirlo en varias líneas, un proceso llamado "plegado".

sujeto se define como "no estructurado" en RFC 5322

Aquí hay algunas citas (indique [...] cosas que omití)

3.6.5. Informational Fields
  The informational fields are all optional.  The "Subject:" and
  "Comments:" fields are unstructured fields as defined in section
  2.2.1, [...]

2.2.1. Unstructured Header Field Bodies
  Some field bodies in this specification are defined simply as
  "unstructured" (which is specified in section 3.2.5 as any printable
  US-ASCII characters plus white space characters) with no further
  restrictions.  These are referred to as unstructured field bodies.
  Semantically, unstructured field bodies are simply to be treated as a
  single line of characters with no further processing (except for
  "folding" and "unfolding" as described in section 2.2.3).

2.2.3  [...]  An unfolded header field has no length restriction and
  therefore may be indeterminately long.
Jasen
fuente
@jasen, ¿conoces una herramienta para doblar?
mahdi
cualquier biblioteca de correo electrónico bien escrita lo hará. mi favorito esc-client
Jasen
Esta es la respuesta correcta. La segunda parte de la pregunta "buena duración en la práctica" depende totalmente de su aplicación. Si guarda los correos electrónicos recibidos, debe admitir longitudes ilimitadas.
Rob el
4

después de alguna prueba: si envía un correo electrónico a un cliente de Outlook, y el asunto es> 77 caracteres, y necesita usar "=?ISO" dentro del asunto (en mi caso debido a los acentos), entonces OutLook "cortará" el asunto en medio de y engrane todo lo que viene después, incluido el texto del cuerpo, los archivos adjuntos, etc. ¡todo en una malla!

Tengo varios ejemplos como este:

Subject: =?ISO-8859-1?Q?Actas de la obra N=BA.20100154 (Expediente N=BA.20100182) "NUEVA RED FERROVIARIA.=

TRAMO=20BEASAIN=20OESTE(Pedido=20PC10/00123-125),=20BEASAIN".?=

A:

Como puede ver, en la línea de asunto se cortó en char 78 con un "=" seguido de 2 o 3 avances de línea, luego continuó con el resto del tema mal.

Me lo informaron varios clientes que usaban OutLook, otros clientes de correo electrónico tratan esos temas de acuerdo.

Si no tiene ISO, no hace daño, pero si lo agrega a su tema para ser bueno con RFC, entonces recibe esta sorpresa de OutLook. Bit si no agrega los ISO, entonces el correo electrónico del iPhone no lo entenderá (y adjuntar archivos con nombres que usen dichos caracteres no funcionará en los iPhone).

Sergio
fuente
55
Hay muchos problemas con el tema que establezca: 1. Los espacios deben codificarse con '_', 2. Una 'palabra codificada' (=? Charset? Q / B? Data? =) No puede tener más de 75 caracteres de longitud (rfc2047). 3º No puede escapar de una nueva línea con '=' char al final de la línea (la codificación QP del encabezado es diferente que la QP del cuerpo). La conclusión es: no es culpa de Outlook.
Pawel Lesnikowski
2

No creo que haya un límite formal aquí, y estoy bastante seguro de que tampoco hay un límite estricto especificado en el RFC, como descubrió.

Creo que algunas limitaciones bastante comunes para las líneas de asunto en general (no solo el correo electrónico) son:

  • 80 caracteres
  • 128 caracteres
  • 256 caracteres

Obviamente, quieres llegar a algo que sea razonable. Si está escribiendo un cliente de correo electrónico, es posible que desee ir con algo así como 256 caracteres, y obviamente probar exhaustivamente con los grandes servidores comerciales para asegurarse de que sirven su correo correctamente.

¡Espero que esto ayude!

Ed Altorfer
fuente
13
No hay una razón particular por la que 256 sea mejor que 250, 300 o 372. Hace mucho tiempo que usamos bytes para longitudes de cadena.
Greg Hewgill el
44
255 es el límite real de algunos productos (Jira y perspectivas, por ejemplo)
reconbot el
55
Esta respuesta es incorrecta. RFC 5322, la versión actual de la especificación IMF, define claramente una longitud máxima de línea. Ver la respuesta de @ Michael.
james.garriss
2
+1 La limitación de longitud de línea es para todas las líneas del mensaje, pero no veo nada que diga que no puede tener un asunto que abarque varias líneas (lo que implica que no hay limitación en el número de caracteres para el asunto). Ver 2.2.3 y el ejemplo que sigue directamente después.
Cypher
1
VARCHAR 255 es probablemente la longitud de columna de datos más común (y más eficiente) en MySQL / MariaDB. Los bytes sin duda siguen siendo relevantes. MySQL usará 1 byte para almacenar la longitud si es menor que 256, o más de lo contrario. Eche un vistazo a cómo C ++ implementa std :: string si cree que las longitudes de cadena no son muy importantes y se cuentan en bytes.
ebyrob
0

Lo importante es qué mecanismo está utilizando para enviar el correo electrónico. La mayoría de las bibliotecas modernas (es decir, System.Net.Mail) le ocultarán el plegado. Simplemente coloca una línea de asunto de correo electrónico muy larga sin (CR, LF, HTAB). Si comienzas a intentar hacer tu propio plegado, todas las apuestas están canceladas. Comenzará a informar errores. Entonces, si tiene este problema, simplemente filtre CR, LF, HTAB y deje que la biblioteca haga el trabajo por usted. Por lo general, también puede establecer el tipo de texto de codificación como un campo separado. No hay necesidad de codificación iso en la línea de asunto.

kariato
fuente