Outlook VSTO NewMailEx 未触发新存储
Outlook VSTO NewMailEx is not firing for new storage
我正在开发一个 Outlook 插件,当我的回调 NewMailEx 没有为新添加的存储调用时遇到问题。
我的代码如下所示:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Application.ItemSend += Application_ItemSend;
Application.NewMailEx += Application_NewMailEx;
}
private void Application_NewMailEx(string EntryIDCollection)
{
logger.Debug("Received e-mail with ID: {0}", EntryIDCollection);
var outlook_namespace = Application.GetNamespace("MAPI");
dynamic item = outlook_namespace.GetItemFromID(EntryIDCollection);
if (!(item is Outlook.MailItem))
return;
// do some stuff with mail
}
我也尝试订阅了一个新的存储空间:
{
Application.Session.Stores.StoreAdd += Stores_StoreAdd;
}
private void Stores_StoreAdd(Outlook.Store store)
{
logger.Info("New store is added: " + store.DisplayName);
Outlook.MAPIFolder rootFolder = store.GetRootFolder();
Outlook.MAPIFolder inbox = store.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
inbox.Items.ItemAdd += items_ItemAdd;
}
private void items_ItemAdd(object item)
{
if (item is Outlook.MailItem)
{
Outlook.MailItem mail = item as Outlook.MailItem;
// do some stuff with mail
}
}
但 ItemAdd 仅在同步期间为项目调用。对于新邮件,既不调用 NewMailEx 也不调用 ItemAdd。
但重启后一切正常,NewMailEx 照常工作。
您有任何解决方法或解决方法吗?
您的 items_ItemAdd 事件处理程序永远不会触发,因为您在编译器在行 inbox.Items.ItemAdd += items_ItemAdd
上创建的隐式变量上设置了事件处理程序。您需要将 Items 对象保存在专用变量器中(或者更好的事件 List<Items>
)以确保它保持活动状态并且 GC 永远不会释放它。
我正在开发一个 Outlook 插件,当我的回调 NewMailEx 没有为新添加的存储调用时遇到问题。
我的代码如下所示:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Application.ItemSend += Application_ItemSend;
Application.NewMailEx += Application_NewMailEx;
}
private void Application_NewMailEx(string EntryIDCollection)
{
logger.Debug("Received e-mail with ID: {0}", EntryIDCollection);
var outlook_namespace = Application.GetNamespace("MAPI");
dynamic item = outlook_namespace.GetItemFromID(EntryIDCollection);
if (!(item is Outlook.MailItem))
return;
// do some stuff with mail
}
我也尝试订阅了一个新的存储空间:
{
Application.Session.Stores.StoreAdd += Stores_StoreAdd;
}
private void Stores_StoreAdd(Outlook.Store store)
{
logger.Info("New store is added: " + store.DisplayName);
Outlook.MAPIFolder rootFolder = store.GetRootFolder();
Outlook.MAPIFolder inbox = store.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
inbox.Items.ItemAdd += items_ItemAdd;
}
private void items_ItemAdd(object item)
{
if (item is Outlook.MailItem)
{
Outlook.MailItem mail = item as Outlook.MailItem;
// do some stuff with mail
}
}
但 ItemAdd 仅在同步期间为项目调用。对于新邮件,既不调用 NewMailEx 也不调用 ItemAdd。
但重启后一切正常,NewMailEx 照常工作。
您有任何解决方法或解决方法吗?
您的 items_ItemAdd 事件处理程序永远不会触发,因为您在编译器在行 inbox.Items.ItemAdd += items_ItemAdd
上创建的隐式变量上设置了事件处理程序。您需要将 Items 对象保存在专用变量器中(或者更好的事件 List<Items>
)以确保它保持活动状态并且 GC 永远不会释放它。