我正在 Visual Studio 2010 中构建一个 Outlook 加载项,使用 VSTO 和 VB.net。
现在我正在处理邮件和邮寄项目。有没有办法确定当前显示的是邮件项目还是帖子项目?
我要做的就是关闭所有显示(打开)的项目(如果有的话),然后再将它们从当前文件夹移动到另一个文件夹。
我用谷歌搜索了很多,但我找不到我的问题的答案。
先感谢您。
您只需要检查该MailItem.EntryID
属性以查看一个邮件项目是否存在于 的集合中,Application.Inspectors
并且与它有一个Inspector.CurrentItem
关联EntryID
。下面是我过去使用过的一个有用的辅助方法。
注意:此技术不适用于新邮件(撰写),因为新邮件项目EntryID
在保存/发送之前不包含。
internal static bool HasInspector(Outlook.MailItem mailItem)
{
bool HasInspector = false;
try {
if (mailItem == null || string.IsNullOrEmpty(mailItem.EntryID)) return HasInspector; // short-circuit invalid params or new mail message (no entryid since it's not saved)
foreach (Outlook.Inspector inspector in Globals.ThisAddIn.Application.Inspectors)
{
Outlook.MailItem currentMailItem = inspector.CurrentItem as Outlook.MailItem;
if (currentMailItem != null && !string.IsNullOrEmpty(currentMailItem.EntryID))
{
HasInspector = Globals.ThisAddIn.Application.Session.CompareEntryIDs(currentMailItem.EntryID, mailItem.EntryID);
Marshal.ReleaseComObject(currentMailItem); currentMailItem = null; // resource RCW cleanup
}
}
}
catch { } // attempt to request inspector for mailitem
return HasInspector;
}
到目前为止,我发现的唯一解决方案是循环遍历Application.Inspectors
(记住它是基于 1 的集合,而不是基于 0 的集合)并查看是否有任何检查员的值CurrentItem
等于您的邮件项目。
您不能使用MailItem.GetInspector
,因为如果邮件项尚不存在,这将为邮件项创建一个检查器窗口。
如果存在的话,希望有人能够提供更好的解决方案!
遍历 Application.Inspectoes 集合中的检查器,为每个检查器读取 CurrentItem 属性(它可以返回不同类型的对象,例如 MailItem、ContactItem 等)。读取 EntryID 属性并使用 Namespace.CompareEntryIDs 将其与相关项目的条目 ID 进行比较。