如何获取Exchange用户和通讯组列表的主要Smtp地址

时间:2013-02-08 22:37:52

标签: c# outlook vsto exchange-server

我正在尝试from,to和cc字段的电子邮件地址。有时这些是AD电子邮件,SMTP或分发电子邮件。

我发现有人在这里遇到类似的问题,但他们没有任何关于分发列表的信息。

我稍微修改了代码以尝试获取此值。

if (type.ToLower() == "ex")
            {
                recip = Globals.ThisAddIn.Application.GetNamespace("MAPI").CreateRecipient(address);
                if (recip.DisplayType == OlDisplayType.olDistList)
                {
                    sAddress = recip.AddressEntry.GetExchangeDistributionList().PrimarySmtpAddress;
                }
                else
                {
                    sAddress = recip.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
                }
            }
            else
            {
                sAddress = address.Replace("'", "");
            }

问题是recip.DisplayType为空,除非在获取收件人并在该对象上调用DisplayType后出现小延迟。

有更好的方法吗?

我将代码更改为以下内容,但我担心这不适用于所有DisplayTypes,我甚至不确定大多数类型是什么(这里显示选项http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.oldisplaytype%28v=office.14%29.aspx

private static string GetSmtpAddress(AddressEntry addressEntry)
        {
            string address;
            if (addressEntry.Type == "ex")
            {
                if (addressEntry.DisplayType == OlDisplayType.olDistList)
                {
                    address = addressEntry.GetExchangeDistributionList().PrimarySmtpAddress;
                }
                else
                {
                    address = addressEntry.GetExchangeUser().PrimarySmtpAddress;
                }
            }
            else
            {
                address = addressEntry.Address;
            }
            return address;
        }

1 个答案:

答案 0 :(得分:1)

您需要先解析收件人 - 在调用CreateRecipient后,调用Recipient.Resolve。