E-posta adresimin boyutu neden ekli dosya boyutundan üçte biri kadar büyük?


111

E-postalarıma veri eklerken, Thunderbird'ün ortaya çıkan e-postanın toplam boyutunu, eklediğim dosyalardan daha büyük olarak hesapladığını fark ettim.

İşte yeni bir örnek: iki resim, biri 13 MB, biri 3.6 MB olmak üzere toplamda yaklaşık 17 MB olmalıdır. Dört satır metin vardı. Thunderbird daha sonra toplam 22 MB boyutunda bir e-posta göndermek isteyip istemediğimi sordu.

Bu fark nereden geliyor? 5 MB'lık metin biraz daha kulağa geliyor.


2
Bunun genellikle maksimum boyut gibi şeyleri etkilediğini unutmayın. Yanılmıyorsam, Google posta genellikle en çok 25 MB’lik bir e-postaya izin verir, ancak 25 MB kodlamadan sonra hesaplanır , bu nedenle e-postayla 25 MB’lık bir resim gönderemezsiniz, çünkü kodlandığında çok büyük olur.
Bakuriu,

4
@ Bakuriu'nun yorumu, Outlook + Exchange sunucusu için de geçerlidir. Asıl
Chris H,

@HarcksThomas Tüm kolayca öğrenilebilen bir bilgi kaynağına sahip olan tüm bilgilerin kolayca aranabilir olmasına karşı temyize karşı çıkmak istemiyorum. Fakat gerekli mi? Sanmıyorum - Bu sorunun hiç işe yaramadığını sanmıyorum, sadece siteyi gereksiz sorulardan uzak tutmanın temel şartlarını yerine getirmediğini ve gerçekten önemli şeyleri bulmayı zorlaştırdığını düşünüyorum, bu değil başka bir yere cevap verdi. Yapmamız gereken şey bu! - arc_lupus, sadece bu sitede gizlendiğim için, genellikle, benim aşağı oyum henüz gelmedi. Ama olduğu gibi duruyor.
Alexander Kosubek

Yanıtlar:


214

Verileriniz 17 MiB idi. Bir MiB'de 1024 KiB var. Bir KiB'de 1024 B vardır. Bir baytta 8 bit vardır. Yani bu 142,606,336 bit.

Base 64 kodlaması, her altı biti ayrı bir bayt olarak kodlar. Bu yüzden yaklaşık 23,767,722 bayta ihtiyacımız var. 1024'e iki kez bölerek bizi 22.67 MiB alır. Demek 22 MiB'nin geldiği yer burası.

E-posta oldukça eski bir teknolojidir ve 8 bitlik temiz bir boru kullanmaz.


79
Bu son satırın biraz kodunu çözmek için: base-64, az, AZ, 0-9 gibi bazı ara cihazlarla uğraşmayacak sınırlı bir "garantili güvenli karakter" seti kullanarak ekleri metin olarak kodlamanın bir yoludur
Yorik

64
Ve, David'in mükemmel cevabındaki matematiği anladıktan sonra, gönderilecek posta mesajının boyutunu (artı gerçek metni) almak için eklerin boyutunu 4/3 ile çarpabilirsiniz.
Kent

12
E-posta tam 8 bitlik bir borunun olduğunu bilse bile, temelde bir metin akışı olduğu için kodlama yapılması gerekir - bazı karakterler kontrol işlevlerine hizmet eder ve bu nedenle verilerinizde gerçekleşmemelidir. Olduğu söyleniyor, daha iyi kodlama teknikleri var ama bunlar benimsenmedi.
Loren Pechtel

3
@LorenPechtel, bir MIME mesajında ​​mutlu bir şekilde bir uygulama / octet-stream kısmına sahip olabilir. Tek yapmanız gereken, verilerde bulunmayan bir sınır seçmek.
OrangeDog

8
base64 aslında ne işe yarıyorsa , her 3 orijinal bayt için 4 bayt kullanıyor. Bu benzer görünse de, uzunluk her zaman 4'ün katı olduğundan ve ayrıca bit seviyesinin bir nedeni olmadığı için önemlidir.
njzk2

50

E-posta neden daha büyük?

Çünkü veri, base64basılabilir dört ASCII karakter grubu olarak en fazla üç byte'lık grupları kodlayan kodlanır . Genellikle, bu yazdırılabilir karakter grupları daha sonra satırlara bölünür.

Sonuç, kodlanmış verilerin orijinal verilerin boyutunun 1⅓ katından biraz fazla olmasıdır.

Base64 neden kullanılıyor?

E-posta uzun bir geçmişe sahip ve başlangıçta metin taşımak için tasarlanmıştır. Yalnızca ASCII yazdırılabilir karakterlerini temsil eden bayt değerleri, gezegendeki çok çeşitli e-posta sistemlerinden güvenilir bir şekilde geçebildi.

Bu yüzden MIME, diğer verileri ASCII metni olarak kodlamak için iki şema ayırdı - çoğunlukla birkaç bit içeren ASCII metni için tasarlanan "yazdırılabilir" ve isteğe bağlı ikili veriler için "BASE64".

Bu kısıtlamaları denemek ve kaldırmak için SMTP protokolünde uzantılar yapılmıştır. İlk olarak, 1994 yılında 8BITMIME, daha yüksek oktet değerlerine izin verdi, ancak ne yazık ki satır uzunlukları ve satır sonları ile ilgili limitleri kaldırmadı, bu yüzden rastgele ikili veriler için uygun değildi; ve daha sonra 1995'te rasgele ikili veri içeren mesajların transferine izin veren BINARYMIME.

Bununla birlikte, bu standartların yaygın bir şekilde benimsenmediğini görmekteyiz. Bir sorun, posta zincirindeki bir atlama onları destekliyor ancak bir sonraki atlama yapmazsa ne olur? Posta sunucusu daha sonra postayı olduğu gibi gönderemez, ya teslim edilemez olarak reddetmeli ve geri göndermelidir (kullanıcıların kabul edemeyeceği gibi) veya dönüştürmeli (posta sunucusunda önemli ek kod gerektirir) . Dönüşüm, çok parçalı tiplerde içerik aktarım kodlamalarının kullanılmamasına ilişkin olarak MIME kurallarına göre özellikle acı vericidir.


1
Öte yandan, neden yEnc'in Usenet'te UUE'yu yerinden etmekte oldukça başarılı olduğunu merak ediyorum. Muhtemelen ikili haber grupları, İSS'ler üzerine arada bir ikili e-posta adresinden daha yüksek bir baskı oluşturduğundan?
igorsk

2
@ igork: artı Usenet / NN, bir makale yayınlayabileceğiniz ve tüm sunuculardaki tüm abonelerin zorunlu olarak alamayacakları bir yerde yayınlayabileceğiniz, kayıplı olarak sunuldu ve anlaşıldı. Önceki makalenin / makalelerin 'yeterince' takibinde alıntı yapılmasıyla ilgili alıntı yapılmasıyla ilgili gelenekler vardı (ve bunlardan büyük ölçüde devam etmekteydi ) . Buna karşılık, çoğu (nonspammer) e-posta gönderen, 'sistem' in, bazen saatler veya günlerden sonra da, mesajlarını belirtilen alıcılara ileteceğini; Bugün insanlar kısa gecikmelerden bile şikayet ediyorlar.
dave_thompson_085
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.