2

我正在 Visual Studio 2010 中构建一个 Outlook 加载项,使用 VSTO 和 VB.net。

现在我正在处理邮件和邮寄项目。有没有办法确定当前显示的是邮件项目还是帖子项目?

我要做的就是关闭所有显示(打开)的项目(如果有的话),然后再将它们从当前文件夹移动到另一个文件夹。

我用谷歌搜索了很多,但我找不到我的问题的答案。

先感谢您。

4

3 回答 3

1

您只需要检查该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;
}
于 2012-05-17T13:13:03.333 回答
1

到目前为止,我发现的唯一解决方案是循环遍历Application.Inspectors(记住它是基于 1 的集合,而不是基于 0 的集合)并查看是否有任何检查员的值CurrentItem等于您的邮件项目。

您不能使用MailItem.GetInspector,因为如果邮件项尚不存在,这将为邮件项创建一个检查器窗口。

如果存在的话,希望有人能够提供更好的解决方案!

于 2014-09-13T12:30:11.760 回答
0

遍历 Application.Inspectoes 集合中的检查器,为每个检查器读取 CurrentItem 属性(它可以返回不同类型的对象,例如 MailItem、ContactItem 等)。读取 EntryID 属性并使用 Namespace.CompareEntryIDs 将其与相关项目的条目 ID 进行比较。

于 2014-09-13T16:35:02.880 回答