勘違いしがちな内容
メールは Base64でエンコードして送信すれば良い
さて、これのどこに勘違いがあるでしょうか?
まず、MIMEとBase64は以下の通り、全く別々のものだということです。
MIMEとは
Mutipurpose Internet Mail Extensions
(多目的インターネットメール拡張仕様)
→メール通信に使用される規格のこと
この通信規格において、 Base64を用いて件名をエンコードすること が定められている。
Base64
文字列を アルファベット(26) ✕ 2(大文字・小文字)と 数字(0-9) 、特定の記号(?,=など)の合計64文字のみで表した文字列に変換するエンコード手法のこと
→環境依存文字やマルチバイト文字などを使用できない環境に送信する際、文字化けなどを防ぐために利用される規格
よくある問題(改行コード問題)
メールの件名が長すぎて、文字化けを起こしてしまった!!
よく聞く話ですが、Base64には以下の仕様があります。
Base64
・エンコード後の文字列は998文字を超えてはいけない(MUST)
→仕様を策定した当初、998文字を超えると入出力上の最大文字数を超えてしまう危険性が高かったためだそう
・エンコード後の文字列は一行あたり78文字であるべきである(SHOULD)
→これは画面上に表示する際、78文字を超えると表示に崩れが発生する可能性が高かったためだそう
エンコードを行うにあたって 使用している言語によって異なります が、76文字や78文字で改行コードを挿入するのが一般的なエンコード方法になっているようです。
MIME
メール(Base64エンコード後)に以下の文字列を含んではいけない
・スペース
・タブ
・改行コード
一方でMIMEは、 エンコード語の文字列に改行コードが含まれることを想定していません。
結論
メールは Base64でエンコードし、禁則文字(スペース、タブ、改行コード)を削除したデータを送信すれば良い
・Base64のエンコードは あくまでもBase64の仕様に則って行われるもの (MIMEとは関係ない)
・MIMEはBase64を利用しているだけ
Base64でエンコードした上で、MIMEの仕様に沿ったデータ(改行コードを含まない)に加工する必要があるのに、Base64でエンコードして送信すればいい というのは 誤り です。