Word 2016 からメールを送信すると文字化けする
※ この記事は以下の Office サポート フォーラムに移行しました。 https://social.msdn.microsoft.com/Forums/ja-JP/2e6f3a5c-0116-47b0-8807-21594dc5fda3/word-2016-
こんにちは、Office 開発サポート チームの中村です。
今回の記事では、Word 2016 からテキスト形式のメールを送信するときの以下の動作について記載します。1. は Word 2016 での意図した仕様変更による動作です。2. は、Word 2016 製品の不具合によって生じます。
- メール タイトルや本文などが UTF-8 で送信される
- 差し込み印刷でタイトルは ANSI(SJIS) / 本文は UTF-8 で送信される
Word 2016 からのテキスト形式のメールの送信では、Simple MAPIを使用しています。以下に記載する動作変更への対応として、Simple MAPI API が拡張され、従来 ANSI 用であった関数で UTF-8 が送信可能となっています。後述の通り、お手数をおかけしますが、メール アプリケーションを作成されている開発者様には、Simple MAPI の UTF-8 対応をお願いいたします。
1. Word 2016 でのテキストメールの UTF-8 への変更
Word 2013 まで、差し込み印刷や共有などの機能で Word からテキスト形式のメールを送信すると、タイトル、本文、添付ファイル名などの文字情報は、ANSI (SJIS) で送信されていました。しかしながら、グローバルで様々な言語を扱う上で ANSI では表現できない文字が多く、これらの文字への対応要望を多くいただいていました。
これらのフィードバックを受け、Word 2016 では UTF-8 でテキスト形式のメールを送信するように変更しました。
内部の仕組みとしては、Word はテキスト形式のメール送信時に、Simple MAPIを使用しています。MAPISendMail() 関数に MapiMessage 構造体として、タイトルや本文などの情報を渡し、既定のメール クライアントにメール送信リクエストを送信します。
MAPI には、Windows 8 以降で利用できる Unicode 向けの MAPISendMailW() 関数や MapiMessageW 構造体も用意されています。ただ、Windows 7 では Unicode 向け関数や構造体は用意されておらず、送信内容として Unicode 文字列が渡されてくるような場合は、Microsoft Windows Software Development Kit (SDK) for Windows 8 をインストールして MAPISendMailHelper() を呼び出し、ANSI に変換して送信します。
Word 2016 はシステム要件として、Windows 7 SP1 上でも動作します。テキスト形式メールの UTF-8 への対応にあたり、Windows 7 SP1 上でも UTF-8 として送信可能とするため、MapiMessage 構造体の ulReserved パラメーターを拡張し、ここに設定された値が 0 であれば ANSI、CP_UTF8 (UTF-8 のコード ページ) であれば UTF-8 と見分けられるようにしました。
Word 2016 でのテキスト形式メール送信時には MAPISendMail() 関数を引き続き呼び出し、ulReserved パラメーターに CP_UTF8 を指定して、メッセージの内容は UTF-8 でエンコードした状態で MapiMessage 構造体に格納してテキスト形式のメールを送信します。Outlook 2016 はこの拡張に対応しており、ulReserved パラメーターの値を判断して UTF-8 の場合も正しくデコードして表示します。
参考)
タイトル : MAPISendMail function
アドレス : https://msdn.microsoft.com/en-us/library/windows/desktop/dd296721.aspx
タイトル : MapiMessage structure
アドレス : https://msdn.microsoft.com/en-us/library/windows/desktop/dd296732.aspx
※ ulReserved パラメーターの拡張後の設定値が記載されています
タイトル : Code Page Identifiers
アドレス : https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756.aspx
対応方法
メール アプリケーションの開発者様には、MAPISendMail() 関数で MapiMessage 構造体の ulReserved パラメーターに CP_UTF8 が指定され、文字が UTF-8 でエンコードされて送信される場合に正しく表示できるようご対応をお願いしております。
エンド ユーザー様がこの状況に直面している場合、以下のような回避策をお試しください。
- 既定のメール アプリケーションを Outlook 2016 に変更する
- メール アプリケーションの設定でメール受信時の文字コードを設定可能な場合は、UTF-8 に設定する
- メール アプリケーションでメールを作成後、Word で作成した文書を添付、または内容をコピー&貼り付けする
2. 差し込み印刷でタイトルのみ文字化けする
この現象は、最新バージョンをご利用の場合、ボリュームライセンス版の Office 2016 でのみ発生します。クイック実行版および Microsoft ストア アプリ版の Office 2016 では修正済みの動作です。
1. で記載した変更により、Word 2016 からのテキスト形式のメールでは、UTF-8 を使用することを想定しています。しかしながら、製品の問題により、差し込み印刷からのテキスト形式メール送信のとき、タイトルのみ ANSI (SJIS) のまま送信される現象が発生します。
この問題は、クイック実行版、および Microsoft ストア アプリ版の Office 2016 では既に修正されており、タイトル、本文ともに UTF-8 で送信されます。
一方で、ボリュームライセンス版 (MSI インストーラ形式) の Office 2016 は、本日 2018/6/11 時点でこの動作は修正されていません。ボリュームライセンス版の修正については現在検討中です。進展がありましたらこの記事でお伝えします。
2018/8/20 Update
以下の更新プログラムで、ボリューム ライセンス版の Office 2016 にも修正を行い、タイトル、本文ともに UTF-8 で送信されるようになりました。
文書番号 : 4032258
タイトル : Word 2016 (KB4032258) の更新プログラムを 2018 年 8 月 7日
アドレス : https://support.microsoft.com/ja-jp/help/4032258
回避策
ご不便をおかけして申し訳ありませんが、現象が発生するバージョンの Office を利用している場合は以下の回避策をご検討ください。
- Outlook を使用している場合は、HTML 形式でメールを送信する (MAPI とは別の仕組みで送信されるため、この問題が生じる処理を行いません)
- メール アプリケーションでメールを作成後、Word で作成した文書を添付、または内容をコピー&貼り付けする
- クイック実行版の Office 2016 (最新バージョン) を利用する
今回の投稿は以上です。
本情報の内容 (添付文書、リンク先などを含む) は、作成日時点でのものであり、予告なく変更される場合があります。