如何使用 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}");
}
}
我们在 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}");
}
}