電子メールのサイズが添付ファイルのサイズよりも約3分の1大きいのはなぜですか?


111

メールにデータを添付すると、Thunderbirdが結果のメールの合計サイズを、添付したファイルよりもはるかに大きく計算していることに気付きました。

次に、最近の例を示します。13MBの画像と3.6MBの画像の合計2つの画像は、合計で約17MBです。4行のテキストがありました。その後、Thunderbirdから、合計サイズが22 MBのメールを本当に送信したいかどうかが尋ねられました。

その違いはどこから来たのですか?5MBのテキストは少し聞こえます。


2
これは多くの場合、最大サイズなどに影響することに注意してください。誤解しない限り、Googleメールは通常最大25MBのメールを許可しますが、25MBはエンコード後に計算されるため、エンコード時に25MBの画像を送信することはできません。
バクリウ

4
@Bakuriuのコメントは、Outlook + Exchangeサーバーにも適用されます。根本的な質問は、実際にはなぜ重要なのはメールクライアント(多くの場合、TbirdはOutlookよりも優れているようです)がローカルファイルサイズのみを報告するのかということです。
クリスH

@MarcksThomas私は、すべての知識を簡単に検索できるようにすることに対して、すべての簡単に検索できる知識のソースがあるという魅力に反論したくありません。しかし、それは必要ですか?そうは思いません。-質問はまったく役に立たないとは思わない。サイトに不必要な質問がないようにするための基本的な要件を満たさず、本当に重要なものを見つけるのが難しくなると思う。他のどこでも答えました。それが私たちがすべきことです!-arc_lupus、私はこのサイトに潜んでいるだけなので、通常、私のダウン投票はまだ対処していません。しかし、それはそのままです。
アレクサンダーKosubek

回答:


214

データは17 MiBでした。MiBには1024 KiBがあります。KiBには1024 Bがあります。1バイトに8ビットがあります。つまり、142,606,336ビットです。

Base 64エンコードは、6ビットごとに個別のバイトとしてエンコードします。したがって、約23,767,722バイトが必要です。1024で2回除算すると、22.67 MiBになります。それが、22 MiBの由来です。

電子メールはかなり古い技術であり、8ビットのクリーンパイプを想定していません。


79
その最後の行をデコードするには少し:ベース-64は、AZ、AZ、0-9のように、いくつかの中継機器で文字化けしません「保証安全な文字」の限定セットを使用してテキストとして添付ファイルをエンコードするための方法です
ヨリク

64
そして、Davidの優れた答えの数学を理解したら、添付ファイルのサイズに4/3を掛けて、送信されるメールメッセージ(および実際のテキスト)のサイズを取得できます。
ケント

12
電子メールが完全な8ビットパイプであることを知っていたとしても、基本的にはテキストストリームであるため、エンコードする必要があります。一部の文字は制御機能を提供するため、データに使用しないでください。そうは言っても、より良いエンコード技術はありますが、採用されていません。
ローレンペクテル

3
@LorenPechtelでは、MIMEメッセージにapplication / octet-stream部分を喜んで含めることができます。あなたがしなければならないのは、データ内で発生しない境界を選択することです。
OrangeDog

8
base64が実際に行うことは、元の3バイトごとに4バイトを使用することです。これは同じように聞こえますが、長さは常に4の倍数であり、ビットレベルに理由がないため重要です。
njzk2

50

メールが大きくなるのはなぜですか?

データはbase64、最大3バイトのグループを4つの印刷可能なASCII文字のグループとしてエンコードするようにエンコードされているためです。通常、これらの印刷可能文字のグループは、行に分割されます。

その結果、エンコードされたデータは元のデータのサイズの1倍を超えます。

なぜbase64が使用されるのですか?

電子メールには長い歴史があり、もともとテキストを運ぶために設計されました。ASCII印刷可能文字を表すバイト値のみが、地球上のさまざまな電子メールシステムを確実に通過できます。

そのため、MIMEは、他のデータをASCIIテキストとしてエンコードするための2つのスキームを分割しました。

これらの制限を取り除こうとするSMTPプロトコルの拡張機能があります。まず、1994年の8BITMIMEは、より高いオクテット値を許可しましたが、残念ながら行の長さと行末に関連する制限を削除しなかったため、任意のバイナリデータには適していませんでした。その後、1995年にBINARYMIMEを使用して、任意のバイナリデータを含むメッセージの転送を許可しました。

ただし、これらの標準は広く採用されていません。1つの問題は、メールチェーンの1つのホップがそれらをサポートしているのに、次のホップがサポートしていない場合はどうなるかということです。メールサーバーはそのままではメールを送信できません。配信不能として拒否してバウンスする(ユーザーに受け入れられそうにない)か、変換する(メールサーバーに大幅な追加コードが必要) 。マルチパートタイプでコンテンツ転送エンコーディングを使用しないことに関するMIMEルールにより、変換は特に苦痛になります。


1
一方、なぜyEncがUsenetでUUEを置き換えることに成功したのかと思います。おそらく、バイナリニュースグループは、時折のバイナリメールよりもISPにはるかに高い圧力をかけるためでしょうか?
イゴルスク

2
@igorsk:さらにUsenet / NNは損失のあるものとして提示され理解されました。そこでは記事を公開できますが、すべてのサーバーのすべてのサブスクライバーが必ずしもそれを受け取るわけではありません。前の記事を「十分に」フォローアップして、前の記事を取得していない誰かがあなたのフォローアップを理解できるという引用についての習慣がありました(そしてほとんど残っています。対照的に、ほとんどの(スパマーではない)電子メール送信者は、「システム」が名前付き受信者にメッセージを送信することを期待していましたが、数時間または数日後になることもありました。今日、人々は短い遅延でさえ文句を言います。
-dave_thompson_085
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.