Pourquoi la taille de mon courrier électronique est-elle environ un tiers supérieure à celle de ses fichiers joints?

111

En attachant des données à mes courriels, j'ai remarqué que Thunderbird calculait la taille totale de l'email résultant beaucoup plus volumineuse que les fichiers que j'avais joints.

Voici un exemple récent: deux images, une de 13 Mo et une de 3,6 Mo, devraient représenter environ 17 Mo au total. Il y avait quatre lignes de texte. Thunderbird m'a alors demandé si je voulais vraiment envoyer un courrier électronique d'une taille totale de 22 Mo.

D'où vient cette différence? 5 Mo de texte sonne un peu trop.

arc_lupus
la source
2
Notez que cela affecte souvent des choses comme la taille maximale. Si je ne me trompe pas, Google Mail autorise généralement les e-mails de 25 Mo maximum, mais les 25 Mo sont calculés après l' encodage. Vous ne pouvez donc pas envoyer une image de 25 Mo avec un e-mail, car si l'encodé était réellement trop gros.
Bakuriu
4
Le commentaire de @ Bakuriu s'applique également au serveur Outlook + Exchange. Je suggère que la question sous - jacente est en fait Pourquoi les clients de messagerie - rapport (souvent Tbird semble mieux encore que les perspectives) que la taille de fichier local quand il est la taille base64 qui importe?
Chris H
@MarcksThomas Je ne veux pas m'opposer à l'appel d'avoir une source de connaissances facilement consultable, y compris une source de connaissances facilement consultable. Mais est-ce nécessaire? Je ne pense pas. - Je ne pense pas que la question ne soit pas du tout utile, je pense seulement que cela ne répond pas aux exigences de base pour garder le site exempt de questions inutiles et rend plus difficile la recherche d'éléments vraiment importants, ce n'est pas le cas répondu n'importe où ailleurs. C'est ce que nous devrions faire! - arc_lupus, comme je ne vis que sur ce site, généralement, mon vote négatif ne revient pas encore. Mais tel qu'il est, il reste.
Alexander Kosubek
En rapport avec: superuser.com/questions/568506/…
glenneroo

Réponses:

214

Vos données étaient de 17 Mio. Il y a 1024 Ko dans un MiB. Il y a 1024 B dans un KiB. Il y a 8 bits dans un octet. Cela représente donc 142 606 336 bits.

L'encodage en base 64 encode tous les six bits sous la forme d'un octet séparé. Il nous faut donc environ 23 767 722 octets. Diviser par 1024 à deux reprises nous rapporte 22,67 Mio. Donc, c'est de là que vient le MiB.

Le courrier électronique est une technologie assez ancienne et ne suppose pas un tuyau propre 8 bits.

David Schwartz
la source
79
Pour décoder un peu cette dernière ligne: la base 64 est un moyen de coder les pièces jointes sous forme de texte en utilisant un nombre limité de "caractères sécurisés" qui ne seraient pas tronqués par des équipements intermédiaires, tels que az, AZ, 0-9
Yorik
64
Et, une fois que vous avez compris le calcul de l'excellente réponse de David, vous pouvez simplement multiplier la taille des pièces jointes par 4/3 pour obtenir la taille du message électronique qui sera envoyé (plus le texte réel).
Kent
12
Même si la messagerie électronique savait qu'elle disposait d'un canal 8 bits complet, il devrait y avoir un encodage car il s'agit fondamentalement d'un flux de texte - certains caractères ont des fonctions de contrôle et ne doivent donc pas figurer dans vos données. Cela dit, il existe de meilleures techniques d’encodage mais elles n’ont pas été adoptées.
Loren Pechtel
3
@ LorenPechtel, vous pouvez volontiers avoir une partie application / octet-stream dans un message MIME. Tout ce que vous avez à faire est de choisir une limite qui ne figure pas dans les données.
OrangeDog
8
ce que fait réellement base64 , utilise 4 octets pour 3 octets originaux. Bien que cela semble similaire, cela est important car la longueur est toujours un multiple de 4, et aussi parce qu'il n'y a aucune raison d'utiliser le niveau de bit.
njzk2
50

Pourquoi l'email est-il plus gros?

Parce que les données sont codées dans base64lesquelles codent des groupes de trois octets maximum sous forme de groupes de quatre caractères ASCII imprimables. Généralement, ces groupes de caractères imprimables sont ensuite divisés en lignes.

Le résultat est que les données encodées sont à peine plus de 1 fois la taille des données d'origine.

Pourquoi base64 est-il utilisé?

Le courrier électronique a une longue histoire et a été conçu à l'origine pour transporter du texte. Seules les valeurs en octets représentant les caractères imprimables ASCII peuvent passer de manière fiable dans la grande variété de systèmes de messagerie de la planète.

Donc, MIME a divisé deux schémas pour coder d'autres données en tant que texte ASCII - "quoted-printable" (Imprimé entre guillemets) conçu principalement pour du texte ASCII avec quelques autres bits et "BASE64" pour des données binaires arbitraires.

Il existe des extensions du protocole SMTP pour essayer de supprimer ces restrictions. Premièrement, 8BITMIME en 1994, qui permettait des valeurs d’octets plus élevées mais ne supprimait malheureusement pas les limites relatives aux longueurs et aux fins de ligne, ne convenait donc pas aux données binaires arbitraires; puis BINARYMIME en 1995, qui permettait le transfert de messages contenant des données binaires arbitraires.

Cependant, ces normes n’ont pas été largement adoptées. Un problème est que se passe-t-il si un saut dans la chaîne de courrier les prend en charge mais que le saut suivant ne le fait pas? Le serveur de messagerie ne peut alors pas envoyer le courrier tel quel, il doit soit le rejeter comme non distribuable et le renvoyer (ce qui est peu probable pour les utilisateurs), soit le convertir (ce qui nécessite un code supplémentaire important dans le serveur de messagerie). . La conversion est rendue particulièrement pénible par les règles MIME relatives à la non-utilisation des codages de transfert de contenu sur les types à plusieurs parties.

plugwash
la source
1
Je me demande pourquoi yEnc, en revanche, a assez bien réussi à déplacer Usenet. Peut-être parce que les groupes de discussion binaires exercent une pression beaucoup plus forte sur les FAI qu'un courrier électronique binaire occasionnel?
igorsk
2
@igorsk: plus Usenet / NN a été présenté et compris comme une perte, dans lequel vous pouvez publier un article et tous les abonnés de tous les serveurs ne le recevraient pas nécessairement. Il y avait (et reste en grande partie) des coutumes à propos de la citation dans un suivi 'suffisant' du ou des articles précédents pour que votre suivi puisse être compris par quelqu'un qui n'a pas reçu le ou les articles précédents . En revanche, la plupart des expéditeurs d’e-mails (non-spameurs) s’attendaient à ce que "le système" envoie leur message au (x) destinataire (s) nommé (s), bien que parfois après plusieurs heures ou plusieurs jours; Aujourd'hui, les gens se plaignent même de courts délais.
dave_thompson_085