• ベストアンサー

メール

メールを送るとき シフトジス の文字を QuotedPrintable で変換してからおくると 何か不都合が起きますか シフトジスからiso2022に変換してさらにbase64で変換 という流れにしなくてないけない理由が有れば 教えてください。 いま、メーラーを自作しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

件名に「表題」、本文に「本文」と書いた場合 件名 Subject: =?ISO-2022-JP?B?GyRCST1CahsoSg==?= 本文 [ESC]$BK\J8[ESC](J となります。 ここでは、各用語を以下のように定義します。 ・JIS変換 漢字コードをJIS X 0208コードに変換する事。 ・ISO-2022-JP変換 JIS X 0208コードにされた部分の先頭に「[ESC]$B」を、末尾に「[ESC](J」を追加し、「[ESC]$B」と「[ESC](J」で挟まれた部分がJIS X 0208コードである事を示すように変換する事。 ・BASE64変換 3バイトのバイナリデータ(24ビット)を6ビットの4つに分解し、その6ビット64パターンを「A~Z、a~z、0~9、+、/」の64文字に割り当てて可読文字に変換する事。 ・MIMEエンコード データをJIS変換、ISO-2022-JP変換、BASE64変換した後、MIMEの識別文字「=?iso-2022-jp?B?」「?=」で括る事。 ○ヘッダ部分の変換 まず、漢字をJIS変換と同時にISO-2022-JP変換します。単純にJIS変換しただけでは、元が漢字だった部分とASCIIだった部分が区別出来なくなる為、JIS変換とISO-2022-JP変換は同時に行います(と言うか、同時にしか行えません) 「表題」→「[ESC]$BI=Bj[ESC](J」となります。 因みに、 「[ESC]$B」は「これ以降はJIS X 0208コード」 「[ESC]$@」は「これ以降は旧JIS」 「[ESC](J」は「これ以降はJIS X 0201 ローマ字コード」 「[ESC](B」は「これ以降はASCIIコード」 を意味します。 本来であれば、漢字の終りは「[ESC](B」で終らせるべきですが「[ESC](J」で終らせても差し支えありません。 次に、それをBASE64変換します。 3バイトづつのデータを6ビットづつに切って「A~Z、a~z、0~9、+、/」の64文字に割り当てて行きます。 割り当ては、 000000= 0=A 000001= 1=B    | 011001=25=Z 011010=26=a 011011=27=b    | 110011=51=z 110100=52=0    | 111101=61=9 111110=61=+ 111111=61=/ と割り当てます。 [ESC]$B ↓ 00011011 00100100 01000010 ↓ 000110 110010 010001 000010 ↓ 6、50、17、2番目(0番目から数えて) ↓ GyRC 以下、3バイトづつ「[ESC]$B」「I=B」「j[ESC](」「J」を変換して行きます。 最後の「J」のように3バイトに満たないデータを「Sg」に変換する場合は、足りないビットに0を補います。 01001010 ↓ 010010 10+0000 ↓ 18、32番目(0番目から数えて) ↓ Sg 「[ESC]$BI=Bj[ESC](J」→「GyRCST1CahsoSg」となります。 最後に、MIMEエンコードされている事を示す為に「=?iso-2022-jp?B?」と「?=」で括ります。 この時、中に括るBASE64エンコードされた文字の文字数が4の倍数では無い場合、足りない文字に「=」を足します。 「GyRCST1CahsoSg」→「=?iso-2022-jp?B?GyRCST1CahsoSg==?=」となります。 因みに「=?iso-2022-jp?B?」の末尾の「?B?」は「括られた部分はBASE64エンコードされている」と言う事を示します。 括る中身がQuotedPrintableだった場合は「=?iso-2022-jp?Q?」となります。 ○本文の変換 漢字をJIS変換と同時にISO-2022-JP変換します。 「本文」→「[ESC]$BK\J8[ESC](J」 本文の場合は、これ以上は何もしません。と言うか、何もしてはいけません。 これを下手にBASE64にエンコードしたりすると、受け取るメーラーによっては、読めなくなったり、メーリングリストで不具合が出たり、添付ファイルとして認識され本文無しのメールになる危険があります。

uyama33
質問者

お礼

詳しく教えていただき感謝いたします。 参考にさせていただきながら、 自作メーラーのコードを修正します。 ありがとうございました。

uyama33
質問者

補足

一応、 Subject: の処理 本文の処理 ともに可能となりました。 お世話になりました。 今後もよろしくお願いいたします。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

> QuotedPrintable > で変換してからおくると > 何か不都合が起きますか 読めない(デコード出来ない)メーラーソフトや、WEBフリーメールサービス(WEB上でメールを読むサービス)が存在します。 また、メーリングリスト等で、本文にコマンド文字を書いてコマンド受信用アドレスにメール送信して何かの処理を行わせようとする際に、余計なエンコードの為にコマンドが正しく認識されず困る場合もあります。 ヘッダ部分はMIMEで、本文はJISコードでエンコードするのが一般的です。 ヘッダーはJISに変換した物を更にbase64にしてMIMEの識別文字「=?iso-2022-jp?B?」「?=」で括ります。 本文は2バイト文字のみをJISに変換し、制御文字(エスケープコード)は加工せずそのままにします。

uyama33
質問者

補足

オライリー の 電子メールプロトコル を読みながら 作っているのですが、この本の54ページには jisコードを ISO-2022-jpに変換し とあります。  メーラーの文字の表示はシフトjisを使っています。 このときには、 ヘッダーは シフトjis から jis とし、さらに iso2022 として さらに base64で変換してから 識別文字で挟む  本文は、 シフトjis から jis とし、さらに iso2022 としてから base64 で変換 この後、まとめて送る。 となるのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A