web-dev-qa-db-fra.com

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

En attachant des données à mes courriels, j'ai constaté 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.

112
arc_lupus

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 vierge de 8 bits.

214
David Schwartz

Pourquoi l'email est-il plus gros?

Les données sont codées dans base64 qui code 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 d'octets représentant ASCII caractères imprimables 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 ASCII text - "quoted-printable" conçu principalement pour ASCII text 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 des types à plusieurs parties.

50
plugwash