Outlook 2016/2013 でルールによるアプリケーションやマクロの実行ができない

2017 年 5 月以降にリリースされた Outlook 2016 の修正プログラム、または 6 月以降にリリースされた Outlook 2013 の修正プログラムを適用すると、以下のような現象が発生します。

  • アプリケーションやマクロを実行するルールが (エラー) と表示される
  • 新規ルール作成で「アプリケーションを開始する」や「スクリプトを実行する」というアクションが選択肢からなくなる

これは、セキュリティ強化に伴う動作変更です。

ただし、機能が完全に削除されたわけではなく、以下のレジストリ設定を行うことで引き続き「アプリケーションを開始する」や「スクリプトを実行する」というアクションが使用できるようになります。

Outlook 2016 のキー: HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security\

Outlook 2013 のキー: HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Security\

値の名前: EnableUnsafeClientMailRules

値の種類: REG_DWORD

値のデータ: 1

– 参考リンク

How to control the rule actions to start an application or run a macro in Outlook 2016 and Outlook 2013

Outlookを操作するスクリプトを実行すると「Outlook 内に保存されている電子メール アドレス情報がプログラムによってアクセスされようとしています。」と警告が出る現象について

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


outlook2013(office365proplus)です。
ここでいろいろ参考にさせていただいて、予定表をテキストで取り出すvbsを
使っております。
数か月は問題なく使っていたのですが、最近、下記セキュリティのアラートが出るようになりました。
「Outlook内に保存されている電子メールアドレス情報がプログラムによってアクセスされようとしています。なんたら」
数分ごとに実行するようにスケジューリングしているので、事実上アラートが邪魔で使えない状況です。。
いろいろ調べたのですが、「セキュリティセンターの設定でプログラムによるアクセス」を「不審な動作に関する警告を表示しない」にする、というのしか見つかりません。(私は管理者ではないので、この項目を変更できません)
特定のプログラムを許可するようなオプションも見つかりません。
何か対策は無いでしょうか。
最近突然使えなくなったのは何かマイクロソフトで仕様変更したのでしょうか。。


メールアドレスへのアクセスの警告メッセージは、以下のような条件でスクリプトなどにより Outlook のオブジェクト モデルでメールアドレスが含まれるプロパティを参照した場合に表示されます。

  • ウイルス スキャン ソフトがインストールされていない
  • ウイルス スキャン ソフトのパターンファイルが最新でない
  • ウイルス スキャン ソフトのライセンスが切れている

これらのチェックには Windows の機能が使われており、たとえ実際にはウイルススキャンソフトがインストールされていたとしても、Windows のコントロール パネルの [セキュリティとメンテナンス] で [ウイルス対策] が有効で最新の状態になっていなければ Outlook で警告が出ます。
最近出るようになったということなのであれば、単にパターンファイルが最新でないだけではないかとも思いますが、ウイルス スキャン ソフトの状態がどうなっているかをコントロール パネルで確認してみてください。

参考:

電子メール アドレスの情報にアクセスしようとしているか、自分の代わりに電子メールを送信しようとしているプログラムに関する警告が表示される

msg ファイルとして保存しようとするとメモリ不足でエラーになる原因

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


はじめまして。これほど情報量満載のサイトがある
のを知り感動いたしました。
早速質問させて戴きたく。

Outlook2013上で所定フォルダ上のメールメッセージを
SaveAsメソッドによりディスクにmsg形式で保存する
VBAを作成していますが、メールメッセージがmsg形式
の添付ファイルを持つ場合に保存が失敗し、そこで
メモリエラーでプログラムが途中終了してしまいます。
保存の際、ディスク上に16kBのmsgファイルが出来る
のですがサイズがそこから増えることなく、エラー
「処理を実行するためのメモリが不足しています」が
出て、途中終了するとともに、上記ファイルが自動
削除されます。

【試行実験】
・msg形式での保存では、Unicodeの如何を問わず保存不能
・マニュアルで「ファイル~名前をつけて保存(msg形式)」
でも保存不能
・保存不能のケースで、TXT形式での保存は可能
・添付のmsgファイルが壊れていることはおそらくなく、
ダブルクリックで開いてみることが可能。但しそれを
保存することも同じエラーで不能。
・メールメッセージをexplorer上のD&Dしてmsg形式で
保存することは可能

【相談事項】
所定フォルダ上の複数のメールメッセージを1つずつ
msg形式でプログラムで保存したいので、
・最終的には、対象とするメールメッセージを全て保存したい
・不能なメッセージがあってもそこで途中終了せず、次の対象
の保存に取りかかれるようにせめてしたい

【参考】
添付ファイルのmsgが大きなサイズの場合に失敗するようですが、
以下には必ずしもそうでは無く沢山の相手先が設定されていると
失敗するとの話もあるそうです。もはや私には理解が及びません。
https://www.experts-exchange.com/questions/28536821/Outlook-vba-cannot-save-a-large-Msg-file-to-disk-error-2147024882-There-is-not-enough-free-memory.html
https://social.msdn.microsoft.com/Forums/office/en-US/2836370d-33dd-44fe-b480-26edcf1f6859/does-the-saveas-method-in-microsoftofficeoutlookinterop-have-a-maximum-file-size?forum=outlookdev
何卒よろしくお願いいたします。


msg ファイルがメモリ不足で保存できないという現象が発生する場合、ほとんどは msg ファイルで使用されている OLE 複合ファイルという形式の制限に起因して発生しています。

OLE 複合ファイルとは Windows で一つのファイルに様々な情報をオブジェクトという形で保存する形式のファイルです。
多くのファイル フォーマットは、特定のデータを保存するための形式であり、例えばテキスト形式なら文字列データ、JPG 形式なら画像データなどを保存します。
しかし、OLE 複合ファイルについてはどのようなデータでも保存可能とするため、データをオブジェクトという形で複数保存できるようになっています。
実際、Office 2003 までは Word も Excel も PowerPoint も OLE 複合ファイルの形式でファイルを保存しており、Word ファイルの中に Excel データの一部を埋め込んだり、拡張子を削除してもダブルクリックすると適切なアプリケーションで自動的に開いたりできていました。

Outlook も他の Office 製品と同様に OLE 複合ファイル形式で msg ファイルや oft ファイルを保存しており、メールに含まれる受信者や添付ファイルはそれぞれ個別のオブジェクトとしてファイルに格納されています。
また、メールに別のメールを添付しているという場合、添付されたメールも単一のデータではなく、そのメール自体の受信者や添付ファイルが個別のオブジェクトとして保存されます。
そのため、多数の受信者や添付ファイルを含むメールを保存する場合、一つの OLE 複合ファイル内に大量のオブジェクトが生成されるということになります。
しかし、OLE 複合ファイルでは一つのファイル内で同時に開くことができるオブジェクトの数が制限されており、この制限を超えるような書き込みが行われた場合に「メモリ不足」という意味のエラーが発生するのです。

SaveAs で保存できないアイテムを Explorer にドラッグアンドドロップすると保存ができるようですが、この場合はファイルへの書き込みを行うのは Explorer であり、Explorer が何らかの方法で制限を回避しているものと思われます。
(あるいは単にエラーを無視しているだけかもしれません。)

いずれにせよ、残念ながら、マクロで SaveAs により msg ファイルとして保存する場合にマクロの記述方法やレジストリ設定などでこの制限を回避する方法はありません。
このエラーが発生した場合に処理を中断させたくないということであれば、SaveAs の前に On Error Resume Next を実行し、エラーで中断せずに継続させるようにしてください。

参考リンク:

No MSG For You! – SGriffin’s MAPI Internals

[INFO] MSG 複合ファイルへのメッセージの保存

VBA の実行時エラーを処理する

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