我有一个Outlook Interop程序,它列出了Outlook中的文件夹。它适用于本地PST文件。当我尝试访问Folder接口的Class成员时,Outlook会为某些Exchange服务器文件夹抛出COMException错误。到目前为止,我收到了这些错误代码:0xE304011D和0x8834011D。消息是
Microsoft Exchange不可用。存在网络问题或Exchange服务器已关闭以进行修复。
public void ListFolders(UltraTree Ctrl, Outlook.Folder parent, UltraTreeNode ParentNode)
{
UltraTreeNode node;
Outlook.OlObjectClass classID;
Outlook.OlItemType type;
string name;
foreach(Outlook.Folder f in parent.Folders) {
try {
name = f.Name;
classID = f.Class;
type = f.DefaultItemType;
if(classID == Outlook.OlObjectClass.olFolder && type == Outlook.OlItemType.olMailItem) {
node = ParentNode.Nodes.Add("", f.Name);
node.Override.NodeAppearance.Image = 0;
if(f.Folders.Count > 0)
ListFolders(Ctrl, f, node);
}
} catch(COMException e) {
switch(e.ErrorCode) {
case unchecked((int)0xE304011D):
case unchecked((int)0x8834011D):
break;
default:
throw;
}
}
}
}
例外情况发生在classID = f.Class;
有没有人知道这些例外情况?我搜索了网络,但我找不到任何关于它们的讨论。用户说他在Outlook中访问Exchange没有问题。不幸的是,用户在另一个国家,所以我只能使用他告诉我的内容。
答案 0 :(得分:0)
听起来好像你打开了太多的文件夹。不要递归处理所有文件夹,您必须运行RPC通道。
仅处理当前展开的节点。对于每个子文件夹,请检查PR_SUBFOLDERS属性(DASL名称http://schemas.microsoft.com/mapi/proptag/0x360A000B)。如果是,则添加虚拟节点以确保显示“+”按钮。展开子文件夹时,添加其子文件夹。
您可能还希望查看使用MAPI表:Outlook对象模型仅提供对文件夹内容MAPI表(MAPIFolder.GetTable)的访问。文件夹层次结构表可以从扩展MAPI(C ++或Delphi,IMAPIFolder :: GetHierarchyTable)或Redemption(任何语言 - RDOFolder对象访问,您可以使用RDOFolder.Folders.MAPITable。{{3} })