IMAP では色分類項目が使えない

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


助けてほしいです。
小さい転職先の会社でOutlook 2013をIMAPで使っているのですが、色分類項目が使えません。POPに変えると他の端末(IPHONE)からメールが見れないくなると聞きました。この分類項目を是非使いたのですが、方法はあるのでしょうか?
宜しく、お願い致します。


IMAP フォルダーのメールは、サーバー上のものと同期しており、ローカルで変更を加えた場合はサーバー上のメールも更新する必要があります。
一方、色分類項目は Outlook 独自の機能であり、IMAP サーバー上に同期することはできないため、IMAP フォルダー上では使用できません。
したがって、色分類項目を使いたい場合は、PST ファイルを追加し、メールを PST に移動する必要がありますが、そうするとほかの端末から見えなくなるということになります。

もし、IMAP サーバー上でフォルダーの振り分けをしていないのであれば、POP に切り替えたほうが良いでしょう。
POP を使っている場合でも、サーバーにメールを残すという設定をすれば、他の端末からでもメールが読めるようになります。
ただし、IMAP とは異なり、未読・既読の状態は端末ごとに保持され、他の端末で既読にしたメールでも、その端末で読んでいないメールは未読となります。

色分類項目を使いつつ、他の端末でも未読・既読状態やフォルダーの階層情報を維持したいということになると、Exchange サーバーを使用するしか方法はないといえます。

広告

HTML メールでの OLE パッケージ オブジェクトを制限する方法

015 年の 12 月に Outlook でメッセージをプレビューしただけで悪意のあるコードを実行されてしまうという Word の脆弱性に対応するセキュリティ修正プログラムがリリースされましたが、それに関連して以下のブログの脆弱性が話題になっているようです。

OLEOutlook – bypass almost every Corporate security control with a point’n’click GUI

このブログで記載されている脆弱性というのは、以下のような手順でメールを送信することにより、exe ファイルを意図せず実行させられるというものです。

  1. HTML 形式のメールを作成し、[挿入]-[オブジェクト] でパッケージとして exe ファイルを埋め込みます。
      (このとき、アイコンや名前を変更し、通常のファイルのように偽装できます。)
  2. 作成したメールを送信前の状態で下書きや msg ファイルとして保存し、別のメールに添付して送信します。
  3. 受信側で添付された下書きメールに表示されているオブジェクトをダブルクリックすると、埋め込んだ exe ファイルが実行できてしまいます。

この問題に対する対処方法としては、mso を危険な添付ファイルの拡張子としてブロックする設定を行うというものがあります。
Outlook での拡張子による添付ファイルのブロック方法はいくつかありますが、ユーザー権限でできる方法は以下のレジストリ設定となります。

  キー: HKEY_CURRENT_USER\Software\Microsoft\Office\<Ver>\Outlook\Security
  名前: Level1Add
  種類: REG_SZ
  値: .mso

※  <ver> は Outlook のバージョン (2007 = 12.0、2010 = 14.0、2013 = 15.0、2016 = 16.0)

上記以外の設定方法については Outlook 2013 で添付ファイル設定を計画する をご覧ください。

HTML メールで OLE オブジェクトを埋め込んだ場合は拡張子が .mso となるので、上記の設定により OLE パッケージ オブジェクトが埋め込まれたとしても実行ができなくなります。
ただし、この設定を行うと、パッケージ オブジェクトだけでなく、Excel ワークシートや PowerPoint スライドなど他の OLE オブジェクトも実行できなくなります。
そのため、Excel ワークシートを埋め込んで返信時にフォームのように入力させたり、AllowInplaceOleActivation レジストリの設定により受信時の OLE オブジェクト実行を可能としているような場合には注意が必要です。

なお、上記のブログでは回避策として ShowOLEPackageObj というレジストリ設定を 0 にするというものが紹介されていますが、これは回避策とはなりません。
何故なら、ShowOLEPackageObj が有効なのはリッチテキスト形式で本文に OLE パッケージ オブジェクトが埋め込まれている場合であり、HTML 形式のメールには作用しないためです。

また、ShowOLEPackageObj は既定で 0 (= 表示しない) となっているため、通常はリッチテキスト形式で上記の手順を実行しても OLE パッケージ オブジェクトは表示すらされません。
意図的に ShowOLEPackageObj を 1 と設定している場合に限り、既定の 0 に戻すことで上記のような手順による攻撃を防ぐことができるようになります。

メッセージ形式により OLE オブジェクトの動作や設定が変わり、ちょっとわかりにくいかと思いましたので、整理してみました。

HTML 形式の場合

  • 既定の動作
    • 受信メール: OLE オブジェクトは画像として表示され、実行はできない
    • 送信前のメール: OLE オブジェクトの実行ができる
  • Level1Add などにより .mso を制限する拡張子として追加
    • 受信メール・送信前のメールとも、OLE オブジェクトは画像として表示され、実行できなくなる
  • ShowOLEPackageObj を設定
    • HTML 形式では無効

リッチテキスト形式の場合

  • 既定の動作
    • OLE パッケージ オブジェクトは表示されない
    • 受信メール: パッケージ以外のオブジェクトは画像として表示され、実行はできない
    • 送信前のメール: パッケージ以外のオブジェクトの実行ができる
  • ShowOLEPackageObj を 1 とした場合の動作
    • 受信メール: パッケージを含む OLE オブジェクトは画像として表示され、実行はできない
    • 送信前のメール: パッケージを含む OLE オブジェクトの実行ができる
  • Level1Add などにより .mso を制限する拡張子として追加
    • リッチテキスト形式では無効

特定のフォルダー以下のサブフォルダーの未読メールをまとめて管理する方法

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


Outlook2010で、部署名フォルダの下に各社員のフォルダをつくる等、階層構造を使って管理しております。
その際、下記の2つを実行できたらと考えているのですが、そのようなスクリプトは作成可能でしょうか。

1) サブフォルダ以下の未読数を表示する機能。
部署名フォルダにサブフォルダ(各社員)の未読数の合計を表示。

2) フォルダ及びサブフォルダの未読を一括して既読にする機能。
部署名フォルダを選択した際に、部署フォルダ及びサブフォルダ(各社員)の未読を一括して既読にできる機能。

もし方法がありましたら、教えていただければ大変助かります。


このようなご要望であれば、検索フォルダーでも実現可能でしょう。
既定の「未読メール」検索フォルダーはメールボックスのすべての未読メールが表示されますが、カスタマイズした検索フォルダーを作ることで特定のフォルダーの下のサブフォルダーすべての未読メールだけを検索することが可能です。
そのような検索フォルダーを作成する手順は以下の通りです。

  1. フォルダー ツリー上の [検索フォルダー] を右クリックし、[新しい検索フォルダー] をクリックします。
  2. [検索フォルダーを選択してください] の下のボックスをスクロールし、一番下の [カスタム検索フォルダーを作成する] を選択します。
  3. [選択] ボタンをクリックします。
  4. [名前] に適切な名前 (xx フォルダーの未読 など) を入力します。
  5. [条件] をクリックし、[詳細設定] タブで [開封状況] をオンにし、右のドロップダウンで [未読] を選択して [OK] をクリックします。
  6. [参照] をクリックします。
  7. 既定ではメールボックスのルート フォルダーのチェックボックスがオンになっているので、これをオフにします。
  8. 部署名のフォルダーのチェックボックスをオンにし、ダイアログ下部の [サブフォルダーも検索する] をオンにして [OK] をクリックします。
  9. [OK] をクリックします。

このようにして作成した検索フォルダーには指定されたフォルダー以下のすべてのサブフォルダーの未読メールがリストアップされ、検索フォルダーの右の数字はすべてのサブフォルダーの未読メールの合計数となります。
また、検索フォルダーを右クリックし、[すべて開封済みにする] をクリックすれば、サブフォルダーのすべての未読メールを既読にすることもできます。

共有メールボックス全体を検索する方法

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


ご教授お願いします。
エクスチェンジオンラインにOutlook2013で接続しております。
共有のメールボックスに対しての検索機能ですが
フォルダを検索、見つからない場合は共有メールボックス全体を検索という動作ができず。
困っております。

共有メールボックス全体を検索するようなマクロは可能でしょうか?

ご回答お待ちしております。


残念ながら、マクロによる解決はできません。
共有メールボックス全体の検索ができないというのは、共有メールボックスをキャッシュしている場合の検索における制限事項になります。

Exchange サーバーにキャッシュ モードで接続している場合、検索のインデックスは Windows Desktop Search により作成されます。
そして、Windows Desktop Search が Outlook のメールのインデックスを作成する際には、OST や PST というファイルの単位でインデックスが生成され、[現在のメールボックス] を選択して検索される範囲は、選択しているフォルダーが含まれる OST や PST 全体を意味します。

ここで問題となるは、共有メールボックスのキャッシュが自分自身のメールボックスの OST に含まれているという点です。
[現在のメールボックス] で検索した際に、OST に含まれるすべてのアイテムを検索対象としてしまうと、自分のメールボックスのアイテムだけでなく、キャッシュされている共有メールボックスのアイテムまで検索されてしまうことになります。
それを防ぐため、OST で [現在のメールボックス] を選択した場合には、OST に含まれる自分自身のメールボックスのアイテムだけが対象となり、共有メールボックスは除外される動作となります。
さらに、[すべてのメールボックス] や [すべての Outlook アイテム] を選択した場合も、OST にキャッシュされた共有メールボックスは除外対象となります。

そして、共有メールボックスのような除外対象のフォルダーは、そのフォルダーを選択している場合だけ検索ができるという動作となるのです。

回避策としては、[共有フォルダーをダウンロード] をオフにするというものがあります。
手順は以下の通りです。

  1. [ファイル]-[アカウント設定]-[アカウント設定] をクリックします。
  2. Exchange Online のアカウントをダブルクリックします。
  3. [詳細設定] をクリックします。
  4. [詳細設定] タブの [共有フォルダーをダウンロード] をオフにし、[OK] をクリックします。
  5. [次へ]、[完了] をクリックします。

このようにすると、共有メールボックスについてはキャッシュせずにオンラインでアクセスするようになりますが、オンラインで検索を実行すると Exchange サーバーで生成されたインデックスが使用され、この場合には共有メールボックスであってもメールボックス単位やサブフォルダーの検索が可能となります。

なお、共有メールボックスを個別の Exchange アカウントとして追加するという回避策もあるのですが、AutoMapping という機能が有効になっている場合に様々な問題が発生するため、おすすめはしません。

参考リンク: Understanding Search Scopes in Microsoft Outlook

アイテムのショートカットを開くために必要な設定

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


Exchange 2010 の環境で、Outlook は 2007,2010,2013 を利用しています。
[新しい電子メール] から [挿入] の中の [アイテムの添付] – [Outlook アイテム] を選んだ際、書式設定が [リッチ テキスト形式] だった場合のみ、 [挿入する形式] として [ショートカット] が選択可能となりますが、これを選択した状態でメール アイテムやパブリックフォルダ アイテムを挿入するとショートカットが正常に動作しないようです。
Outlook 2013 では、メール作成者が貼り付けられたショートカットをクリックすると以下のメッセージが表示されます。

このオブジェクトは MailMsgAtt で作成されましたが、このプログラムがお使いのコンピュータにインストールされていないか、応答しません。
このオブジェクトを編集するには、MailMsgAtt をインストールするか、MailMsgAtt でダイアログ ボックスが開いていないことを確認します。

これはどういう意味でしょうか?
なお、該当メールを送信後、送信者の [送信済みアイテム] からショートカットをクリックした場合や、メール受信者がショートカットをクリックしても、エラーも出ず、無反応な状態です。


アイテムの添付における [ショートカット] は、ディスクで作成できるショートカット ファイルと同様、実体となるアイテムへのリンク情報のみを添付するものです。
たとえば、サイズが大きいアイテムのショートカットのみを送信することで、メールのサイズを小さくすることができます。

この、アイテムのショートカットについては、通常の添付ファイルやアイテムとは異なり、OLE の埋め込みオブジェクトという形で本文に貼り付けられます。
OLE オブジェクトというのは、異なるアプリケーションのデータを一つのファイルの中に同居させることを可能とする技術で、これを利用することで Word の文書に Excel のグラフや表を画像ではなく Excel のオブジェクトとして貼り付け、Word 文書の中であっても Excel ができるようになります。
HTML 形式やテキスト形式の本文では OLE オブジェクトの埋め込みができないので、リッチテキスト形式の場合に限りショートカットで挿入が可能となります。

ただし、OLE オブジェクトにはスクリプトを仕込むようなことも可能であり、外部からのデータの OLE オブジェクトをダブルクリックで簡単に実行してしまうと、ウィルスに感染するというような危険も潜んでいます。
そのため、Outlook の既定では受信したメールの OLE オブジェクトは実行できないようになっており、受信メールや送信済みアイテムのショートカットをダブルクリックしても何も起こりません。
OLE オブジェクトを実行できるようにするには、以下のレジストリ設定が必要となります。
なお、<ver> には Outlook のバージョン番号 (Outlook 2013 なら 15.0、Outlook 2010 なら 14.0、Outlook 2007 なら 12.0) が入ります。
また、このキーは管理者権限がないユーザーは書き込むことができませんので、管理者権限が無い場合はシステム管理者にご相談ください。

キー: HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\<ver>\Outlook\Security
値1: AdminSecurityMode = 3 (DWORD)
値2: AllowInPlaceOleActivation = 1 (DWORD)

上記の AdminSecurityMode = 3 はセキュリティ関連の設定をグループ ポリシーで設定されるレジストリにより行うための指定であり、AllowInPlaceOleActivation = 1 は OLE オブジェクトを実行できるようにする設定です。
これにより受信メールでも送信前と同様にショートカットをダブルクリックで開くことができるようになりますが、このような設定を行うことでセキュリティのリスクが高まるため、設定を行う際にはセキュリティに注意してください。

そして、ダブルクリックで開けるようになると、ご質問にあった以下のエラーが表示される動作となります。

このオブジェクトは MailMsgAtt で作成されましたが、このプログラムがお使いのコンピュータにインストールされていないか、応答しません。
このオブジェクトを編集するには、MailMsgAtt をインストールするか、MailMsgAtt でダイアログ ボックスが開いていないことを確認します。

このエラーの MailMsgAtt というのは、OLE オブジェクトとして埋め込まれたショートカットのアプリケーション名にあたるものなのですが、何故か Outlook ではなく MailMsgAtt という名前になっています。
つまり、Outlook で開こうとしているにもかかわらず、Outlook が応答しないという状況になっているのですが、これを応答可能とするには以下のレジストリ設定が必要になります。

キー: HKEY_CURRENT_USER\Software\Microsoft\Office\<ver>\Outlook\Options\Mail
値: EnableHotfix19966 = 1 (DWORD)

これにより、ショートカットをダブルクリックで開くことができるようになります。

なお、レジストリを編集するのが難しいという方のためにレジストリ設定を行うスクリプトも作成しました。
スクリプトは以下の通りです。

' ここをトリプルクリックでスクリプト全体を選択できます。
Dim olkApp
Dim wshShell
Dim strVer
Set olkApp = CreateObject("Outlook.Application")
Set wshShell = CreateObject("WScript.Shell")
' バージョン取得
strVer = Left(olkApp.Version, 4)
' レジストリ設定
wshShell.RegWrite "HKCU\Software\Policies\Microsoft\Office\" & strVer & _
    "\Outlook\Security\AdminSecurityMode", 3, "REG_DWORD"
wshShell.RegWrite "HKCU\Software\Policies\Microsoft\Office\" & strVer & _
    "\Outlook\Security\AllowInPlaceOLEActivation", 1, "REG_DWORD"
wshShell.RegWrite "HKCU\Software\Microsoft\Office\" & strVer & _
    "\Outlook\Options\Mail\EnableHotfix19966", 1, "REG_DWORD"

テキスト形式で全角文字と半角文字の間にスペースが入る動作を回避する方法

Outlook 2007 以降では、メールの表示に Word のコンポーネントが使用されますが、Word の既定では全角文字と半角文字の間のスペースを調整する機能が有効となっており、テキスト形式のメールの表示においてもこの機能により微妙にずれが生じる場合があります。
この動作を無効にする手順はちょっとトリッキーなのですが、以下のようなものになります。

  1. Outlook を終了します。
  2. レジストリ  エディターを起動します。
  3. 以下の 2 つの値が存在する場合は削除します。
    – Outlook 2013
    HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\MailSettings\TextFontComplex
    HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\MailSettings\TextFontSimple

    – Outlook 2010
    HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\MailSettings\TextFontComplex
    HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\MailSettings\TextFontSimple

    – Outlook 2007
    HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Common\MailSettings\TextFontComplex
    HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Common\MailSettings\TextFontSimple
  4. Outlook を起動します。
  5. 新規メッセージを作成し、リッチ テキスト形式を選択します。
  6. 本文を選択し、[書式設定] タブのスタイルの一覧の [標準] を右クリックし、[変更] をクリックします。
  7. [スタイルの変更] 画面で、[書式] – [段落] をクリックします。
  8. [体裁] タブの [日本語と英字の間隔を自動調整する] と [日本語と数字の間隔を自動調整する] をオフにし、[OK] をクリックします。
  9. [このテンプレートを使用した新規文書] を選択し、[OK] をクリックして画面を閉じます。

ポイントは、手順3で既存のテキスト形式の書式指定を削除するところと、手順5でリッチテキスト形式を指定するところにあります。
リッチテキスト形式で指定した標準のスタイルがテキスト形式でも使用されるのですが、一度テキスト形式のフォントなどを指定するとその際のスタイルがレジストリに保存され、以降は標準のスタイルを読み込まないという動作になっているのです。

連絡先のビューで並べ替えが使えない現象について

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


Outlook2013を使いはじめましたが、「連絡先」から「表示」を選ぶと、「並べ替え」を選択できません(色が薄くなっている)。ファイルが壊れているか、何かでしょうか。


Outlook の [連絡先] で [並べ替え] が使用できるかどうかは、ビューの種類によって決まります。
[表示] リボンの [ビューの変更]-[ビューの管理] をクリックすると、表示しているフォルダーで使用できるビューとその種類が表示されます。
そして、連絡先フォルダーで使用可能なビューの種類としては、「表」、「カード」、「名刺」の3種類があるのですが、このうち [並べ替え] が使用できるのは「表」の種類だけに限られます。
その理由は、おそらく「カード」と「名刺」でのみ使用可能な「見出し」機能によるものです。
連絡先の「見出し」とは連絡先の一覧表示の右または左に表示される「123」や「ア」、「カ」などと表示されているもので、例えば「ア」をクリックすると姓のフリガナが「あ」で始まる連絡先までジャンプします。
このような機能はほかのビューにはない独特のものですが、これを正しく機能させるために、並べ替えの選択ができない状態になっていると思われます。

したがって、連絡先フォルダーで [並べ替え] を使用するには、まずビューとして「表」のビューを選択する必要があるのです。