スキップしてメイン コンテンツに移動

投稿

ラベル(SMTP)が付いた投稿を表示しています

そもそも添付ファイル名の規約ってRFCでどうなってるの?

Outlookから送ったメールの添付ファイル名が、iPhoneで「 =?utf-8?Q?...?= 」と無残に文字化けしてしまう現象。その元凶を紐解くと、1990年代から続く 「RFC規格のねじれ」 と、Microsoftによる 「独自の割り切り」 という深い闇に突き当たります。 前回の検証記事( Outlookのエンコード選択 / iPhoneでの5nの法則 )を補完する形で、そもそもRFC(インターネット標準)では添付ファイル名がどう定義されているのかを解説します。 1. 添付ファイル名を定義する「RFC 2183」 メールにファイルを添付する際、ヘッダーには Content-Disposition というフィールドが使われます。これを定義しているのが RFC 2183 です。 Content-Disposition: attachment; filename="example.txt" ここで重要なのは、このRFC 2183が制定された1997年当時、 filename パラメータには 「7bitのASCII文字(英数字)」しか想定されていなかった という点です。日本語などのマルチバイト文字をどう扱うかは、この規格内には書かれていません。 2. 日本語対応の救世主「RFC 2231」 そこで、ファイル名に日本語を使ったり、長すぎる名前を分割したりするために作られたのが RFC 2231 です。これが現在、世界標準の「正しい作法」です。 特徴: filename*=utf-8''%... という形式を使い、文字コードを明示する。 利点: ヘッダーの文法を壊さずに、安全に非ASCII文字を伝送できる。 3. なぜ問題が起きるのか? ― Outlookの「不採用」 ここが最大のポイントですが、 デスクトップ版のOutlook(2019等を含む)は、この「正しい作法(RFC 2231)」を頑なに採用していません。 代わりにOutlookが何をしているかというと、本来はメールの件名(Subject)などに使うための規格である RFC 2047(Encod...

今日こそ終止符!iPhoneの標準メーラーで添付ファイル名が文字化けする原因とその対応

OutlookからiPhoneにメールを送ると、添付ファイル名が =?UTF-8?Q?...?= と化ける問題。長年「相性の問題」で片付けられてきたこの怪奇現象に、休日の半日を潰してトドメを刺してきました。 1. 境界線の発見:「5Nの法則」 実験の結果、ファイル名に日本語(非ASCII)が混じっている場合、ある一定の条件でエンコード方式が切り替わることが分かりました。それが以下の 「5Nの法則」 です。 5Nの法則: 非ASCII文字を N 個含むとき、ASCII文字(英数字)が 5N 個に達した瞬間にiPhoneで文字化けが発生する。 非ASCII数 (N) Base64限界 (ASCII) 文字化け発動 (ASCII) 1文字 (あ) 4文字 5文字以上 2文字 (あい) 9文字 10文字以上 3文字 (あいう) 14文字 15文字以上 この法則はUTF-8だけでなく、欧州圏の iso-8859-1 (Latin-1) でも全く同様に発動しました。 2. なぜ「5」なのか?数学的背景 Outlookはメールヘッダーを1バイトでも節約しようと、以下の2つのエンコードを動的に使い分けています。 MIME-B (Base64): 全体を1.33倍にする。 MIME-Q (Quoted-...

MTAとMUAと配信と転送と中継

メールのおべんきょ。 MTA(Mail Tranfer Agent) メールを配信したり転送を行うプログラムのこと。メールサーバはこの機能を有している。 MUA(Mail User Agent) MTA機能を持たず、ユーザのフロントエンドとして、電子メールの表示や読み書き、そしてメールサーバへの送信やサーバの自分のメールボックスからのメールの受信に専念するプログラム。 配信(delivery) MTAが 自分の所のローカルユーザーのメールボックスへ メールを送る事を「配信」と言 う。 転送(transport) 送信先が自分の所のローカルユーザーでない場合、 他のメールサーバーへメールを送る必要がある。MTAが他の メールサーバーへメールを送る事を「転送」と言う。 中継(relay) MTAが、MUAや他のMTAからのメールを「転送」することを「中継」という。 とこんな感じかな。 転送と中継の説明がなってないような気がするが... ツッコミよろしくです。