Outlook 研究所

2012年2月4日

[mailto リンクで UTF-8 を使う] と Outlook

Internet Explorer 7.0 以降には [mailto リンクで UTF-8 を使う] というオプションがあります。
この設定とメールクライアント、および mailto リンクの指定方法の組み合わせによっては、件名や本文で文字化けが発生します。
以下では IE7 の挙動がどのように変わるかと、その結果 Outlook をはじめとするマイクロソフトのメール クライアントでどのような動作が行われるかについてまとめました。

Internet Explorer 6.0 以前について

HTML 中に mailto が出現する場合、FORM で指定する場合と HREF で指定する場合があり、HREF で指定する場合はさらに全角文字を事前にエンコードする場合とそうでない場合があります。それぞれについての動作は以下の通りです。

1. フォームの ACTION を mailto: とし、Subject および Body をフォームのパラメータとして送信した場合

Subject や Body の DBCS は、HTML で指定されている文字コードで % エンコードされ、ShellExecuteA によりメールソフトに渡されます。
例えば、Shift-JIS で記述されたページのフォームで Subject を「日本語件名」、Body を「日本語本文」とすると、下記の文字列がメールソフトに渡されます。

  mailto:test@example.com?subject=%93%FA%96%7B%8C%EA%8C%8F%96%BC&body=%93%FA%96%7B%8C%EA%96%7B%95%B6

一方 UTF-8 で記述されたページのフォームで同様のパラメータを指定すると、下記の文字列がメールソフトに渡されます。

  mailto:test@example.com?subject=%E6%97%A5%E6%9C%AC%E8%AA%9E%E4%BB%B6%E5%90%8D&body=%E6%97%A5%E6%9C%AC%E8%AA%9E%E6%9C%AC%E6%96%87

2. HTML 中の HREF タグで mailto のリンクの Subject および Body の全角文字があらかじめ % エンコードされている場合

HTML で指定されている文字コードに関わらず、指定された文字列がそのままメールソフトに渡されます。
例えば、下記の文字列は全角文字を Shift-JIS のコードにより % エンコードしたものですが、UTF-8 が指定されている HTML にこのようなリンクがあっても、この文字列のままメールソフトに渡されます。

  mailto:test@example.com?subject=%93%FA%96%7B%8C%EA%8C%8F%96%BC&body=%93%FA%96%7B%8C%EA%96%7B%95%B6

3. HTML 中の HREF タグで mailto のリンクの Subject および Body に全角文字を指定した場合

HTML で指定されている文字コードのまま、ShellExecutteA によりメールソフトに渡されます。
例えば、Shift-JIS で記述されたページの mailto リンクで Subject を「日本語件名」、Body を「日本語本文」とすると、下記の文字列が Shift-JIS の文字列としてメール ソフトに渡されます。

  mailto:test@example.com?subject=日本語件名&body=日本語本文

一方、UTF-8 で記述されたページの mailto リンクで同様の文字列を指定した場合、上記の文字列がエンコードされず、UTF-8 のバイト文字列としてメールソフトに渡されます。

Internet Explorer 7.0 以降について

Internet Explorer 7.0 以降では [mailto リンクで UTF-8 を使う] の設定がありますが、これをオフにした場合は Internet Explorer 6.0 以前と同様の動作となります。
また、オンにした場合でも、上記の 1. および 2. の動作は変わりません。
そして、3. の HREF タグの mailto の Subject および Body に全角文字を指定した場合に、以下のような動作をします。

  1. 文字列を HTML で指定された文字コード (または自動認識されたページの文字コード) により Unicode に変換します。
  2. Unicode 文字列を UTF-8 とし、% エンコードを行います。

そのため、 Subject を「日本語件名」、Body を「日本語本文」とすると、HTML の文字コード指定に関わらず、下記の文字列がメールソフトに渡されます。

  mailto:test@example.com?subject=%E6%97%A5%E6%9C%AC%E8%AA%9E%E4%BB%B6%E5%90%8D&body=%E6%97%A5%E6%9C%AC%E8%AA%9E%E6%9C%AC%E6%96%87

Outlook 2010/2007 について

Outlook 2010/2007 は Internet Explorer の [mailto リンクで UTF-8 を使う] の設定により動作が変わります。Outlook 2010/2007 にも [ツール]-[オプション]-[メール形式]-[文字設定オプション] に [mailto: プロトコルで UTF-8 をサポートする] がありますが、どちらのオプションも設定されるレジストリは同じ HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Protocols\Mailto\UTF8Encoding になります。そのため、このオプションをオンにすると自動的に Internet Explorer の [mailto リンクで UTF-8 を使う] がオンになります。
[mailto リンクで UTF-8 を使う] がオンである場合、mailto のリンクは Internet Explorer で UTF-8 による % エンコードが行われていると仮定します。
そのため、指定された mailto の文字列については、% エンコードをデコードし、UTF-8 の文字列として取得します。
その結果、ShellExecute やショートカットを使い、Internet Explorer を経由せずに Subject や Body に Shift-JIS の全角文字を指定した場合、文字化けが発生します。
一方、[mailto リンクで UTF-8 を使う] がオフである場合、mailto のリンクは Windows の既定のコードページによりエンコードされていると仮定します。
そのため、指定された mailto の文字列については、% エンコードをデコードし、日本語環境では Shift-JIS の文字列として取得します。

Windows メールについて

Windows メールでは Internet Explorer の [mailto リンクで UTF-8 を使う] の設定によって動作が変わることはありません。
mailto リンクで指定された文字列をデコードした後、パラメータごとに処理します。
そして、件名については UTF-8 が使用されている場合でも正しく識別できますが、本文については文字化けが発生します。

Outlook 2003 以前、および Outlook Express について

Outlook 2003 以前、および Outlook Express が開発された際には、[mailto リンクで UTF-8 を使う] というオプションは存在していません。したがって、mailto に指定された文字列については、常に Shift-JIS として解釈されます。
その結果、以下の状況では文字化けが発生します。
1. UTF-8 で指定されたページにおいて、フォームにより全角文字が送信される場合
2. [mailto リンクで UTF-8 を使う] がオンにされた状態で、HTML の HREF で mailto に全角文字が指定された場合

まとめ

上記の動作をすべてまとめると以下のようになります。

Internet Explorer 6 以前、または [mailto リンクで UTF-8 を使う] がオフである場合

・フォームによる送信

コードページ
Oultook 2010/2007
Windows メール
Outlook 2003 以前および
Outlook Express
UTF-8
NG
NG (件名は OK)
NG
Shift-JIS
OK
OK
OK

・全角文字の mailto

コードページ
Oultook 2010/2007
Windows メール
Outlook 2003 以前および
Outlook Express
UTF-8
NG
NG (件名は OK)
NG
Shift-JIS
OK
OK
OK

※ UTF-8 の文字がエンコードされずに指定された場合、UTF-8 の 3 バイト目の文字が DBCS の 1 バイト目と解釈され、パラメータの連結を意味する & が正しく識別できなくなることがあります。そのような場合には、順序によって本文または件名が空白となります。

・ShellExecute 直接指定

すべてのクライアントで OK
※ ファイル名を指定して実行やショートカットなどで mailto リンクに全角文字を指定した場合も ShellExecute 直接指定と同様です。

[mailto リンクで UTF-8 を使う] がオンである場合

・フォームによる送信

コードページ
Oultook 2010/2007
Windows メール
Outlook 2003 以前および
Outlook Express
UTF-8
OK
NG (件名は OK)
NG
Shift-JIS
NG
OK
OK

・全角文字の mailto

コードページ
Oultook 2010/2007
Windows メール
Outlook 2003 以前および
Outlook Express
UTF-8
OK
NG (件名は OK)
NG
Shift-JIS
OK
NG
NG

・ShellExecute 直接指定

Outlook 2010/2007 は NG、他は OK

2011年8月27日

Outlook 2010 で UTF8 のメッセージを受信すると文字化けする問題について

カテゴリー: トラブルシュート,Outlook 2010 の話,文字化け — outlooklab @ 12:45 PM

Outlook 2010 で UTF8 でエンコードされたメッセージを受信すると文字化けする場合があります。その原因としては、配信先の個人用フォルダ ファイル (以下、PST) が Unicode 非対応のものである可能性が考えられます。
Outlook 2010 で使用可能な PST には以下の 2 種類があります。

  • ANSI PST: Outlook 2002 以前の古いバージョンとの互換性のために残っている旧形式の PST
  • Unicode PST: Outlook 2003 以降で使用可能となった新しい形式の PST

そして、Outlook 2010 で ANSI PST を配信先としている場合、UTF8 のメッセージが文字化けしてしまいます。

配信先の PST が ANSI PST かどうかは、以下のようにして確認できます。

  1. [メール フォルダ] の一番上に表示されている [個人用フォルダ] を右クリックします。
  2. [データ ファイルのプロパティ] をクリックします。
  3. [詳細] をクリックします。

もし、個人用フォルダの形式が “個人用フォルダ ファイル (97-2002)” になっていれば ANSI PST です。

この場合、以下の手順で配信先の PST を新しい形式にすることで、新たに受信したメッセージで文字化けが発生しなくなります。

  1. [ファイル]-[アカウント設定]-[アカウント設定] をクリックします。
  2. 電子メール アカウントを選択し、[フォルダーの変更] をクリックします。
  3. [新しい Outlook データ ファイル] をクリックします。
  4. [ファイル名] に適切な名前を入力し、[データ ファイルの種類] で [Office Outlook 個人用フォルダ ファイル (.pst)] を選択して [OK] をクリックします。
  5. 追加したデータ ファイルの受信トレイが選択されていることを確認し、[OK] をクリックします。
  6. [閉じる] をクリックします。

なお、すでに ANSI PST で受信したメッセージを Unicode PST にコピーしただけでは、文字化けは解消されません。Unicode PST にコピーした後、以下の手順で解消することができます。

  1. 文字化けしたメッセージを開きます。
  2. [その他のアクション]-[エンコード]-[西ヨーロッパ言語 (Windows)] をクリックします。
  3. [その他のアクション]-[エンコード]-[Unicode (UTF-8)] をクリックします。
  4. メッセージを上書き保存します。

参考情報

Outlook メール文字化けの原因と対策 インターネットメール (POP3/IMAP4) 編
Outlook メール文字化けの原因と対策 Exchange Server 環境編

2011年1月29日

Outlook Express で受信済みのメールも含めてすべて文字化けする現象について

最近、Outlook Express で今まで受信したメールも含み、すべてのメールが文字化けするという事例が確認されています。
この現象は以下の Internet Explorer の修正による影響により発生しています。

[MS10-090] Internet Explorer 用の累積的なセキュリティ更新プログラム

この修正プログラムには日本語 JIS (iso-2022-jp) の自動検出を無効にするという修正が含まれているのですが、Outlook Express のようにメールの表示で Internet Explorer のコンポーネントを使用しているものまで影響を受けてしまい、メールの表示で JIS の自動検出が行われなくなります。
その結果、JIS エンコードが使用されているメールがすべて文字化けするという現象が発生します。

これを回避するには、下記のページから修正プログラムをダウンロードして適用してください。

KB2467659 Internet Explorer 用の更新プログラムについて (2010 年 12 月 14 日)

2010年12月11日

Exchange Server 2003 環境の Outlook 2010/2007 で HTML メールを送信すると、メッセージの一部が文字化けしたり、取り消し線が引かれたりする現象について

Outlook 2010 や Outlook 2007 で HTML メールを送信すると、以下のような現象が発生することがあります。

パターン 1: メッセージ中の全角文字が半角英数字になる

この電子メール メッセージはPOP3 $B%"%+%&%s%H$N@_Dj%F%9%HCf$K!

パターン 2: メッセージ中に意味不明な全角文字が混ざる

この電子メール メッセージはw)・鹿齔瘤昭齔瘤€・

パターン 3: 意図しないところで取り消し線が引かれる

この電子メール メッセージはPOP3 アカウントの設定テスト中

このような現象は、以前このブログでも記事にしたことがありますが、すべて下記の Web ページに記載されている Exchange Server 2003 の不具合により発生します。

835992 電子メール メッセージはフォーマットできません正しく、受信者の電子メール メッセージ、Exchange Server 2003 コンピューターから別の Exchange 受信者に送信

回避策としては、Exchange Server 2003 に Service Pack 2 を適用し、以下のレジストリ設定を各サーバーで行うというものになります。

  レジストリ キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeIS\ParametersSystem\InternetContent
  値の名前: TransferEncodingFor7bit
  値の種類: REG_DWORD
  値のデータ: d (10 進数で 13)

この問題の原因は、Exchange Server 2003 が iso-2022-jp などの 7 ビットの文字コードによりメッセージを送信する際に、HTML の本文を適切に折り返さないことにあります。
インターネットのメール送信に使用される SMTP の規約には 1 行が 998 文字以内という制限があるのですが、Exchange Server 2003 はこれを超える長さの HTML 本文をそのまま送信します。その結果、受信側のサーバーや経路中のサーバー、ファイアウォール、ウイルススキャンゲートウェイなどにより 1 行の長さが 998 文字を超えないようにするため強制的に改行が行われると、エスケープ シーケンスや HTML タグの途中に改行コードが埋め込まれることで、文字化けや意図しない取り消し線などが発生します。
改行コードの埋め込みがされるかどうかは中継サーバーや受信サーバーの設定によって決まるため、同じメールでも受信者によって現象が発生する場合としない場合があります。

ただ、この問題は以前から存在するにもかかわらず、最近になってこのような現象に遭遇するという事例が増えてきています。その理由は Outlook 2010/2007 が HTML メールの作成に使用している Word のコンポーネントの修正にあると考えられます。

下記の技術情報に記載されている Outlook 2007 の修正に HTML メールのソースの量を減らすというものがあります。その修正により、HTML ソースの BODY タグの中のテキストには基本的に改行が含まれなくなっています。

2203971 は、Office Word 2007 修正プログラム パッケージ (Mso ・ x ・ none.msp、Word の X-none.msp) の説明: 2010 年 6 月 29日

そして、この修正は 2010/6/29 以降にリリースされるすべての Word の修正に含まれるため、たとえば MS10-056 のようなセキュリティ修正プログラムを適用しても動作が変わります。
また、Outlook 2010 が使用する Word 2010 のコンポーネントでは、リリース当初からこのような動作となっています。

このような Word の動作により、HTML ソースの 1 行の長さが 998 文字を超える状況が発生しやすくなり、Exchange Server 2003 の不具合が顕在化してしまったのです。
残念ながら、Word の設定ではこの動作を変更することができないため、上記の Exchange Server 2003 の設定変更により対処する必要があります。

なお、HTML メールのソースの 1 行の長さには特に制限が設けられていないため、ソースに極力改行を入れないという Word の動作自体は不具合ではありません。そのため、この動作が変更されることは今後もないでしょう。
また、Outlook 2003 以前のバージョンで Word をメール エディタとして使用して HTML 形式のメールを作成した場合には、1 行の長さが 998 文字を超えることはほとんどありませんが、全く発生しないということではありません。
本文の内容によっては Outlook のバージョンや Word をエディタとして使うかどうか、またメールの形式に関わらず発生することが考えられます。そのため、Exchage Server 2003 での上記の設定を行うことが唯一の完全な回避策です。

2010年12月4日

iPhone/iPad からのメールを Oultook で受信すると文字化けする現象の回避策

カテゴリー: トラブルシュート,文字化け — outlooklab @ 12:58 PM

iPhone/iPad からのメールを Outlook 2007 や Outlook 2003、Outlook Express などで受信した場合に、以下のような文字化けが発生することがあります。

 
  縺薙l縺ッ譌・譛ャ隱槭〒縺吶€・

このような文字化けが発生した場合、メッセージを開いた状態で以下のような手順によりエンコードを [Unicode (UTF-8)] とすると文字化けを解消できます。

    Outlook 2007: [メッセージ]-[その他のアクション]-[エンコード]-[Unicode (UTF-8)] をクリックする。

    Outlook 2003/Outlook Express: [表示]-[エンコード]-[Unicode (UTF-8)] をクリックする。

なお、[エンコード] の中に [Unicode (UTF-8)] がない場合は、[その他] をクリックすると表示されます。
また、Outlook 2007 の場合、下記の修正プログラムを適用するとその後受信したメールでは現象が発生しなくなります。

  978401 Office Outlook 2007 修正プログラム パッケージ (Outlook x none.msp): 2010 2 月 23日

原因について

この現象の原因は、iPhone から送信されたメールのエンコードを Outlook などが正しく解釈できないというものです。
iPhone で文字コードとして iso-2022-jp が設定されている HTML 形式のメールを受信し、それを返信・転送した場合、iPhone は以下のような形式のメールを作成します。

    テキスト パート: 文字コード = iso-2022-jp

    HTML パート: 文字コード = utf-8

Outlook などでこのようなメールを受信すると、テキスト パートで指定されている文字コードが HTML パートでも使用されてしまうため、HTML の本文が文字化けを起こしてしまうのです。

Outlook Express では [メッセージはすべてテキスト形式で読み取る] をオンに設定すると、テキスト パートの本文が表示されるので文字化けがなくなります。
しかし、Outlook 2007/2003 では [すべての標準メールをテキスト形式で表示する] をオンにしても文字化けは解消されません。これは Outlook が HTML の本文からテキストの本文を作り出しているためです。

根本原因は Outlook の不具合なのですが、テキスト パートと HTML パートの文字コードを別々に設定するという実装はおそらく iPhone (あるいは Apple 社製のメール クライアント) だけなのではないかと思います。

参考リンク:
Outlook 2007、Outlook 2003 および Outlook Express 6 で、特定の設定がされた HTML 形式のメールを受信すると文字化けが発生する場合がある

2007年8月5日

メッセージの途中で文字化けが発生する原因

カテゴリー: トラブルシュート,Outlook Tips,文字化け — outlooklab @ 7:01 PM

メッセージ全体や日本語文字のみが文字化けするという場合、メッセージの文字コードが原因として考えられますが、メッセージの途中で突然文字化けが発生したり、一部のみが文字化けするという場合、単なる文字コードの問題ではない可能性があります。

このような場合に最も可能性が高いのは、「予期しない文字列の折り返し」です。
日本語メッセージの文字コードとして一般的に使用される ISO-2022-JP というコードでは、日本語文字の開始と終了に 3 バイトからなるエスケープシーケンスが入り、日本語の文字が ASCII キャラクタで表されます。
例えば、「日本語」という文字は、

{ESC}$BF|K\8l{ESC}(B

という文字列になります。({ESC} はキャラクタ コード 27 のコントロール キャラクタです。)

ところが、この文字列を正しく認識しないメールソフトが文字列の途中で改行を入れてしまうと、不正な状態となり、一部の文字が化けるという現象が発生します。

特にこの問題が顕著に発生するのは、Exchange 2000/2003 サーバーを使っている環境から HTML メールを送信した場合です。
Exchange 2000/2003 サーバーでは、日本語の HTML メールは自動的に折り返しが行われないため、一行の長さが 1000 バイトを超えることも少なくありません。しかし、メールの送信で使われる SMTP というプロトコルでは、一行の長さが改行を含んで 1000 バイトという制限があるので、受信側のメールサーバーやゲートウェイによっては、このような長い行を自動的に改行する場合があります。
その時、日本語文字列の途中で改行されてしまうと、文字化けが発生するのです。

この問題については、修正プログラムがリリースされていますが、修正プログラムの適用後にレジストリ設定が必要となります。詳細については以下のリンクを参照してください。
Exchange 2000: http://support.microsoft.com/kb/830409/ja
Exchange 2003: http://support.microsoft.com/kb/885419/ja

また、Exchange 環境以外でも、折り返しを長めに設定したり、折り返さない設定をしているメールクライアントから送信したメールが、途中のメールサーバーなどで自動折り返しされることで文字化けが発生するという可能性もあります。
折り返しの設定によって受信側でメールが読みづらくなるため、長めに設定していたり、折り返さない設定をしていたりする場合もあるかもしれませんが、部分的な文字化けが発生した場合には、折り返しを有効にしたり、適当なタイミングで改行を入れたりすることで回避できると考えられます。

2007年7月14日

Outlook 2007 で UTF8 のメッセージを受信すると文字化けする問題について

カテゴリー: トラブルシュート,Outlook 2007 の話,文字化け — outlooklab @ 7:21 PM

Outlook 2007 で UTF8 でエンコードされたメッセージを受信すると文字化けする場合があります。その原因としては、配信先の個人用フォルダ ファイル (以下、PST) が Unicode 非対応のものである可能性が考えられます。
Outlook 2007 で使用可能な PST には以下の 2 種類があります。

  • ANSI PST: Outlook 2002 以前の古いバージョンとの互換性のために残っている旧形式の PST
  • Unicode PST: Outlook 2003 以降で使用可能となった新しい形式の PST

そして、Outlook 2007 で ANSI PST を配信先としている場合、UTF8 のメッセージが文字化けしてしまいます。(Outlook 2003 以前では ANSI PST でも UTF8 のメッセージは文字化けしなかったのですが…)
配信先の PST が ANSI PST かどうかは、以下のようにして確認できます。

  1. [メール フォルダ] の一番上に表示されている [個人用フォルダ] を右クリックします。
  2. ["個人用フォルダ" のプロパティ] をクリックします。
  3. [詳細] をクリックします。

もし、個人用フォルダの形式が "個人用フォルダ ファイル (97-2002)" になっていれば ANSI PST です。

この場合、以下の手順で配信先の PST を新しい形式にすることで、新たに受信したメッセージで文字化けが発生しなくなります。

  1. [ファイル]-[データファイルの管理] をクリックします。
  2. [データ ファイル] タブの [追加] をクリックします。
  3. [データ ファイルの種類] で [Office Outlook 個人用フォルダ ファイル (.pst)] を選択して [OK] をクリックします。
  4. [ファイル名] に適切な名前を入力し、[OK] をクリックします。
  5. [名前] に適切な名前を入力し、[OK] をクリックします。
  6. 新規に追加した個人用フォルダが選択されていることを確認し、[既定に設定] をクリックします。
  7. [OK] をクリックします。
  8. Outlook を再起動します。

なお、すでに ANSI PST で受信したメッセージを Unicode PST にコピーしただけでは、文字化けは解消されません。Unicode PST にコピーした後、以下の手順で解消することができます。

  1. 文字化けしたメッセージを開きます。
  2. [その他のアクション]-[エンコード]-[西ヨーロッパ言語 (Windows)] をクリックします。
  3. [その他のアクション]-[エンコード]-[Unicode (UTF-8)] をクリックします。
  4. メッセージを上書き保存します。

また、Unicode PST でも文字化けが発生する場合は、iPhone からのメールで発生する現象かもしれません。その場合、こちらの記事を参照してみてください。

参考情報

Outlook メール文字化けの原因と対策 インターネットメール (POP3/IMAP4) 編
Outlook メール文字化けの原因と対策 Exchange Server 環境編

Rubric テーマ WordPress.com Blog.

フォロー

新しい投稿をメールで受信しましょう。

現在71人フォロワーがいます。