Al enviar contenido de correo electrónico, es necesario configurar el encabezado "Codificación de transferencia de contenido". Observé muchos encabezados de correos electrónicos que recibí. Algunos correos electrónicos usan "7 bits" y otros usan "8 bits".
¿Cuál es la diferencia entre estos dos? ¿Qué se recomienda? ¿Se requiere alguna codificación especial para el cuerpo del correo electrónico para configurar estos encabezados?
Respuestas:
Puede ser un poco denso de leer, pero la sección "Codificación de transferencia de contenido" de RFC 1341 tiene todos los detalles:
http://www.w3.org/Protocols/rfc1341/5_Content-Transfer-Encoding.html
La situación va de mal en peor. Aquí está mi resumen:
Antecedentes
SMTP, por definición (RFC 821), limita el correo a líneas de 1000 caracteres de 7 bits cada una. Eso significa que ninguno de los bytes que envíe por la tubería puede tener el bit más significativo ("orden más alto") establecido en "1".
El contenido que queremos enviar a menudo no obedecerá esta restricción de forma inherente. Piense en un archivo de imagen o un archivo de texto que contiene caracteres Unicode: los bytes de estos archivos a menudo tendrán su octavo bit establecido en "1". SMTP no permite esto, por lo que debe usar "codificación de transferencia" para describir cómo ha solucionado la falta de coincidencia.
Los valores del
Content-Transfer-Encoding
encabezado describen la regla que eligió para resolver este problema.Codificación de 7 bits
7bit
simplemente significa "Mis datos constan solo de caracteres US-ASCII, que solo usan los 7 bits inferiores para cada carácter". Básicamente, estás garantizando que todos los bytes de tu contenido ya se adhieren a las restricciones de SMTP, por lo que no necesita un tratamiento especial. Puede leerlo como está.Tenga en cuenta que cuando elige
7bit
, acepta que todas las líneas de su contenido tienen menos de 1000 caracteres de longitud.Siempre que su contenido se adhiera a esta regla,
7bit
es la mejor codificación de transferencia, ya que no es necesario ningún trabajo adicional; simplemente lee / escribe los bytes a medida que salen de la tubería. También es fácil observar el7bit
contenido y darle sentido. La idea aquí es que si solo está escribiendo en "texto en inglés sin formato", estará bien. Pero eso no era cierto en 2005 y no es cierto hoy.Codificación de 8 bits
8bit
significa "Mis datos pueden incluir caracteres ASCII extendidos; pueden usar el octavo bit (más alto) para indicar caracteres especiales fuera de los caracteres estándar US-ASCII de 7 bits". Al igual que con7bit
, todavía hay un límite de línea de 1000 caracteres.8bit
, al igual que7bit
, en realidad no realiza ninguna transformación de los bytes a medida que se escriben o leen desde el cable. Simplemente significa que no está garantizando que ninguno de los bytes tenga el bit más alto establecido en "1".Esto parece un paso adelante
7bit
, ya que le brinda más libertad en su contenido. Sin embargo, RFC 1341 contiene este tidbit:RFC 1341 salió hace más de 20 años. Desde entonces, hemos obtenido extensiones MIME de 8 bits en RFC 6152 . Pero incluso entonces, pueden aplicarse límites de línea:
Codificación binaria
binary
es lo mismo que8bit
, excepto que no hay restricción de longitud de línea. Aún puede incluir los caracteres que desee y no hay codificación adicional. Similar a8bit
, RFC 1341 establece que no es realmente una codificación de transferencia de codificación legítima. RFC 3030 extendió esto conBINARYMIME
.Cotizado Imprimible
Antes de la
8BITMIME
extensión, era necesario que hubiera una forma de enviar contenido que no pudiera ser7bit
por SMTP. Los archivos HTML (que pueden tener más de 1000 líneas de caracteres) y los archivos con caracteres internacionales son buenos ejemplos de esto. Laquoted-printable
codificación (definida en la Sección 5.1 de RFC 1341) está diseñada para manejar esto. Hace dos cosas:Quoted Printable, debido a las líneas cortas y de escape, es mucho más difícil de leer para un humano que
7bit
o8bit
, pero admite una gama mucho más amplia de contenido posible.Codificación Base64
Si sus datos son en gran parte sin texto (por ejemplo, un archivo de imagen), no tiene muchas opciones.
7bit
está fuera de la mesa.8bit
ybinary
no eran compatibles antes de las RFC de extensión MIME.quoted-printable
funcionaría, pero es realmente ineficiente (cada byte estará representado por 3 caracteres).base64
es una buena solución para este tipo de datos. Codifica 3 bytes sin procesar como 4 caracteres US-ASCII, lo cual es relativamente eficiente. RFC 1341 limita aún más la longitud de línea de losbase64
datos codificados a 76 caracteres para que quepan en un mensaje SMTP, pero eso es relativamente fácil de administrar cuando solo está dividiendo o concatenando caracteres arbitrarios en longitudes fijas.La gran desventaja es que los
base64
datos codificados son prácticamente ilegibles para los humanos, incluso si es solo texto "sin formato" debajo.fuente