C# Outlook导出通讯组列表+;包含在C中的项目#

C# Outlook导出通讯组列表+;包含在C中的项目#,c#,outlook,export,C#,Outlook,Export,我正在创建一个代码,从Outlook导出联系人+通讯组列表,并将其存储在BDD中 我可以使用以下代码导出联系人: mapiFolder.Items.Restrict([MessageClass] = \"IPM.Contact\); 完成后,我会对通讯组列表执行相同的操作 mapiFolder.Items.Restrict("[MessageClass] = \"IPM.DistList\""); 我正在解析我的通讯组列表,并在图书馆赎回的帮助下以以下方式存储它们: foreach (Dis

我正在创建一个代码,从Outlook导出联系人+通讯组列表,并将其存储在BDD中

我可以使用以下代码导出联系人:

mapiFolder.Items.Restrict([MessageClass] = \"IPM.Contact\);
完成后,我会对通讯组列表执行相同的操作

mapiFolder.Items.Restrict("[MessageClass] = \"IPM.DistList\"");
我正在解析我的通讯组列表,并在图书馆赎回的帮助下以以下方式存储它们:

foreach (DistListItem distributionListItem in distributionListItems)
                {
                    //use of Redemption to avoid a security message when accessing to contacts list
                    var safeList = new SafeDistList();

                    safeList.Item = distributionListItem;

                    var safeDistListExtended = new SafeDistListExtended(safeList, distributionListItem.DLName);
一旦我“阅读”了所有的通讯组列表,就可以将它们插入BDD了

第一件事:检查每个通讯组列表中包含的内容,我的意思是,联系人或/和通讯组列表,它们本身可以包含其他联系人或/和通讯组列表等等

var recipients = new List<SafeRecipient>();

        for (int counterMember = 1; counterMember <= pSafeDistListExtended.DistList.MemberCount; counterMember++)
        {
            SafeRecipient safeRecipient = pSafeDistListExtended.DistList.GetMember(counterMember);

            safeRecipient.Resolve();

            if (safeRecipient.Resolved)
            {
                recipients.Add(safeRecipient);                                
            }
        }
GetMember(x)

还远远不够理想,因为我们可以期望对象层次结构。包含ContactItems+/或分发列表等的分发列表


感谢您的帮助。

首先,您可能希望切换到RDO对象系列,而不是使用OOM+Safe*项对象: 其次,RDODistListItem.GetMembers将返回RDOAddressEntries。对于该集合中的每个RDOAddressEntry对象,递归处理每个对象-分发列表将依次通过RDOAddressEntry.members集合公开其成员

Member.Count