1

我有 VSTO 插件,它从邮件项中获取收件人并将其保存在我们的用户列表中。在交换分发列表或交换联系人作为收件人的情况下,它可以通过从这两者中提取 smtp 邮件地址来正常工作。为此,Outlook 对象模型起作用。

但是,当将 Exchange 分发列表添加为 Outlook 分发列表中的成员并将邮件发送到此本地分发列表时,就会出现问题。有没有办法从这个嵌套的通讯组列表中提取每个联系人的 smtp 地址。

到目前为止,我有用户 DistListItem.GetMember(i) 方法来获取此分发列表的成员。它提供了一个 Recipient 对象,当我尝试从此对象访问属性 member.AddressEntry.AddressEntryUserType 时,它​​会引发异常“找不到该项目”。有谁知道我如何从这个收件人对象中获取分发列表成员类型或 entryId?

4

1 回答 1

0
    private void GetDistributionListMembers()
{
    Outlook.SelectNamesDialog snd =
        Application.Session.GetSelectNamesDialog();
    Outlook.AddressLists addrLists =
        Application.Session.AddressLists;
    foreach (Outlook.AddressList addrList in addrLists)
    {
        if (addrList.Name == "All Groups")
        {
            snd.InitialAddressList = addrList;
            break;
        }
    }
    snd.NumberOfRecipientSelectors =
        Outlook.OlRecipientSelectors.olShowTo;
    snd.ToLabel = "D/L";
    snd.ShowOnlyInitialAddressList = true;
    snd.AllowMultipleSelection = false;
    snd.Display();
    if (snd.Recipients.Count > 0)
    {
        Outlook.AddressEntry addrEntry =
            snd.Recipients[1].AddressEntry;
        if (addrEntry.AddressEntryUserType ==
            Outlook.OlAddressEntryUserType.
            olExchangeDistributionListAddressEntry)
        {
            Outlook.ExchangeDistributionList exchDL =
                addrEntry.GetExchangeDistributionList();
            Outlook.AddressEntries addrEntries =
                exchDL.GetExchangeDistributionListMembers();
            if (addrEntries != null)
                foreach (Outlook.AddressEntry exchDLMember
                    in addrEntries)
                {
                    Debug.WriteLine(exchDLMember.Name);
                }
        }
    }
}
于 2017-05-04T10:18:33.610 回答