質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

VSTO

Visual Studio Tools for Office

Q&A

0回答

1421閲覧

メールが既読になったタイミングで処理を実行するOutlook VSTOアドインの書き方

Blinkstick

総合スコア0

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

VSTO

Visual Studio Tools for Office

0グッド

0クリップ

投稿2020/08/06 20:34

編集2022/01/12 10:55

デスクトップ版Outlookで受信済みの未読メッセージの一つを選択すると数秒後に既読状態になるように設定していますが、既読に変わる際のイベントをきっかけに、未読メールの件数を表示するVSTOアドインを作ろうとしています。
手始めに、ItemChangeイベントを利用してみたのですが、この場合、既読への変化以外(例えばフラグの設定など)にも反応してしまいます。(①の箇所)
そこで、PropertyChangeイベントを利用して、コールバックメソッド内で、変更されたプロパティが既読に関するものかを判別する処理を実現しようとしたのですが、反応しません。
mailItemオブジェクトは取得できているようなので(②の箇所)、どうも、 イベントハンドラの登録ができていないようです。 (③の箇所)
ネット上の情報を見よう見まねで作ったので、おそらく何か根本的なミスをしていると思うのですが、どのようにすれば既読状態の変化だけを捉える事ができるでしょうか。

追記:どうも最初にメッセージボックスを表示させる(⓪の箇所)と、③の箇所も正常に機能するようです。

該当のソースコード

VSの新しいプロジェクトの作成から「Outlook VSTOアドイン」を選び、ThisAddin.csのpublic partial class ThisAddIn内に以下を記述(抜粋)

Outlook.NameSpace outlookNameSpace; Outlook.MAPIFolder inbox; Outlook.Items items; Outlook.MailItem mailItem; private void ThisAddIn_Startup(object sender, System.EventArgs e) { Outlook.NameSpace ns = Application.GetNamespace("MAPI"); Outlook.MAPIFolder inbox = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); MessageBox.Show("テスト"); //----⓪ items = inbox.Items; items.ItemChange += new Outlook.ItemsEvents_ItemChangeEventHandler(ItemChange); //----①これは動く foreach (Object item in inbox.Items) { if (item != null) { Outlook.MailItem mailItem = item as Outlook.MailItem; Debug.WriteLine(mailItem.Subject); //----②これは取得できている mailItem.PropertyChange += new ItemEvents_10_PropertyChangeEventHandler(PropertyChange); //----③これは動かない } } } void ItemChange(object item) { Debug.WriteLine( "変わった"); } void PropertyChange(string name) { if (name == "UnRead") { Debug.WriteLine("既読になった"); } }
C#

補足情報(FW/ツールのバージョンなど)

Win10 64bit
Microsoft Visual Studio Community 2019 Version 16.6.5
Office 2019 Outlook 16.0 64bit

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問