Windows TIPS
[System Environment]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

Outlook 2002におけるメッセージ・エンコーディングの問題点

デジタルアドバンテージ
2001/09/07

 電子メール・ソフトウェアとして、筆者はかねてよりOutlook(Internet Explorerに含まれているOutlook Expressではなく、Officeに含まれているOutlook)を使用している。ただしこれは、Outlookがメール・ソフトとして特に優れているからではなく、スケジューラやToDoリスト、住所録などのいわゆるPIM(Personal Information Manager)ソフトウェアがひとまとめで利用できて便利なことと、普段持ち歩いているVisor(Palm OSを搭載するHandSpring社のハンドヘルド ・コンピュータ)とのデータの同期が簡単なためだ。人によっては、PIMとしてOutlookは使うが、メール・ソフトウェアは別途用意するという場合もあるようだが、それほど積極的にOutlookのメール・ソフトウェアを拒否する理由もないことから、使い続けているという感じである。

 特に理由はなかったのだが、Office XPに含まれる最新のOutlook 2002も使ってみようと、それまで使っていたOutlook 2000からバージョンアップしてみた。細かくはいろいろあるようだが、バージョンアップして目についた機能としては、予定表(スケジューラ)の予定に好みの色を付けられるようになった程度で(Outlook 2000ではできなかった!)、それ以外はこれといった違いが感じられなかった。

エンコード・エラーでメールが配信不能に!?

 目新しさはないけれど、放り出す理由もないので、バージョンアップしたOutlook 2002をそのまま使い続けることにした。するとほどなく、おかしな現象が発生しだした。ほとんどの場合は問題なくメールの送受信ができているものの、一部のメール(あるメーリング・リスト宛のメール)や、一部の携帯電話宛のメールなどが配信エラーで送り返されるようになってしまったのだ。しかし、配信エラーは必ず起こるというわけではなく、問題が発生した相手に対して、試しに別のメッセージを送ると問題なく送信できたりする。どうやらメールサーバが停止しているなどの問題ではなく、メールの内容によっては相手側のメールサーバ(正確にはメーリング・リストのサーバなど)に拒否されて、送り返されてきているようである。つまりメールとしてはSMTPレベルでは正しく受け付けられているのだが、その内容に問題があり、エラーとして扱われているようである。

 不思議に思って、自分あてにテストメールを発信し、メッセージの中身を覗いてみると、次のようになっていた。

(一部省略)
MIME-version: 1.0
X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2462.0000
X-Mailer: Microsoft Outlook, Build 10.0.2627
Content-type: text/plain; charset="iso-2022-jp"
Content-transfer-encoding: quoted-printable

Importance: Normal
X-Priority: 3 (Normal)
X-MSMail-priority: Normal
Return-Path: XXXX@example.jp
X-OriginalArrivalTime: 06 Sep 2001 07:35:56.0440 (UTC)  1: FILETIME=[90C53980:01C136A6]

=1B$B!!F|K\$N9bEY@.D9;~Be$N=3Di4|$K$"$?$k><OB=1B(B31=1B$BG/!"El5~9q:]8+K\=
;T6(2q$O!";:6H$N=1B(B
=1B$BH/E8$d9q:]?FA1$J$I$rL\E*$H$7$F!"El5~ET$J$I$K$h$C$F@_N)$5$l$?<RCDK!?M=
$G$"=1B(B
問題があったメッセージの内容
リストのオレンジ色の部分が問題の個所である。

 どうやら原因は、「Content-transfer-encoding: quoted-printable」にあるようだ。

 一般的に日本語(日本語文字セット)でメールを発信した場合、本文テキストの文字セットは「Content-type: text/plain; charset="iso-2022-jp"」となる。そして文字コードは7bitのJISコードに変換されて相手先まで送信される。したがって本来ならこの「Content-transfer-encoding:」は、「quoted-printable」ではなく、「7bit」でなければならない。

 前述のメッセージにおいて、最後の数行が日本語で記述したメッセージ本文であるが、本文自体はJISコードでエンコードされているにもかかわらず、文字コード切り替えを表す冒頭のESCコード(16進数で0x1B)が「=1B」としてQuoted Printable形式でエンコードされてしまっている。つまりOutlook 2002は、このESCコードをバイナリとみなし、Quoted Printable形式でエンコードしているのである。これは日本のメール事情からすると、かなり変則的なエンコーディングである。通常ESCコードはそのままメッセージ中に置くことになっているが、この場合は特殊なバイナリ・コードと見なされ、わざわざQuoted Printable形式でエンコードされている。メール・アプリケーションによっては、このような一般的ではない日本語のエンコーディング方式を解釈することができす(もしくは、厳密にチェックしすぎて)、不正な文字コードを含むメールとしてはじいている。結果として、相手と場合によってはメールが送れなかったりするという事態が発生している。

 西欧圏では、発音記号やウムラウトなどの(7bit ASCIIでは表現できないような)特殊な文字には8bitのキャラクタ・コードが割り当てられており、メッセージ内にこれが含まれているときには、その文字だけQuoted Printable形式でエンコードして送信するのが一般的である(8bit文字が含まれない場合はエンコード処理はされない)。どうやら今回の問題は、こうした米国版のロジックが日本語環境にそのまま適用されてしまったことによる問題のようだ。

 マイクロソフトのサポート技術情報を検索したところ、この問題に関する文書が見つかった。

 詳しくはこの文書を見ていただくとして、核心を言えば、Exchangeサーバを使用しない環境でOutlookを使った場合(つまり、ほとんどの個人ユーザーはこれに該当する)、Outlookはメッセージの内容を判断して、7bitで表現可能な通常のASCIIコード以外のコードを見つけると、そのコードの分量によって、Quoted PrintableとBase 64を自動的に使い分けてデータをエンコードするということだ(Quoted Printableの方がBase 64よりもエンコード後のオーバーヘッドが多いので、エンコードすべきバイナリの量がある分量を超えると、Base 64を使用する)。ただし、Exchangeサーバを使っているときには、文字のエンコード処理はすべてExchangeサーバ側で実行されて外部へ送信されるので、Outlookの影響は受けないとのことである。

エンコード形式の強制指定が省略されたOutlook 2002

 ところで従来のOutlook 2000では問題にならなかったのに、Outlook 2002にバージョンアップして問題が起こったのはなぜだろうか? この答えはオプション設定の違いにあった。下の画面は、Outlook 2000のオプション・ダイアログである。このようにOutlook 2000では、ユーザーが強制的に本文テキストのエンコード形式を設定することができた。

Outlook 2000のオプション・ダイアログ
[ツール]−[オプション]メニューから表示される[オプション]ダイアログの[メール形式]タブ。従来のOutlook 2000では、ここで本文テキストのエンコード形式を強制的に指定できるようになっていた。
  エンコード形式を強制的に指定するにはこのボタンをクリックする。→
 
Outlook 2000の[テキスト形式の設定]ダイアログ
ここで[メッセージ形式]で[MIME]を選択し、[エンコード方法]ドロップダウン・リストボックスで[なし]を選択することで、Quoted Printableなどの無用なエンコード処理を回避させることができる。
  無用なバイナリ・エンコーディングを回避するには、ここで[なし]を選択すること。

 これに対し新しいOutlook 2002では、この指定オプションが省かれてしまった。

Outlook 2002のオプション・ダイアログ
同じく、[ツール]−[オプション]メニューから表示される[オプション]ダイアログの[メール形式]タブ。ダイアログのデザインはよく似ているが、[メッセージ]形式グループのボタンは[設定]から[インターネットメール形式]に変更されている。
  Outlook 2000ではここからエンコード形式を強制指定できた。Outlook 2002では……。→
 
Outlook 2002の[インターネットメール形式]ダイアログ
残念ながら、Outlook 2002では、文字のエンコード形式に関する強制指定は省かれてしまった。

問題の回避方法 その1(アップデートを適用する方法)

 この問題を回避するには、マイクロソフトが提供するOutlook 2002アップデート(2001年6月21日)を適用するか、レジストリの設定を変更する必要がある。

 このアップデートについては、次のサポート技術情報で説明されている。

 ここで説明されているとおり、パッチはマイクロソフトのダウンロードセンターからダウンロードすることができる。WebサイトのURLは次のとおり(上記サポート技術情報に表記されたURLは、文字上は日本語サイトのURLになっているのだが、リンク先は英語のページになっているので注意)。

 ここから、olk1001.exeという約1Mbytesのアップデート・ファイル(パッケージ・ファイル)をダウンロードし、それを実行してOutlook 2002に組み込む。このアップデートを適用すると、Outlook 2002のバージョン情報は「10.2930.2625」になる。

問題の回避方法 その2(レジストリを修正する方法)

 前出のアップデート・ファイルを適用するのが最良の方法だが、何らかの事情でこれを適用できないというなら、レジストリの値を変更することで、文字のエンコード形式を強制的に指定することも可能だ。

[注意]

レジストリに不正な値を書き込んでしまうと、システムに重大な障害を及ぼし、最悪の場合、システムの再インストールを余儀なくされることもあります。レジストリ エディタの操作は慎重に行うとともに、あくまで御自分のリスクで操作を行ってください。何らかの障害が発生した場合でも、本Windows 2000 Insider編集部では責任を負いかねます。ご了承ください。

 設定するのは、HEY_CURRENT_USERハイブの\Software\Microsoft\Office\10.0\Outlook\Options\Mailキーにある「InternetMailTextEncoding」というDWORD値である。この値の設定と働きは次のようになる。

機能
0
エンコード方式をメッセージの内容によって判断する(デフォルト)
1
Quoted Printable形式でエンコードする
2
Base 64形式でエンコードする
3
エンコードは行わない
Outlook 2002メッセージ・エンコーディングを強制指定するレジストリの値と内容

 デフォルトは0で、Outlookがメッセージ内容によってエンコード形式を自動選択するようになっている。この値を「3」にすれば、無用なエンコードは行われないようになる。なお、「無用なエンコードは行わない」といってもShift-JISコードのまま送信してしまうということではなく、Quoted PrintableやBase 64形式を使用しないという意味である。この設定でもISO-2022-JPへのエンコーディングは正しく行われる(先頭のエスケープ・コードをQuoted Printableにしたりはしない)。End of Article

更新履歴
【2001/09/07】問題の回避方法として、当初はレジストリの値を変更する方法だけを記載していましたが、読者からの指摘により、この問題に対応したアップデート・ファイルがマイクロソフトから公開されていることが判明しました。そこでこのアップデート・ファイルに関する情報を追加し、「問題の回避方法 その1(アップデートを適用する方法)」という見出しを追加して、ファイルのダウンロード方法や適用方法などに関する説明を追加しました。
 
「Windows TIPS」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間