![](/img/trans.png)
[英]How to retrieve emails directly from Outlook 2010 inbox for multiple users, for a VSTO Outlook add-in
[英]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
对象。 您还可以拥有MeetingItem
, ReportItem
等。
无需将所有项目包装在文件夹中。 相反,您可以处理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.