Outlook事件函数在共享邮箱-C上使用时会多次触发#

Outlook事件函数在共享邮箱-C上使用时会多次触发#,outlook,vsto,outlook-addin,office-addins,Outlook,Vsto,Outlook Addin,Office Addins,我有一个功能,可以检查每个新来的电子邮件收件箱,如果它是回复,它会把它移到“回复”文件夹 它在多人电脑的共享邮箱上运行。问题是,它会移动电子邮件文件,但会将同一电子邮件的多个副本创建到“回复”文件夹中。我怎样才能修好它 这是我的代码,任何帮助都将不胜感激 多谢各位 Outlook.NameSpace outlookNameSpace; Outlook.MAPIFolder inbox; private Outlook.Items items; p

我有一个功能,可以检查每个新来的电子邮件收件箱,如果它是回复,它会把它移到“回复”文件夹

它在多人电脑的共享邮箱上运行。问题是,它会移动电子邮件文件,但会将同一电子邮件的多个副本创建到“回复”文件夹中。我怎样才能修好它

这是我的代码,任何帮助都将不胜感激

多谢各位

        Outlook.NameSpace outlookNameSpace;
        Outlook.MAPIFolder inbox;
        private Outlook.Items items;

private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {

            Outlook.NameSpace ns = Globals.ThisAddIn.Application.Session;
            Outlook.MAPIFolder inbox = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

            outlookNameSpace = this.Application.GetNamespace("MAPI");
            string recipientName = "abc@abcd.com";
            Outlook.Recipient recip = outlookNameSpace.CreateRecipient(recipientName);
            recip.Resolve();
            if (recip.Resolved)
            {
                inbox = outlookNameSpace.GetSharedDefaultFolder(recip, Outlook.OlDefaultFolders.olFolderInbox);
                items = inbox.Items;
                items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(items_ItemAdd);
            }
        }


我处理它的方式是,当我们的用户回复电子邮件时,它将保存自定义用户属性以及来自客户的原始电子邮件。用户属性是我们的用户名。当他们收到客户的回复时,插件会检查当前用户是否和原始电子邮件中保存的用户属性相同;然后加载项将电子邮件移动到文件夹。像这样,每个回复上的条件只有一次为真。

那么为什么会有多个条目?是否为同一物品多次添加火焰?或者是因为它在多台机器上运行?您好,Dmitry,看起来是因为同一加载项在多台机器上运行,并且它们都在缓存模式下运行。有没有办法解决这个问题?谢谢。不是真的,除非您限制每个加载项仅在其自己的主邮箱上运行。即使这样,您也可能有多台计算机连接到同一个邮箱
       void items_ItemAdd(object Item)
        {
            if (Item != null)
            {
                Outlook.MailItem mail = Item as Outlook.MailItem;
                if (mail.MessageClass == "IPM.Note")
                {
                    try
                    {
                        Outlook.Application app = Globals.ThisAddIn.Application;
                        if (Item is Outlook.MailItem)
                        {
                            if (mailItem.ConversationIndex.Length >= 64)
                            {
                                Outlook.Folder nonInbox = folder.Parent as Outlook.Folder;
                                string FolderName = "Reply";

                                Outlook.MAPIFolder DestFolder = null;
                                try
                                {
                                    DestFolder = nonInbox.Folders[FolderName];
                                }
                                catch
                                {

                                }
                                try
                                {
                                    mailItem.Move(DestFolder);
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show(ex.Message);
                                }
                            }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
        }