मेरे ईमेल का आकार उसकी संलग्न फ़ाइलों के आकार से लगभग एक तिहाई बड़ा क्यों है?


111

अपने ईमेल में डेटा संलग्न करते समय, मैंने देखा कि थंडरबर्ड परिणामी ईमेल के कुल आकार की गणना करता है, जो कि मैं संलग्न फाइलों से बहुत बड़ा हूं।

यहाँ एक हालिया उदाहरण है: दो चित्र, 13MB पर एक और 3.6MB पर एक कुल मिलाकर लगभग 17MB होना चाहिए। पाठ की चार पंक्तियाँ थीं। थंडरबर्ड ने मुझसे पूछा कि क्या मैं वास्तव में 22 एमबी के कुल आकार के साथ एक ईमेल भेजना चाहता हूं।

वह अंतर कहां से आ रहा है? 5MB का टेक्स्ट थोड़ा बहुत लगता है।


2
ध्यान दें कि यह अक्सर अधिकतम आकार जैसी चीजों को प्रभावित करता है। यदि मैं गलत नहीं हूं तो Google मेल आमतौर पर अधिकतम 25MB के ईमेल की अनुमति देता है, लेकिन 25MB को एन्कोडिंग के बाद गणना की जाती है , इसलिए आप एक ईमेल के साथ 25MB की छवि नहीं भेज सकते, क्योंकि जब एन्कोड किया गया तो यह वास्तव में बहुत बड़ा होगा।
बकुरीउ

4
@ बकुरीउ की टिप्पणी आउटलुक + एक्सचेंज सर्वर पर भी लागू होती है। मेरा सुझाव है कि अंतर्निहित प्रश्न वास्तव में मेल क्लाइंट (अक्सर - Tbird फिर से आउटलुक की तुलना में बेहतर क्यों लगता है) केवल स्थानीय फ़ाइल आकार की रिपोर्ट करता है जब यह आधार 64-एनकोडेड आकार होता है जो मायने रखता है?
क्रिस एच

@MarcksThomas मैं आसानी से खोजा जा सकने वाले सभी ज्ञान के खिलाफ ज्ञान के स्रोत सहित आसानी से उपलब्ध होने की अपील के खिलाफ बहस नहीं करना चाहता। लेकिन क्या यह जरूरी है? मुझे ऐसा नहीं लगता। - मुझे नहीं लगता कि यह सवाल बिल्कुल भी उपयोगी नहीं है, मुझे लगता है कि यह साइट को अनावश्यक सवालों से मुक्त रखने के लिए बुनियादी आवश्यकताओं को पूरा नहीं करता है और यह वास्तव में महत्वपूर्ण सामान खोजने के लिए कठिन बनाता है, ऐसा नहीं है कहीं और जवाब दिया। यही हमें करना चाहिए! - arc_lupus, जैसा कि मैं केवल इस साइट पर दुबकना करता हूं, आमतौर पर, मेरा डाउनवोट अभी तक समाप्त नहीं हुआ है। लेकिन जैसा है, वैसा ही खड़ा है।
अलेक्जेंडर कोसुबेक

से संबंधित: superuser.com/questions/568506/…
glenneroo

जवाबों:


214

आपका डेटा 17 MiB था। एक MiB में 1024 KiB होते हैं। KiB में 1024 B होते हैं। एक बाइट में 8 बिट्स होते हैं। तो वह 142,606,336 बिट्स है।

बेस 64 एनकोडिंग हर छह बिट्स को एक अलग बाइट के रूप में एन्कोड करता है। तो हमें लगभग 23,767,722 बाइट चाहिए। दो बार 1024 से विभाजित करने पर हमें 22.67 MiB मिलता है। तो वहीं से 22 MiB आता है।

ईमेल एक बहुत पुरानी तकनीक है और यह एक 8-बिट क्लीन पाइप नहीं है।


79
डिकोड करने के लिए कि अंतिम पंक्ति एक छोटे से: आधार -64 "गारंटी सुरक्षित अक्षरों" कि इस तरह के az, AZ, 0-9 के रूप में कुछ मध्यस्थ उपकरण, द्वारा ठीक से प्रदर्शित नहीं होगा के एक सीमित सेट का उपयोग कर पाठ के रूप में संलग्नक एन्कोड करने के लिए एक तरीका है
योरिक

64
और, जब आप डेविड के उत्कृष्ट उत्तर में गणित को समझ लेते हैं, तो आप भेजे गए मेल संदेश का आकार प्राप्त करने के लिए अनुलग्नकों के आकार को 4/3 से गुणा कर सकते हैं (साथ ही वास्तविक पाठ)।
कैंट

12
यहां तक ​​कि अगर ईमेल को पता था कि इसमें पूर्ण 8 बिट पाइप है, तो इसे एन्कोडिंग करना होगा क्योंकि यह मूल रूप से एक पाठ स्ट्रीम है - कुछ वर्ण नियंत्रण कार्यों की सेवा करते हैं और इस प्रकार आपके डेटा में नहीं होना चाहिए। कहा जा रहा है कि बेहतर एन्कोडिंग तकनीकें हैं लेकिन उन्हें अपनाया नहीं गया है।
लोरेन Pechtel

3
@LorenPechtel आप MIME संदेश में एप्लिकेशन / ऑक्टेट-स्ट्रीम भाग को खुशी-खुशी पा सकते हैं। आपको बस एक सीमा चुननी है जो डेटा में नहीं होती है।
ऑरेंजडॉग

8
बेस 64 वास्तव में क्या करता है, प्रत्येक 3 मूल बाइट्स के लिए 4 बाइट्स का उपयोग कर रहा है। जबकि यह समान लगता है, यह महत्वपूर्ण है क्योंकि लंबाई हमेशा 4 के एक से अधिक होती है, और इसलिए भी कि बिट स्तर का कोई कारण नहीं है।
njzk2

50

ईमेल बड़ा क्यों है?

क्योंकि डेटा एनकोडेड है base64जिसमें चार प्रिंट करने योग्य ASCII वर्णों के समूह के रूप में अधिकतम तीन बाइट्स के समूहों को एन्कोड किया गया है। आमतौर पर, मुद्रण योग्य वर्णों के ये समूह फिर लाइनों में विभाजित हो जाते हैं।

परिणाम यह है कि एन्कोड किया गया डेटा मूल डेटा के आकार का सिर्फ 1 the गुना अधिक है।

Base64 का उपयोग क्यों किया जाता है?

ईमेल का एक लंबा इतिहास है और मूल रूप से पाठ को ले जाने के लिए डिज़ाइन किया गया था। केवल बाइट मान एएससीआईआई प्रिंट करने योग्य वर्णों का प्रतिनिधित्व करते हैं जो ग्रह पर विभिन्न प्रकार की ईमेल प्रणालियों से गुजर सकते हैं।

इसलिए MIME ने अन्य डेटा को ASCII टेक्स्ट के रूप में एन्कोडिंग करने के लिए दो योजनाओं को विभाजित किया - "उद्धृत-प्रिंट करने योग्य" कुछ अन्य बिट्स के साथ ज्यादातर ASCII टेक्स्ट के लिए डिज़ाइन किया गया, और मनमाने ढंग से बाइनरी डेटा के लिए "BASE64"।

इन प्रतिबंधों को आजमाने और हटाने के लिए एसएमटीपी प्रोटोकॉल के विस्तार हुए हैं। सबसे पहले, 1994 में 8BITMIME, जिसने उच्च ऑक्टेट मूल्यों की अनुमति दी लेकिन दुर्भाग्य से लाइन की लंबाई और लाइन एंडिंग से संबंधित सीमाएं नहीं हटाईं, इसलिए यह मनमाना बाइनरी डेटा के लिए उपयुक्त नहीं था; और फिर 1995 में BINARYMIME, जिसने मनमाने ढंग से बाइनरी डेटा वाले संदेशों के हस्तांतरण की अनुमति दी।

हालांकि, इन मानकों को व्यापक रूप से अपनाते नहीं देखा गया है। एक समस्या यह है कि क्या होता है यदि मेल श्रृंखला में एक हॉप उनका समर्थन करता है लेकिन अगला हॉप नहीं करता है? मेल सर्वर तब के रूप में मेल नहीं भेज सकता है, इसे या तो इसे अस्वीकार्य माना जाना चाहिए और इसे उछाल देना चाहिए (जो उपयोगकर्ताओं के लिए स्वीकार्य होने की संभावना नहीं है), या इसे परिवर्तित करें (जिसे मेल सर्वर में महत्वपूर्ण अतिरिक्त कोड की आवश्यकता है) । मल्टीपार्ट प्रकारों पर सामग्री स्थानांतरण एन्कोडिंग का उपयोग नहीं करने के संबंध में MIME नियमों द्वारा रूपांतरण को विशेष रूप से दर्दनाक बनाया गया है।


1
मुझे आश्चर्य है कि क्यों, दूसरी ओर, यूएनई को विस्थापित करने में यूज़नेट में काफी सफल रहा। संभवतः क्योंकि बाइनरी समाचार समूह एक सामयिक बाइनरी ईमेल की तुलना में आईएसपी पर बहुत अधिक दबाव डालते हैं?
इगोरस

2
@igorsk: इसके अलावा यूज़नेट / एनएन प्रस्तुत किया गया था और हानिपूर्ण के रूप में समझा जाता है, जहां आप एक लेख प्रकाशित कर सकते हैं और सभी सर्वरों पर सभी ग्राहक इसे प्राप्त नहीं करेंगे। पिछले लेख (ओं) के एक अनुवर्ती 'पर्याप्त' में उद्धृत करने के बारे में सीमा शुल्क (और काफी हद तक बने) थे कि आपके अनुवर्ती को किसी ऐसे व्यक्ति द्वारा समझा जा सकता है जिसे पिछले लेख (ओं) को नहीं मिला था । इसके विपरीत सबसे अधिक (nonspammer) ईमेल भेजने वालों को उम्मीद थी कि 'सिस्टम' को अपना संदेश नामित प्राप्तकर्ता (ओं) को मिलेगा, हालांकि कभी-कभी घंटों या दिनों के बाद; आज लोग छोटी देरी के बारे में शिकायत करते हैं।
dave_thompson_085
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.