メールサイズの上限が10MBなのに10MBの添付ファイルが送れない理由

A. Base64へのエンコードで添付ファイルが10MBを超えてしまうから


メールデータは一旦全てテキストデータに置き換えられて送信されます。
添付ファイル(バイナリデータ)をテキストに置き換えるときにサイズが大きくなってしまうのでメールサイズの上限ギリギリのファイルを添付するとエラーになって送信できません。

Base64 - Wikipedia

Base64は、データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式である。MIMEによって規定されていて、7ビットのデータしか扱うことの出来ない電子メールにて広く利用されている。具体的には、A–Z, a–z, 0–9 までの62文字と、記号2つ (+ , /) 、さらにパディング(余った部分を詰める)のための記号として = が用いられる。この変換によって、データ量は4/3になる。また、MIMEの基準では76文字ごとに改行コードが入るため、この分の2バイトを計算に入れるとデータ量は約138%となる。


Base64エンコードする際に約138%のサイズになってしまうので、実質添付できるファイルサイズは以下のようになります。

メールサイズの上限設定 実際に添付できるファイルサイズ
10MB 7.2MB
5MB 3.6MB
2MB 1.4MB

もしあなたがネットワーク管理者だったら?

通常、ネットワーク管理者はメールサーバで設定した値をそのままアナウンスすることが多いと思いますので、

管理者「上限10MBって言えば実質7MBくらいだろJK」
      / ̄ ̄\                        ユーザ「上限10MBなのに10MBのファイルが添付できないお!」
    /ノ(  ゝ 、_,ノヽ        r'´ ゙ヽ      /`ヽ          
    | ⌒(( ●)(●)        ヽ   ヽ从从/   /        \   /\
.    |     (__人__) /⌒l     \  \/  /て       (●)liil(●) ノ( \
     |     ` ⌒´ノ |`'''|    �堯 魁拭  �  そ     / (__人__)  ⌒   \
    / ⌒ヽ     }  |  |      ,)/  / \ く     |   |!!il|!|!l|         |
   /  へ  \   }__/ /      /   /\  \      \i⌒ヽェェ|      /
 / / |      ノ   ノ    /   / YYY\   \     \ \  /⌒,/´
( _ ノ    |      \´    /   /       \   \     / \ \/  /l
       |       \_,/   /         \   \_/    \__ノ |\
       .|            /            \             |) )
       ヽ          /               \           ,r' /
         \      , '´                   `' ,        /ー'′
          \     (                     )     /
            \    \                  /    / 

ということが割とあると思います。実際あんな企業やこんな企業でも・・・。

・・・

利用者にやさしいメールシステムは、「アナウンスされたメールサイズの上限=添付ファイルサイズ」であるべきだと思います。

メールサーバ上のメールサイズの上限を以下のような値にすると実際に添付できるファイルサイズに合わせることができます。メールサーバを設定するときは一考されてはいかがでしょうか。

メールサイズの上限設定 実際に添付できるファイルサイズ
10x1.38≒14MB 10MB
5x1.38≒7MB 5MB
2x1.38≒3MB 2MB

逆に、アナウンスする数値を低めにしておくのも有りでしょう。

もしあなたが経営者だったら?

メールは対外的なシステムなので、日々社員の方々が「あーうち上限10MBなんですけど7MBくらいしか受け取れないんですよ。申し訳ありませんが再送していただけますか?」というやりとりをしていると想像してみてください。