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


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.

Aqui está 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 email com um tamanho total de 22MB.

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


112


origem


Observe que isso geralmente afeta coisas como tamanho máximo. Se não estou enganado, o e-mail do Google geralmente permite e-mail de no máximo 25 MB, mas os 25 MB são computados depois de codificação, então você não pode enviar uma imagem de 25MB com um e-mail, porque quando codificado seria realmente muito grande. - Bakuriu
@ O comentário de Bakuriu também se aplica ao servidor Outlook + Exchange. Eu sugiro que a questão subjacente é realmente Por que os clientes de email (geralmente - o Tbird parece melhor que o outlook novamente) relatam apenas o tamanho do arquivo local quando é o tamanho codificado na base64 que importa? - Chris H
@MarcksThomas Eu não quero argumentar contra o apelo de ter uma fonte de conhecimento abrangente e fácil de ser pesquisada, contra apenas ter todo o conhecimento facilmente pesquisável. Mas é necessário? Acho que não. - Eu não acho que a pergunta não seja útil, eu só acho que não cumpre os requisitos básicos para manter o site livre de questões desnecessárias e torna mais difícil encontrar o material realmente importante, que não é respondeu em qualquer outro lugar. É o que deveríamos estar fazendo! - arc_lupus, como eu apenas espreito neste site, normalmente, meu voto não vale ainda. Mas como está, está. - Alexander Kosubek
Relacionado a: superuser.com/questions/568506/… - glenneroo


Respostas:


Seus dados foram 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 da 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.

E-mail é uma tecnologia muito antiga e não assume um tubo limpo de 8 bits.


214



Para decodificar a última linha um pouco: base-64 é uma maneira de codificar anexos como texto usando um conjunto limitado de "caracteres seguros garantidos" que não seriam distorcidos por algum equipamento intermediário, como a-z, A-Z, 0-9 - Yorik
E, uma vez que você entenda a matemática na excelente resposta de David, basta multiplicar o tamanho dos anexos por 4/3 para obter o tamanho da mensagem de e-mail que será enviada (mais o texto real). - Kent
Mesmo que o e-mail saiba que tem um canal completo de 8 bits, seria necessário codificar, pois é fundamentalmente um fluxo de texto - alguns caracteres servem funções de controle e, portanto, não devem ocorrer em seus dados. Dito isto, há melhores técnicas de codificação, mas elas não foram adotadas. - Loren Pechtel
@LorenPechtel você pode alegremente ter uma parte de aplicação / octeto em uma mensagem MIME. Tudo o que você precisa fazer é escolher um limite que não ocorra nos dados. - OrangeDog
que base64 na realidade usa 4 bytes para cada 3 bytes originais. Embora isso pareça semelhante, é importante porque o comprimento é sempre um múltiplo de 4 e também porque não há motivo para o nível de bits. - njzk2


Por que o email é maior?

Porque os dados são codificados em base64 que codifica grupos de até três bytes como grupos de quatro caracteres ASCII imprimíveis. Tipicamente, esses grupos de caracteres imprimíveis são entã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 através da grande variedade de sistemas de e-mail do planeta.

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

Houve extensões para o protocolo SMTP para tentar remover essas restrições. Primeiro 8BITMIME em 1994 que permitia valores de octeto mais altos mas infelizmente não removia limites relacionados a linhas lenths e terminações de linha, portanto não era adequado para dados binários arbitrários e 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.


50



Pergunto-me por que yEnc, por outro lado, teve bastante sucesso na Usenet ao substituir a UUE. Possivelmente porque grupos de notícias binários colocam uma pressão muito maior nos ISPs do que um e-mail binário ocasional? - igorsk
@igorsk: mais Usenet / NN foi apresentado e entendido como com perdas, onde você poderia publicar um artigo e nem todos os assinantes em todos os servidores necessariamente o receberiam. Havia (e em grande parte permanecem) costumes sobre citações em um acompanhamento 'suficiente' do (s) artigo (s) anterior (es) que seu acompanhamento pode ser compreendido por alguém quem não recebeu o (s) artigo (s) anterior (es). Em contraste, a maioria dos remetentes de e-mail (não spammers) esperava que "o sistema" recebesse sua mensagem para o (s) destinatário (s) nomeado (s), embora às vezes depois de horas ou dias; hoje as pessoas reclamam de pequenos atrasos. - dave_thompson_085