如何使用 C# 在 Outlook 中为多个文件夹添加 ItemAddEventHandler?

How to add ItemAddEventHandler for multiple folders in outlook using C#?

我们在 Outlook 中添加了一些规则,根据某些条件将项目移动到某个文件夹。

示例:如果电子邮件发件人是 xyz@gmail.com 并且主题包含特定关键字让我们说“新闻”然后将该电子邮件移动到文件夹“NewsFolder”,如果电子邮件发件人是 prq@gmail.com 那么将该电子邮件移至“InterestFolder”文件夹。等等

我想在将项目添加到特定文件夹时执行一些操作,我在 app.config 中添加了配置以检查文件夹名称。我尝试使用 itemAdd 事件处理程序,但我失败了。

下面是我的代码。

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

Private void ThisAddIn_Startup(object sender, system.EventArgs e)
{
           //configuration will come from app.config file
        
            string configuration="news,NewsFolder|interest,InterestFolder"; //comma separated by keyword, folder name
            string[] conf = configuration.split('|');
            foreach(string singleConfiguartion in conf)
           {
                  string[] config = singleConfiguraiton.Split(','); 
                  string configFolderName= config[1].ToString(); //get folder name from configuration
                  Application.ActiveExplorer().CurrentFolder = inbox.Folders[configFolderName];
                  Outlook.MAPIFolder currentFolder = inbox.Folders[configFolderName];
                  items= currentFolder.Items;
                  items.ItemAdd+= new Outlook.ItemEvents_ItemAddEventHandler(ItemAddedEventHandler);
           }
    
}    

void ItemAddedEventHandler(Object item)
{

}

如果我只想为“收件箱”文件夹添加事件处理程序,则可以使用这种方法。但我想为“NewsFolder”和“InterestFolder”添加事件处理程序。

创建一个包含 Items 集合并实现 ItemAdd 事件处理程序的包装器 class。然后,您可以将这些包装器保存在一个列表中。在我的脑海中:

private List<FolderWrapper> _folders = new List<FolderWrapper>();
...
foreach(string singleConfiguartion in conf)
{
    ...
    _folders.Add(new FolderWrapper(currentFolder));
}

public class FolderWrapper
{
    private MAPIFolder _folder;
    private Items _items;
    public FolderWrapper(MAPIFolder folder)
    {
        _folder = folder;
        _items = _folder.Items;
        _items.ItemAdd += ItemAddedEventHandler;
    }
    private ItemAddedEventHandler(object Item)
    {
        MessageBox.Show($"new item is created in {folder.Name}");
    } 
}