Outlook.com の文字化け解消方法

コメントにて以下のご質問をいただきました。


はじめまして。困っていますので、助けて下さい。
outlook2013で、outlook.comのアカウントを使用しています。
数日前に送信できなくなったため、いろいろ試行錯誤した挙句、outlook2013で改めてアカウントを設定したところ、無事に送信できるようになりました。
恐らく、それからのことだと思いますが、
受信したメールにフラグを設定すると、そのメールだけ、差出人、受信者、件名、添付ファイル名のいずれか、もしくはすべてで文字化けします。
本文は正常のままです。
フラグを設定したメールの全てではありませんが、文字化けしないものは少数です。
何か対策はないものでしょうか?

申し訳ありません。書き忘れたことがありました。
outlook.comのアカウントなので、Exchange Active Syncによる接続です。
また、outlook.comですので、webでの操作が可能ですが、
webでは文字化けしておりません。
また、iphoneのメールアプリも利用していますが、
こちらでも文字化けしていません。
どうか、宜しくお願いします。


Exchange Active Sync は、本来 Exchange サーバーとモバイル製品のメールや予定の同期のために開発されたプロトコルであり、Outlook で Exchange Active Sync を使うといろいろ問題が起こるようです。
そのため、Outlook.com は現在 Office 365 のプラットフォームへの移行作業が進められており、Office 365 へ移行後はサーバーとの接続が Exchange Active Sync ではなく MAPI/HTTP に変わります。
MAPI/HTTP は以前から Exchange と Outlook の通信に使用されていた MAPI を HTTP ベースに実装したプロトコルであり、おそらく MAPI/HTTP に切り替わればこのような文字化けは発生しなくなると思います。
もし、Web 版の Outlook.com に接続して、左上のバナーに「Outlook メール」と表示されているのであれば移行済みですが、「Outlook.com」となっている場合は古いサーバーに接続されている状態です。
来年の半ばには全体が移行するようですが、以下の URL を表示すると明示的に移行が行われるようです。

http://mail.live.com/default.aspx?owaoptin=1

上記の URL を表示し、バナーで移行が完了したのを確認してから Outlook.com のアカウントを再作成し、MAPI/HTTP で接続して現象が回避できるか確認してみてください。

IMCEA で始まるメールアドレスへの配信不能通知について

Outlook でメールの送信を行った際に、ごくまれに IMCEA で始まるメールアドレスへの配信不能通知が生成される場合があります。
大抵はそのようなアドレスへ送ったつもりがないのに生成されるものであるため、誤送信やウイルス感染などが発生したのではないかと不安になる方もいるかもしれません。
今回はこのようなアドレスへの配信不能通知が生成される原因について解説します。

IMCEA とは何か?

まず、IMCEA という言葉についてですが、これは Internet Mail Connector Encapsulated Addres の略です。
Internet Mail Connector とは、Microsoft Exchange Server の最初のバージョンである 4.0 にあった、Exchange サーバーと SMTP サーバーの接続を行うオプション コンポーネントの名前です。
今ではメールといえば SMTP で送信されるのが当然のようになっていますが、10 年以上前にはメールの送信プロトコルにはメーカー独自のものを含めいくつかあり、Exchange サーバーはバージョン 5.5 まで国際電気通信連 (ITU-T) によって定められた X.400 をベースとして動作していました。
そのため、SMTP はオプション扱いであり、Exchange 組織からインターネットへメールを送受信する場合は Internet Mail Connector でアドレスやメール形式の変換を行っていました。

そして、IMCEA で始まるアドレスは、もともと Internet Mail Connector でメールを送信する際に、SMTP で使用できないアドレスをカプセル化して送信できるようにするためのものでした。
現在では、Internet Mail Connector というコンポーネントは廃止されましたが、SMTP 以外のアドレス形式が SMTP で送信された場合に IMCEA で始まるアドレスが Exchange Server と Outlook で使用されます。
つまり、何らかの理由で SMTP 以外のアドレス形式によるメール送信が行われた際にこのアドレスでの送信がされ、該当するアドレスが存在しないために配信不能通知が生成されるという現象が発生するのです。

具体的には以下のような場合が考えられます。

IMCEAEX で始まるアドレス

このアドレスは LegacyExchangeDN を SMTP 形式にしたものです。
通常、Exchange 組織内で LegacyExchangeDN が使用されますが、Active Directory にそのアドレスを持つユーザーや連絡先などが存在すれば、そのオブジェクトの SMTP アドレスが使用されます。
しかし、以下のような状況で LegacyExchangeDN を持つオブジェクトが存在しない場合、IMCEAEX で始まるメールアドレスにメールが送信されます。
・AD から削除されたユーザーなどに Outlook の連絡先やニックネーム キャッシュ、全員に返信などでメールを送信した
・別の Exchange 組織から PST などでコピーしてきたメールに対して返信や再送を実行した

IMCEAMAILTO で始まるアドレス

このアドレスはアドレス種別として MAILTO が指定されている受信者にメールを送信した場合に使用されます。
本来、MAILTO というような種別は Outlook や Exchange では使用されません。
しかし、Word 2007 の不具合で mailto: リンクをクリックしてメールを送信すると、アドレス種別が MAILTO になってしまうという現象が発生していました。
この不具合は以下の修正プログラムによって修正されています。

2475888 Office Word 2007 修正プログラム パッケージ (wordconv-x-none.msp、単語の x-none.msp): 2011 年 2 月 22 日
https://support.microsoft.com/ja-jp/kb/2475888

IMCEAINVALID で始まるアドレス

このアドレスはアドレス種別が指定されていない受信者にメールを送信した場合に使用されます。
正常に名前解決が行われている場合、アドレス種別が指定されていないということは発生しないのですが、以下のような手順でメールを送信すると正常に名前解決がされずにこの問題が発生する場合があります。

1. Exchange Server 2013 以降にキャッシュ モード オフ (オンライン モード) で接続する
2. Outlook でメールを作成する際に、メールアドレスの名前解決を実行せずに下書きに保存する
3. 下書きに保存した後でいったんメールを閉じ、下書きのメールを再び開いて送信する

通常のメール作成時には宛先の入力後に他のフィールドを選択すると、自動で名前解決が行われるので問題が起こらないのですが、以下のような状況で現象が発生しやすくなります。
・ 宛先に他のプログラムなどから大量にアドレスを追加する
・ mailto: リンクをクリックしてメールを送信する
・ Word や Excel など、他のプログラムからメールを送信する

いずれの場合も、下書きに保存する前に宛先の名前解決を明示的に実行することで現象発生を予防できます。
なお、アドレスの名前解決ができているかどうかは、アドレスに下線が引かれた状態かどうかで判断ができます。

その他

上記以外のパターンの場合、Outlook で動作するサードパーティ製のメール システムのアドレスへのメールを SMTP のアカウントで送信したものと考えられます。
たとえば、IMCEANOTES で始まる場合は Lotus Notes のアドレス、IMCEAFAX なら FAX 送信システムのアドレスという具合です。
この場合は正しいアカウントで送信しなおす必要があります。

作成中のメールの保存や送信ができなくなる現象について

コメントにて以下のご質問をいただきました。


教えてください、OUTLOOK2013で、下書きに入れたメールを再度編集して、送信ボタンを押した際、送信出来ずに保存も出来ない状態になる現象があるのですが、原因がわかりません。違うメールを立ち上げ、内容をコピー後に送信を行うと、送信されます。
対処方法ございましたら、教えていただけませんでしょうか。
よろしくお願いいたします。


Exchange サーバーにキャッシュ モード オフ (オンライン モード) で接続している場合、以下のような状況でご質問の現象が発生します。

  • PC がスリープまたは休止状態に入った
  • ネットワークが一時的に切断された

キャッシュ モードがオフの場合、Outlook で編集中のメールは Outlook のメモリと Exchange サーバーのメモリの両方に存在しており、アイテムの保存や送信を行うと Exchange サーバーのメモリにあるメールがサーバーのデータベースに保存されたり、送信されたりします。

しかし、サーバーのメモリにあるメールは、Outlook との接続が切断されると破棄されてしまいます。
そのため、上記のような理由でサーバーと Outlook の接続が切断されると、その時点で編集中だったメールはサーバー上に存在しない状態となるので、その後の保存や送信がサーバーではできなくなります。
この場合でも、Outlook のメモリ上には本文などのデータが残っているので、別のメールにデータをコピーすることは可能です。

対処方法としては、こまめに保存するか、キャッシュ モードをオンにして使うというものがあります。
キャッシュ モードでの使用がお勧めなのですが、組織のポリシーなどでキャッシュ モードを使えないようにしているという話もよくありますので、その場合は以下の手順で自動保存の設定を 1 分程度にしてください。

  1. Outlook を起動します。
  2. [ファイル]-[オプション] をクリックします。
  3. [メール] の [メッセージの保存] にある [送信していないアイテムを次の時間 (分) が経過した後に自動的に保存する] をオンにし、右のテキストボックスに 1 と入力します。
  4. [OK] をクリックします。

これにより現象を発生する頻度は減らせるでしょう。

同じ msg ファイルを繰り返し開こうとするとエラーが表示される現象について

コメントにて以下のようなご質問をいただきました。


以下のトラブルで困っています。ご教授をお願いします。

Outlook2010の再インストールをしてみましたが改善しません。

受信メールをファイル化して分類格納しています。XXX.msg等々です。必要時に開いて使用しています。
最近になってから、Outlook起動後にXXX.msgを最初に開く時は問題ないのですが、一度閉じて再度開くと、
“ファイル・・・・・XXX.msgを開けません。ファイルが存在しないか、そのファイルを開くためのアクセス権がないか、またはほかのアプリケーションで開いている可能性があります。ファイルの保存先フォルダを右クリックし、[プロパティ]をクリックして、そのフォルダへのアクセス権を確認してください。”とのメッセージが出ます。
それ以降は、Outlookを再起動するまでファイルを開くことができません。プロパティはおかしくなってはいないようです。
また、Outllookをセーフモードで起動するとこの現象は発生しません。
修復方法がございましたら、アドバイスをお願いします。Windows7 (32bit)の再インストールからやり直すしかないでしょうか?


ご質問のような現象は、ほとんどの場合 Outlook のアドインが原因で発生します。

Outlook のアドインの中にはインスペクターというメールの表示や作成を行うウィンドウで何らかの処理を行うものがあります。
そのようなアドインはメールをインスペクターで表示すると、アイテムを参照したり、プロパティを変更したりします。
そして、本来であればインスペクターを閉じた際には、アイテムを開放するという処理が行われます。

しかし、アドインによるアイテムの開放が不十分な場合、Outlook のメモリ上ではまだアドインが参照しているという状態になり、アイテムがロックされたままとなります。
msg ファイルを開いてこの状態になると、インスペクターを閉じても msg ファイル自体を閉じることができなくなってしまい、再度 msg ファイルを開こうとすると Outlook 自体がファイルをロックしているという状態になるので、ご質問のエラーが表示されるというわけです。

この問題の回避策としては、以下のいずれかが考えられます。

  • 問題を引き起こしているアドインを特定し、そのアドインを無効にする。
  • msg ファイルが開けなくなったら、Outlook を再起動する。

なお、もし自分で作成したアドインにより現象が発生しているということであれば、アドインがアイテムを参照した後、適切に開放処理を行っているか確認してみてください。
たとえば、VSTO でアドインを作成している場合、単に変数に Nothing や null を設定したとしても、その時点では Outlook のアイテムが解放された状態となりません。
これは、.NET Framework 上のガベージ コレクションにより完全にメモリからオブジェクトが解放されない限り、COM オブジェクトへの参照が残り続けるためです。
この動作についての詳細は以下のブログで詳しく説明されていますので、こちらを参照してください。

Office オートメーションで割り当てたオブジェクトを解放する – Part1

Windows のパスワードをリセットすると Outlook の POP/IMAP パスワードまでリセットされる現象について

Exchange サーバーのように Active Directory と連携していないメールサーバーを使用している場合、Windows にログオンする際のユーザー名・パスワードと Outlook でメールサーバーにログオンする際のユーザー名・パスワードは異なるものとなります。
しかし、環境によっては、Windows のパスワードをリセットすると、Outlook で保存していたはずのメールサーバーのパスワードがクリアされてしまうという現象が発生することがあります。
これは、以下の Windows Server 2012 R2 の不具合によって発生します。

3038562 管理者は、Windows Server 2012 の R2 ベースのドメイン コント ローラー上でパスワードをリセットした後、DPAPI データにアクセスできません。

Outlook では POP や IMAP など Exchange 以外のメールサーバーのパスワードについては、Windows のデータ保護 API (DPAPI) により暗号化してプロファイルのレジストリに保存しています。
そして、この DPAPI ではユーザーのパスワードをキーとして暗号化の処理を行っています。
そのため、ユーザーがパスワードを変更する際には、キーを変更する処理が必要となります。

しかし、上記の技術情報に記載されている不具合により Windows Server 2012 R2 のドメイン コントローラでパスワード変更が行われた場合には、キーの変更が正しく行われず、DPAPI で保存したデータの解読ができなくなります。
その結果、Outlook で保存していたパスワードが無効となり、Windows のパスワード変更後に無関係なメール サーバーのパスワードまで再入力が必要になるという現象が発生します。

この問題に対処するには Windows Server 2012 R2 のドメイン コントローラーに Windows Update で修正プログラムを適用してください。

別のExchange組織でエクスポートした連絡先をインポートすると配信不能になる問題に対処するマクロ

以前このブログでも記事にしたことがありますが、Exchange 環境でのメールアドレスとしては LegacyExchangeDN という X.500 形式のアドレスが使用されます。
また、グローバル アドレス一覧から連絡先にエントリーを追加すると、Outlook での見かけ上は SMTP アドレスが表示されていますが、Outlook が内部的に使用するメール アドレスは LegacyExchangeDN となっています。
そのため、グローバル アドレス一覧から追加した連絡先エントリーをエクスポートすると、メールアドレスのフィールドには LegacyExchangeDN が記載されるという結果になります。
さらに、LegacyExchangeDN は組織内でのみ有効なメールアドレスであるため、エクスポートした連絡先を別の Exchange 組織でインポートすると、その連絡先を使ってメールを送信しようとしても配信不能通知が返ってきてしまい、送信ができません。
この問題に対応するには、インポート先で別のフィールドに登録されている SMTP アドレスの情報をその連絡先のメールアドレスとして登録しなおす必要があります。
このような処理を自動化するマクロを作ってみました。
マクロは以下の通りです。

' ここをトリプルクリックでマクロ全体を選択できます。

Public Sub ConvertExToSmtp()
    Const PidLidEmail1OriginalDisplayName = "http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/8084001E"
    Dim fldContacts As Folder
    Dim objContact As ContactItem
    Dim strSmtpAddr As String
    Dim strDisplayName As String
    '
    Set fldContacts = Session.GetDefaultFolder(olFolderContacts)
    For Each objContact In fldContacts.Items
        If TypeName(objContact) = "ContactItem" Then
            With objContact
                If .Email1AddressType = "EX" Then
                    strSmtpAddr = .PropertyAccessor.GetProperty(PidLidEmail1OriginalDisplayName)
                    strDisplayName = .Email1DisplayName
                    .Email1AddressType = "SMTP"
                    .Email1Address = strSmtpAddr
                    .Email1DisplayName = strDisplayName
                    .Save
                End If
            End With
        End If
    Next
End Sub

マクロの登録方法やメニューへの追加について

HTML形式のメール本文の一部がOutlookでのみ表示されない現象

HTML 形式のメールを Outlook と他のメールソフトの間でやり取りしている際、まれに他のメールソフトでは表示される文字列が Outlook では表示されないという現象が発生することがあります。
また、この現象が発生したメールを Outlook で [アクション]-[ブラウザーで表示] により Internet Explorer などで表示を行うと、本文が正しく表示されるようになります。

こうなってくると、Outlook の不具合のように見えますが、実は Word のちょっと残念な仕様によるものです。
何故ここで Word が出てくるのかというと、すでに何度かこのブログでも取り上げている通り、Outlook が Outlook 2007 からメールの表示と編集の両方に Word のコンポーネントを使用するようになっているためです。
そして、Word では HTML メールに Word 固有のスタイルを使用するため、HTML ソースにちょっと特殊な HTML タグを埋め込みます。
たとえば、HTML 本文中に図形を重ねて挿入した場合、受信側が Outlook 以外のメールクライアントの場合、重なった図形は一つの画像となっており、分離することはできません。
しかし、Outlook (Word) でその HTML メールに返信や転送を行う際には、引用部分の図形も送信側と同様に重なり合った図形がそれぞれ個別に編集可能な状態となります。
このように、Outlook 同士でメールをやり取りしている間は非常に便利な機能なのですが、他のメールソフトとやり取りし始めると問題が生じてきます。

というのも、Word では固有のタグと同時に他のメールソフトで表示を行うための代替文字列や画像を挿入しているのですが、他のメールソフトによりWordで生成されたHTMLソース部分にインラインで文字列を追加した際、Wordでは表示されないタグの中に文字列が追加されてしまうことがあるためです。
たとえば、丸付き数字でリストを作った場合、HTML ソースは以下のようになります。

<p class=MsoListParagraph style='margin-left:18.0pt;mso-para-margin-left:0gd;
text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span
lang=EN-US style='mso-fareast-font-family:Century;mso-fareast-theme-font:minor-latin;
mso-bidi-font-family:Century;mso-bidi-theme-font:minor-latin'><span
style='mso-list:Ignore'>①<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-family:"MS ゴシック",serif;
mso-ascii-font-family:Century;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
"MS ゴシック";mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Century;
mso-hansi-theme-font:minor-latin'>項目1</span></p>

ちょっと長いですが、ここで問題になるのは <![if !supportLists]>mso-list:Ignore というタグです。
<![if !supportLists]> はリスト表示をサポートしていない場合にのみ表示を行うという意味であり、mso-list:Ignore はリスト表示において表示を行わないという意味です。
これらはいずれも Word 以外では意味をなさないタグであるため、他のメールソフトでは「①」が表示されます。
一方、Word はこのタグを番号付きリストとして解釈し、「①」自体は表示しません。
ただし、mso-list:l0 level1 lfo1 という指定により、HTML ソースの先頭部分で定義された番号付きリストとしての表示を行うため、結果的に「①」が表示されることになります。

ところが、Outlook 以外のメールソフトはそのような指定は解釈できないので、①の前後に文字列を追加すると、上記ソースの Word が表示を行わない部分に文字列が追加されることがあります。
そのようなメールを受信すると Outlook では本文の一部が表示されない状態になるのです。
つまり、この現象は返信や転送のメールの際に、Outlook以外のメールソフトで元のメールにインラインで書き込みを行った場合に発生するということです。

この現象を防ぐ方法には以下のようなものがあります。

1. HTML メールを使用しない。

最も確実な方法は、HTML メールを使用しないというものになります。
最近では HTML メールも当たり前になりつつありますが、以前は HTML メールはセキュリティ上の問題があるという話があり、敬遠されていました。
現在でも一部の企業では HTML メールをテキスト形式として表示するという設定を強制しているところもあります。
実際のところメールを HTML 形式で送らなければいけないという状況はそうそうあるものではないため、基本的にはテキスト形式で送信するほうがよいでしょう。
また、どうしても文字の色を変えたり画像を埋め込んだりしたいときには、リッチテキスト形式にして送信するという手もあります。
リッチテキスト形式で送信すると受信側で添付ファイルが WINMAIL.DAT になるという問題が生じやすくなりますが、以前このブログでも紹介した対処方法を行うことでこの問題は防ぐことができます。
そして、この場合にはリッチテキスト形式が Outlook や Exchange の機能により HTML 形式に変換され、この際には Word 固有のタグなどが使用されないため、問題が発生しません。

2. Outlook でリストを使用しない。

この問題が最も発生しやすいのは前述のリスト表示のタグによるものです。
そのため、Outlook でメールを作成する際にはリストのスタイルを使用しないようにすることで、この問題はほぼ防げると考えられます。
ただ、入力オート フォーマットの機能により、自動的にリストのスタイルに変更される場合もありますので、この対処方法をとる場合は入力オート フォーマットの [箇条書き (行頭文字)] と [箇条書き (段落番号)] をオフにした方が良いでしょう。
個人的には [序数 (1st, 2nd, 3rd, …) を上付き文字に変更する] と [ハイフンをダッシュに変更する] も文字化けの原因となるのでオフにした方が良いと思います。

3. メールの返信や転送で引用部分に文字列を追記しない。

これは、Outlook 以外のメールソフトを使っていて相手が Outlook を使用している場合なのですが、メールの返信や転送で引用部分にインラインで書き込むというのは避けた方が無難です。