112

Прикрепляя данные к моим электронным письмам, я заметил, что Thunderbird вычисляет общий размер получаемого электронного письма, который намного больше, чем файлы, которые я прикрепил.

Вот недавний пример: два изображения, одно на 13 МБ и одно на 3,6 МБ, должны быть в общей сложности примерно 17 МБ. Там было четыре строки текста. Затем Thunderbird спросил меня, действительно ли я хочу отправить электронное письмо общим объемом 22 МБ.

Откуда эта разница? 5 МБ текста звучит как много.

2 ответа2

214

Ваши данные были 17 МиБ. В МиБ 1024 КиБ. В КиБ 1024 Б В байте 8 бит. Это 142 606 336 бит.

Кодирование Base 64 кодирует каждые шесть битов в виде отдельного байта. Итак, нам нужно около 23 767 722 байта. Деление на 1024 дважды дает нам 22,67 МиБ. Так вот откуда 22 МиБ.

Электронная почта является довольно старой технологией и не предполагает 8-битную чистоту канала.

50

Почему электронная почта больше?

Потому что данные кодируются в base64 который кодирует группы до трех байтов в виде групп из четырех печатных символов ASCII. Как правило, эти группы печатных символов затем разбиваются на строки.

В результате кодированные данные чуть более чем в 1⅓ раз превышают размер исходных данных.

Почему используется base64?

Электронная почта имеет долгую историю и изначально была предназначена для переноса текста. Только байтовые значения, представляющие печатаемые символы ASCII, могут надежно проходить через множество систем электронной почты на планете.

Таким образом, MIME разделил две схемы для кодирования других данных в виде текста ASCII - "цитируемый для печати", предназначенный в основном для текста ASCII с несколькими другими битами, и "BASE64" для произвольных двоичных данных.

Существуют расширения протокола SMTP, чтобы попытаться снять эти ограничения. Во-первых, 8BITMIME в 1994 году, который допускал более высокие значения октетов, но, к сожалению, не снимал ограничений, связанных с длинами строк и окончаниями строк, поэтому не подходил для произвольных двоичных данных; а затем BINARYMIME в 1995 году, что позволило передавать сообщения, содержащие произвольные двоичные данные.

Однако эти стандарты не получили широкого распространения. Одна проблема в том, что произойдет, если один прыжок в почтовой цепочке их поддерживает, а следующий - нет? Почтовый сервер не может отправлять почту как есть, он должен либо отклонить ее как недоставленную и отклонить ее (что вряд ли будет приемлемо для пользователей), либо преобразовать ее (что требует значительного дополнительного кода на почтовом сервере), Преобразование сделано особенно болезненным по правилам MIME, касающимся не использования кодировок передачи контента в составных типах.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .