繁体   English   中英

Outlook加载项无法获取收件箱项

[英]Outlook Add-in Unable to get inbox items

正在开发审核收件箱中的邮件的方法。 在这种情况下,我尝试使用自定义类将所有邮件项目包装在收件箱中。 我正在使用以下代码来做到这一点。

OutlookNS._NameSpace outNS;
        List<MailWrapper> wrappedItems = new List<MailWrapper>();
        OutlookNS.Explorer explorer;
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            outNS = this.Application.GetNamespace("MAPI");
            OutlookNS.MAPIFolder folder = outNS.GetDefaultFolder(OutlookNS.OlDefaultFolders.olFolderInbox) as OutlookNS.MAPIFolder;

            foreach (OutlookNS.MailItem item in folder.Items)//No items here
            {
                try
                {
                    OutlookNS.MailItem mailItem = item as OutlookNS.MailItem;
                    MailWrapper wrappedItem = new MailWrapper(mailItem); ;
                    wrappedItems.Add(wrappedItem);
                }
                catch (Exception ex)
                {
                    // do nothing for now
                }
            }
        }

但这没有获取任何项目。 有人可以帮忙吗?我猜可能是因为邮件仍未加载。

首先,永远不要遍历文件夹中的所有项目-您将用完RPC通道。

最重要的是,您假设收件箱中的所有项目都是MailItem对象。 您还可以拥有MeetingItemReportItem等。

无需将所有项目包装在文件夹中。 相反,您可以处理Explorer类的SelectionChange事件,当用户以编程方式或通过与用户界面进行交互来选择其他或其他Microsoft Outlook项目时,将触发该事件。 当用户(通过编程方式或通过用户界面)单击或切换到包含项目的其他文件夹时,也会发生此事件,因为Outlook会自动选择该文件夹中的第一个项目。

因此,基本上,您可以在Outlook中选中(进入视图)项目时将其包装。 您可能还会发现“ 为Outlook 2010开发检查器包装”一文有用。

作为一种解决方法,您可以保留一个EntryID列表,该列表可通过使用Namespace类的GetItemFromID方法来检索原始项目。

我也注意到下面的代码行:

 foreach (OutlookNS.MailItem item in folder.Items)//No items here

Items集合可能包含不同类型的Outlook项目。 您需要检查MessageClass属性或仅检查项目类型(VBA):

 For Each Item In olFolder.Items
   If TypeOf Item Is Outlook.MailItem Then 
     Dim oMail As Outlook.MailItem: Set oMail = Item
     Debug.Print oMail.SenderEmailAddress
   End If
 Next

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM