Чому розмір мого електронного листа приблизно на третину більший за розмір доданих файлів?


111

Приєднуючи дані до моїх електронних листів, я помітив, що Thunderbird обчислює загальний розмір отриманої електронної пошти набагато більше, ніж файли, які я додав.

Ось останній приклад: два зображення, одне на 13 МБ і одне на 3,6 МБ, загалом має становити приблизно 17 МБ. Було чотири рядки тексту. Тоді Thunderbird запитав мене, чи дійсно я хочу надіслати електронний лист загальним розміром 22 Мб.

Звідки ця різниця? 5 Мб тексту звучить трохи.


2
Зауважте, що це часто впливає на такі речі, як максимальний розмір. Якщо я не помиляюся, пошта Google зазвичай дозволяє отримувати електронну пошту не більше ніж 25 МБ, але 25 МБ обчислюються після кодування, тому ви не можете надсилати зображення 25 МБ електронною поштою, оскільки при кодуванні це насправді буде занадто великим.
Бакуріу

4
@ Коментар Бакуріу також стосується сервера Outlook + Exchange. Я припускаю, що основне питання насправді Чому поштові клієнти (часто Tbird здається кращими, ніж перспективи) повідомляють лише про розмір локального файлу, коли це має значення базовий 64-кодований розмір?
Кріс Н

@MarcksThomas Я не хочу заперечувати проти заклику мати один загальнодоступний джерело знань проти простого пошуку всіх знань. Але чи потрібно це? Я не думаю, що так. - Я не вважаю, що питання зовсім не корисне, я просто думаю, що воно не відповідає основним вимогам, щоб захистити сайт без зайвих питань і ускладнює пошук дійсно важливих речей, це не так відповів деінде. Це ми повинні робити! - arc_lupus, оскільки я лише ховаюсь на цьому сайті, як правило, мій downvote поки не звучить. Але як є, так і стоїть.
Олександр Косубек

Відповіді:


214

Ваші дані склали 17 МіБ. В МіБ є 1024 KiB. В кіБ є 1024 B. У байті є 8 біт. Отже, це 142,606,336 біт.

Базове кодування 64 кодує кожні шість біт як окремий байт. Отже нам потрібно близько 23 767 722 байтів. Ділення на 1024 вдвічі отримує нам 22,67 МіБ. Тож звідси походить 22 МіБ.

Електронна пошта - це досить стара технологія і не передбачає 8-бітної чистої труби.


79
Дещо розшифрувати останній рядок: base-64 - це спосіб кодування вкладених файлів у вигляді тексту, використовуючи обмежений набір "гарантованих безпечних символів", який би не потрапляв у одяг деяким посередницьким обладнанням, наприклад, az, AZ, 0-9
Yorik

64
І, зрозумівши математику в чудовій відповіді Девіда, ви можете просто помножити розмір вкладених файлів на 4/3, щоб отримати розмір повідомлення, яке буде надіслано (плюс власне текст).
Кент

12
Навіть якби електронна пошта знала, що у неї є 8-бітова труба, вона повинна бути кодуючою, оскільки це по суті текстовий потік - деякі символи виконують функції управління, і тому вони не повинні зустрічатися у ваших даних. Як сказано, є кращі методи кодування, але вони не були прийняті.
Лорен Печтель

3
@LorenPechtel ви можете щасливо мати додаток / октет-потокову частину в MIME-повідомленні. Все, що вам потрібно зробити - це вибрати межу, яка не зустрічається в даних.
OrangeDog

8
що насправді base64 , використовує 4 байти на кожні 3 оригінальних байти. Хоча це звучить схоже, це важливо, тому що довжина завжди кратна 4, а також тому, що немає жодних причин для рівня біт.
njzk2

50

Чому електронна пошта більша?

Оскільки дані кодуються, в base64яких кодуються групи до трьох байтів як групи з чотирьох символів для друку ASCII. Зазвичай ці групи символів для друку розбиваються на рядки.

Результат полягає в тому, що закодовані дані трохи більше в 1 раза перевищують розмір вихідних даних.

Чому використовується base64?

Електронна пошта має довгу історію і спочатку була розроблена для перенесення тексту. Лише значення байтів, що представляють символи для друку ASCII, можуть надійно пройти через широкий спектр електронних систем на планеті.

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

Протокол SMTP було розширено, щоб спробувати усунути ці обмеження. По-перше, 8BITMIME в 1994 р., Що дозволило підвищити значення октету, але, на жаль, не усунуло обмежень, пов'язаних з довжиною рядків і закінченнями рядків, тому не було придатним для довільних двійкових даних; а потім BINARYMIME в 1995 р., що дозволило передавати повідомлення, що містять довільні двійкові дані.

Однак ці стандарти не отримали широкого прийняття. Одна з проблем полягає в тому, що станеться, якщо один стрибок у поштовій ланцюжку підтримує їх, але наступний перехід не робить? Тоді поштовий сервер не може надіслати пошту такою, якою є, він повинен або відхилити її як недостачувану та відмовитись (що навряд чи буде прийнятним для користувачів), або перетворити її (що вимагає значного додаткового коду на поштовому сервері) . Конверсія робиться особливо болісною правилами MIME щодо використання кодувань для передачі вмісту на багаточастинні типи.


1
Мені цікаво, чому yEnc, з іншого боку, виявився досить успішним в Usenet при витісненні UUE. Можливо, тому, що бінарні групи новин чинять значно більший тиск на Інтернет-провайдерів, ніж випадкові двійкові електронні листи?
igorsk

2
@igorsk: плюс Usenet / NN був представлений і сприйнятий як втрата, де ви могли опублікувати статтю, і не всі підписники на всіх серверах обов'язково отримали б її. Існували (і в основному залишаються) звичаї щодо цитування у подальшому "достатньому" попередніх статтях, що ваш наступний статтю може зрозуміти той, хто не отримав попередні статті . На відміну від більшості відправників електронної пошти, які не беруть спам, очікується, що «система» отримає своє повідомлення названому одержувачу, хоча іноді через години чи дні; сьогодні люди скаржаться на навіть короткі затримки.
dave_thompson_085
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.