Por que o tamanho do meu e-mail é cerca de um terço maior que o tamanho dos arquivos anexados?

112

Ao anexar dados aos meus e-mails, notei que o Thunderbird calcula o tamanho total do e-mail resultante como muito maior do que os arquivos anexados.

Veja um exemplo recente: duas imagens, uma com 13MB e uma com 3,6MB, devem ter no total aproximadamente 17MB. Havia quatro linhas de texto. O Thunderbird me perguntou se eu realmente queria enviar um e-mail com um tamanho total de 22MB.

De onde vem essa diferença? 5MB de texto soa um pouco demais.

    
por arc_lupus 26.10.2016 / 22:45

2 respostas

214

Seus dados eram 17 MiB. Existem 1024 KiB em um MiB. Existem 1024 B em um KiB. Existem 8 bits em um byte. Então, são 142.606.336 bits.

A codificação Base 64 codifica a cada seis bits como um byte separado. Então precisamos de cerca de 23.767.722 bytes. Dividindo 1024 por duas vezes, obtém-nos 22,67 MiB. Então é daí que vem os 22 MiB.

O e-mail é uma tecnologia bastante antiga e não pressupõe um tubo limpo de 8 bits.

    
por 26.10.2016 / 22:49
50

Por que o e-mail é maior?

Como os dados são codificados em base64 , que codifica grupos de até três bytes como grupos de quatro caracteres ASCII imprimíveis. Normalmente, esses grupos de caracteres imprimíveis são divididos em linhas.

O resultado é que os dados codificados têm pouco mais de 1⅓ vezes o tamanho dos dados originais.

Por que a base64 é usada?

O e-mail tem uma longa história e foi originalmente projetado para transportar texto. Somente valores de byte representando caracteres imprimíveis em ASCII poderiam passar de forma confiável pela grande variedade de sistemas de e-mail no planeta.

Assim, o MIME dividiu dois esquemas para codificar outros dados como texto ASCII - "quoted-printable" projetado para texto ASCII com alguns outros bits, e "BASE64" para dados binários arbitrários.

Houve extensões no protocolo SMTP para tentar remover essas restrições. Primeiro, 8BITMIME em 1994, que permitia valores de octetos mais altos, mas infelizmente não removia limites relacionados a comprimentos de linha e terminações de linha, portanto, não era adequado para dados binários arbitrários; e, em seguida, BINARYMIME em 1995, que permitia a transferência de mensagens contendo dados binários arbitrários.

No entanto, esses padrões não viram adoção generalizada. Um problema é, o que acontece se um salto na cadeia de correio os suporta, mas o próximo salto não? O servidor de e-mail não pode enviar o e-mail como está, deve rejeitá-lo como não entregue e devolvê-lo (o que é improvável que seja aceitável para os usuários) ou convertê-lo (o que requer um código extra significativo no servidor de e-mail) . A conversão é feita especialmente dolorosa pelas regras MIME quanto ao não uso de codificações de transferência de conteúdo em tipos de várias partes.

    
por 28.10.2016 / 04:59