¿Por qué el tamaño de mi correo electrónico es aproximadamente un tercio más grande que el tamaño de sus archivos adjuntos?

111

Al adjuntar datos a mis correos electrónicos, noté que Thunderbird calcula el tamaño total del correo electrónico resultante mucho más grande que los archivos que adjunto.

Aquí hay un ejemplo reciente: dos imágenes, una de 13MB y otra de 3.6MB deberían tener en total aproximadamente 17MB. Había cuatro líneas de texto. Thunderbird luego me preguntó si realmente quería enviar un correo electrónico con un tamaño total de 22 MB.

¿De dónde viene esa diferencia? 5 MB de texto suena un poco demasiado.

arc_lupus
fuente
2
Tenga en cuenta que esto a menudo afecta cosas como el tamaño máximo. Si no me equivoco, el correo de Google generalmente permite un correo electrónico de 25 MB como máximo, pero los 25 MB se calculan después de la codificación, por lo que no puede enviar una imagen de 25 MB con un correo electrónico, porque cuando se codifica sería realmente demasiado grande.
Bakuriu
44
El comentario de @ Bakuriu se aplica también al servidor Outlook + Exchange. Sugiero que la pregunta subyacente es en realidad ¿Por qué los clientes de correo (a menudo, Tbird parece mejor que Outlook nuevamente) informan solo el tamaño del archivo local cuando lo que importa es el tamaño codificado en base64?
Chris H
@MarcksThomas No quiero argumentar en contra de la apelación de tener una fuente de conocimiento fácil de buscar con todo en contra de que todo el conocimiento sea fácil de buscar. ¿Pero es necesario? No lo creo. - No creo que la pregunta no sea útil en absoluto, solo creo que no cumple con los requisitos básicos para mantener el sitio libre de preguntas innecesarias y hace que sea más difícil encontrar las cosas realmente importantes, eso no es respondió en otro lugar. ¡Eso es lo que deberíamos estar haciendo! - arc_lupus, ya que solo acecho en este sitio, por lo general, mi voto negativo aún no se cierra. Pero tal como está, está de pie.
Alexander Kosubek
Relacionado con: superuser.com/questions/568506/...
glenneroo

Respuestas:

214

Sus datos fueron 17 MiB. Hay 1024 KiB en un MiB. Hay 1024 B en un KiB. Hay 8 bits en un byte. Entonces eso es 142,606,336 bits.

La codificación Base 64 codifica cada seis bits como un byte separado. Entonces necesitamos alrededor de 23,767,722 bytes. Dividir por 1024 dos veces nos da 22.67 MiB. De ahí viene el 22 MiB.

El correo electrónico es una tecnología bastante antigua y no asume una tubería limpia de 8 bits.

David Schwartz
fuente
79
Para decodificar un poco la última línea: base-64 es una forma de codificar archivos adjuntos como texto usando un conjunto limitado de "caracteres seguros garantizados" que no se verían distorsionados por algún equipo intermediario, como az, AZ, 0-9
Yorik
64
Y, una vez que comprenda las matemáticas en la excelente respuesta de David, puede simplemente multiplicar el tamaño de los archivos adjuntos por 4/3 para obtener el tamaño del mensaje de correo que se enviará (más el texto real).
Kent el
12
Incluso si el correo electrónico supiera que tiene una canalización completa de 8 bits, tendría que codificarse, ya que es fundamentalmente una secuencia de texto; algunos caracteres cumplen funciones de control y, por lo tanto, no deben aparecer en sus datos. Dicho esto, hay mejores técnicas de codificación pero no se han adoptado.
Loren Pechtel
3
@LorenPechtel felizmente puede tener una aplicación / octeto-flujo en un mensaje MIME. Todo lo que tiene que hacer es elegir un límite que no ocurra en los datos.
OrangeDog
8
lo que realmente hace base64 es usar 4 bytes por cada 3 bytes originales. Si bien esto suena similar, es importante porque la longitud siempre es un múltiplo de 4, y también porque no hay razón para el nivel de bits.
njzk2
50

¿Por qué el correo electrónico es más grande?

Porque los datos están codificados en los base64que codifica grupos de hasta tres bytes como grupos de cuatro caracteres ASCII imprimibles. Por lo general, estos grupos de caracteres imprimibles se dividen en líneas.

El resultado es que los datos codificados tienen poco más de 1⅓ veces el tamaño de los datos originales.

¿Por qué se usa base64?

El correo electrónico tiene una larga historia y fue diseñado originalmente para transportar texto. Solo los valores de bytes que representan caracteres imprimibles ASCII podrían pasar de manera confiable a través de la amplia variedad de sistemas de correo electrónico en el planeta.

Por lo tanto, MIME dividió dos esquemas para codificar otros datos como texto ASCII: "imprimido entre comillas", diseñado principalmente para texto ASCII con algunos otros bits, y "BASE64" para datos binarios arbitrarios.

Ha habido extensiones al protocolo SMTP para intentar eliminar estas restricciones. Primero, 8BITMIME en 1994, que permitía valores de octetos más altos, pero desafortunadamente no eliminaba los límites relacionados con las longitudes y terminaciones de línea, por lo que no era adecuado para datos binarios arbitrarios; y luego BINARYMIME en 1995, que permitió la transferencia de mensajes que contienen datos binarios arbitrarios.

Sin embargo, estos estándares no han tenido una adopción generalizada. Un problema es, ¿qué sucede si un salto en la cadena de correo los admite pero el siguiente salto no? El servidor de correo no puede enviar el correo tal cual, debe rechazarlo como no se puede entregar y rebotarlo (lo que es poco probable que sea aceptable para los usuarios) o convertirlo (lo que requiere un código adicional significativo en el servidor de correo) . La conversión se hace especialmente dolorosa por las reglas MIME con respecto a no usar codificaciones de transferencia de contenido en tipos multiparte.

lavado
fuente
1
Me pregunto por qué yEnc, por otro lado, tuvo bastante éxito en Usenet para desplazar a UUE. ¿Posiblemente porque los grupos de noticias binarios ejercen una presión mucho mayor sobre los ISP que un correo electrónico binario ocasional?
igorsk
2
@igorsk: plus Usenet / NN se presentó y se entendió como con pérdida, donde se podía publicar un artículo y no todos los suscriptores en todos los servidores lo recibirían necesariamente. Hubo (y en gran parte permanecen) costumbres sobre citar en un seguimiento "suficiente" de los artículos anteriores para que alguien que no haya recibido el artículo anterior pueda entender su seguimiento . En contraste, la mayoría de los remitentes de correo electrónico (no spam) esperaban que 'el sistema' enviara su mensaje a los destinatarios nombrados, aunque a veces después de horas o días; hoy la gente se queja incluso de retrasos breves.
dave_thompson_085