メールにデータを添付する際に、Thunderbirdは添付したファイルよりもはるかに大きなサイズのメールの合計サイズを計算していることに気付きました
最近の例ですが、13MBと3.6MBの2枚の画像を合計すると約17MBになるはずです。4行のテキストがありました。その後、Thunderbird は、合計サイズが 22MB のメールを本当に送りたいかどうかを尋ねてきました
その違いはどこから来るのでしょうか?5MBのテキストはちょっと多すぎるような気がします
111 arc_lupus 2016-10-26
あなたのデータは17MiBでした。1MiBに1024KiBあります。KiBに1024Bあります。1バイトに8ビットあります。つまり142,606,336ビットですね
ベース64エンコーディングでは、6ビットごとに個別のバイトとしてエンコードされます。ですから、約23,767,722バイト必要になります。1024で2回割ると22.67MBになります。これが22.67MBの由来です
メールはかなり古い技術で、8ビットのクリーンパイプを想定していません
213 David Schwartz 2016-10-26
なぜメールが大きいのか?
なぜなら、データは、最大3バイトのグループを4つの印刷可能なASCII文字のグループとしてエンコードするbase64
でエンコードされているからです。一般的に、これらの印刷可能な文字のグループは、その後、行に分割されます
その結果、符号化されたデータは、元のデータの1⅓倍強の大きさになっています
なぜbase64が使われているのか?
電子メールには長い歴史があり、元々はテキストを運ぶために設計されたものです。ASCIIの印刷可能な文字を表すバイト値だけが、地球上の多種多様な電子メールシステムを確実に通過することができました
そこでMIMEは、他のデータをASCIIテキストとしてエンコードするための2つのスキームを分割しました – ほとんどの場合、ASCIIテキストに他のビットをいくつか加えて設計された「quoted-printable」と、任意のバイナリデータ用の「BASE64」です
SMTPプロトコルには、これらの制限を除去するための拡張が行われてきました。最初の1994年の8BITMIMEは、より高いオクテット値を許可しましたが、残念ながら行の長さと行末に関連する制限を取り除けなかったため、任意のバイナリデータには適していませんでした
しかし、これらの標準はまだ広く採用されていません。一つの問題は、メールチェーンの一つのホップがこれらをサポートしていても、次のホップがサポートしていない場合はどうなるかということです。その場合、メールサーバはメールをそのまま送信することができません。 メールサーバはメールを未配達として拒否してバウンスさせるか (これはユーザに受け入れられる可能性が低い)、変換するか (これはメールサーバにかなりの余分なコードを必要とします) のいずれかをしなければなりません。変換は、マルチパートタイプでコンテンツ転送エンコーディングを使用しないことに関する MIME ルールによって、特に苦痛なものになります
50 plugwash 2016-10-28