Mengapa ukuran email saya sekitar sepertiga lebih besar dari ukuran file yang dilampirkan?

111

Saat melampirkan data ke email saya, saya perhatikan bahwa Thunderbird menghitung ukuran total email yang dihasilkan jauh lebih besar daripada file yang saya lampirkan.

Berikut adalah contoh terbaru: dua gambar, satu di 13MB dan satu di 3.6MB totalnya harus sekitar 17MB. Ada empat baris teks. Thunderbird kemudian bertanya apakah saya benar-benar ingin mengirim email dengan ukuran total 22MB.

Dari mana perbedaan itu berasal? Teks 5MB terdengar agak banyak.

arc_lupus
sumber
2
Perhatikan bahwa ini sering mempengaruhi hal-hal seperti ukuran maksimum. Jika saya tidak salah, Google mail biasanya mengizinkan email paling banyak 25MB, tetapi 25MB dihitung setelah penyandian, jadi Anda tidak dapat mengirim gambar 25MB dengan email, karena ketika disandikan itu sebenarnya akan terlalu besar.
Bakuriu
4
Komentar @ Bakuriu juga berlaku untuk server Outlook + Exchange. Saya menyarankan bahwa pertanyaan yang mendasari sebenarnya Mengapa klien email (sering - Tbird tampaknya lebih baik daripada prospek lagi) hanya melaporkan ukuran file lokal ketika itu ukuran encoding base64 yang penting?
Chris H
@MarcksThomas Saya tidak ingin berdebat dengan daya tarik memiliki satu sumber pengetahuan yang mencakup semua yang mudah dicari terhadap hanya memiliki semua pengetahuan yang mudah dicari. Tetapi apakah itu perlu? Saya kira tidak. - Saya tidak berpikir bahwa pertanyaan itu tidak berguna sama sekali, saya hanya berpikir itu tidak memenuhi persyaratan dasar untuk menjaga situs bebas dari pertanyaan yang tidak perlu dan membuatnya lebih sulit untuk menemukan hal-hal yang sangat penting, yang tidak dijawab di tempat lain. Itu yang harus kita lakukan! - arc_lupus, karena saya hanya mengintai di situs ini, biasanya, downvote saya belum muncul. Tetapi sebagaimana adanya, ia berdiri.
Alexander Kosubek
Terkait dengan: superuser.com/questions/568506/...
glenneroo

Jawaban:

214

Data Anda adalah 17 MiB. Ada 1024 KiB dalam MiB. Ada 1024 B dalam KiB. Ada 8 bit dalam satu byte. Jadi itu 142.606.336 bit.

Encoding basis 64 mengkodekan setiap enam bit sebagai byte terpisah. Jadi kita membutuhkan sekitar 23.767.722 byte. Dibagi 1024 dua kali menghasilkan kita 22,67 MiB. Jadi dari situlah 22 MiB berasal.

Email adalah teknologi yang cukup tua dan tidak menganggap pipa bersih 8-bit.

David Schwartz
sumber
79
Untuk sedikit menguraikan kode baris terakhir itu: base-64 adalah cara untuk menyandikan lampiran sebagai teks menggunakan seperangkat terbatas "karakter aman yang dijamin" yang tidak akan dikacaukan oleh beberapa peralatan perantara, seperti az, AZ, 0-9
Yorik
64
Dan, setelah Anda memahami matematika dalam jawaban David yang sangat baik, Anda bisa mengalikan ukuran lampiran dengan 4/3 untuk mendapatkan ukuran pesan email yang akan dikirim (ditambah teks sebenarnya).
Kent
12
Bahkan jika email tahu itu memiliki pipa 8 bit penuh harus ada encoding karena pada dasarnya merupakan aliran teks - beberapa karakter melayani fungsi kontrol dan karenanya tidak boleh terjadi dalam data Anda. Yang sedang berkata, ada teknik pengkodean yang lebih baik tetapi mereka belum diadopsi.
Loren Pechtel
3
@LorenPechtel Anda dapat dengan senang hati memiliki bagian aplikasi / octet-stream dalam pesan MIME. Yang harus Anda lakukan adalah memilih batas yang tidak terjadi dalam data.
OrangeDog
8
apa base64 sebenarnya , menggunakan 4 byte untuk setiap 3 byte asli. Meskipun kedengarannya mirip, ini penting karena panjang selalu kelipatan 4, dan juga karena tidak ada alasan untuk tingkat bit.
njzk2
50

Mengapa emailnya lebih besar?

Karena data dikodekan di base64mana mengkodekan kelompok hingga tiga byte sebagai kelompok empat karakter ASCII yang dapat dicetak. Biasanya, kelompok karakter yang dapat dicetak ini kemudian dibagi menjadi beberapa baris.

Hasilnya adalah bahwa data yang dikodekan lebih dari 1⅓ kali ukuran data asli.

Mengapa base64 digunakan?

Email memiliki sejarah panjang dan awalnya dirancang untuk membawa teks. Hanya nilai byte yang mewakili karakter ASCII yang dapat dicetak yang dapat dipercaya melewati beragam sistem email di planet ini.

Jadi MIME membagi dua skema untuk pengkodean data lain sebagai teks ASCII - "dikutip-cetak" yang dirancang untuk sebagian besar teks ASCII dengan beberapa bit lainnya, dan "BASE64" untuk data biner sewenang-wenang.

Ada ekstensi ke protokol SMTP untuk mencoba dan menghapus pembatasan ini. Pertama, 8BITMIME pada tahun 1994, yang memungkinkan nilai oktet lebih tinggi tetapi sayangnya tidak menghilangkan batas terkait dengan panjang garis dan ujung garis, sehingga tidak cocok untuk data biner sewenang-wenang; dan kemudian BINARYMIME pada tahun 1995, yang memungkinkan transfer pesan yang berisi data biner sewenang-wenang.

Namun, standar-standar ini belum melihat adopsi secara luas. Satu masalah adalah, apa yang terjadi jika satu lompatan dalam rantai surat mendukung mereka tetapi lompatan berikutnya tidak? Server email kemudian tidak dapat mengirim email apa adanya, ia harus menolaknya sebagai tidak terkirim dan memantulkannya (yang kemungkinan tidak dapat diterima oleh pengguna), atau mengonversinya (yang memerlukan kode tambahan signifikan di server email) . Konversi menjadi sangat menyakitkan oleh aturan MIME tentang tidak menggunakan penyandian transfer konten pada tipe multi-bagian.

plugwash
sumber
1
Saya bertanya-tanya mengapa Anda, di sisi lain, cukup sukses di Usenet untuk menggantikan UUE. Mungkin karena newsgroup biner memberikan tekanan yang jauh lebih tinggi pada ISP daripada email biner sesekali?
igorsk
2
@igorsk: plus Usenet / NN disajikan dan dipahami sebagai lossy, di mana Anda dapat menerbitkan artikel dan tidak semua pelanggan di semua server akan menerimanya. Ada (dan sebagian besar masih ada) kebiasaan tentang mengutip dalam tindak lanjut 'cukup' dari artikel sebelumnya sehingga tindak lanjut Anda dapat dipahami oleh seseorang yang tidak mendapatkan artikel sebelumnya . Sebaliknya, sebagian besar pengirim email yang tidak mengharapkan mengharapkan 'sistem' akan mengirimkan pesan mereka kepada penerima yang disebutkan, meskipun kadang-kadang setelah berjam-jam atau berhari-hari; hari ini orang mengeluh tentang keterlambatan yang singkat.
dave_thompson_085