質問

Outlook 2007アドインを書いています。私がしていることは:

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        Outlook.Folder root;

        //creates Spam folder if it dosen't exist
        if (!SpamFolderExist())
        {
            CreateSpamFolder();
        }

        root = (Outlook.Folder)this.Application.Session.DefaultStore.GetRootFolder();

        //set BeforeItemMove event for spam and inbox folders
        spamFolder = (Outlook.Folder)root.Folders["Spam"];
        inboxFolder = (Outlook.Folder)this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

        spamFolder.BeforeItemMove += new Microsoft.Office.Interop.Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(BeforeItemMoveFromSpam);
        inboxFolder.BeforeItemMove += new Microsoft.Office.Interop.Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(BeforeItemMoveFromInbox);

        //set new mail event
        this.Application.NewMail += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_NewMailEventHandler(OnNewMail);
    }

問題は、BeforeItemMoveFromInboxメソッドとBeforeItemMoveFromSpamメソッドに何も書いていない場合でも、アプリケーションの動作がおかしいことです。いくつかのメールを移動した後、特定のメールに対してそれ以上の移動アクションは実行されません。メールがブロックされているようで、移動できません。他の移動アクションを実行すると、他のメールがブロックされ、以前にブロックされていたメールを移動できます。これは、メールがブロックされた後、常に少なくとも1つのメールを移動できないという考え方です。言い換えると、移動アクションの一部がランダムに失敗します。フォルダー間でメールを移動する以外に何もしておらず、エラーメッセージが表示されないことを言わなければなりません。また、メソッドの最後でBeforeItemMoveイベントハンドラーのキャンセルパラメーターをfalseに設定しようとしましたが、同じ動作になりました。

役に立ちましたか?

解決

76melが手に入りました。私は同じ問題を抱えていました(フォルダーをBeforeItemMoveイベントにフックするだけで、そのフォルダーからメッセージを移動したときに、新しいフォルダーから別のフォルダーに少しの間移動できませんでした) 。

Marshal.ReleaseComObject()をイベントハンドラの最後に追加すると、完全に修正されました。

他のヒント

上記の問題の説明を理解したら、

アイテムを受信トレイからスパムフォルダーに移動するとイベントが発生しますが、同じアイテムを元に戻すと機能しません。 ?移動元のallsフォルダーのイベントをフックする必要があるため。

発生している可能性があるのは、イベントハンドラーでオブジェクトを解放する必要がある場合があることです Marshal.ReleaseComObject()

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top