Вытащить письмо из глобального списка адресов (не имя)

В настоящее время я пытаюсь извлечь электронные письма из списка рассылки из моего глобального списка адресов. У меня это частично функционирует прямо сейчас, под частичной я имею в виду, что в настоящее время я могу успешно получить имя списка рассылки, но не адрес электронной почты. Это то, что я до сих пор:

    public class DistributionListDetails
    {
        public string DistributionListId { get; set; }
        public string DistributionListEmail { get; set; }
    }

    public List<DistributionListDetails> DistributionListInformtion { get; set; }


    [WebMethod]
    public static List<DistributionListDetails> GetDistributionLists()
    {
        List<DistributionListDetails> distributionLists = new List<DistributionListDetails>();

        //create Outlook application. 
        Outlook.Application oApp = new Outlook.Application();

        //get Mapi NameSpace and Logon. 
        Outlook.NameSpace oNS = oApp.GetNamespace("mapi");

        //get Global Address List. 
        Outlook.AddressLists oDLs = oNS.AddressLists;
        Outlook.AddressList oGal = oDLs["Global Address List"];

        //get a specific distribution list. 
        string sDL = "TestDL";
        Outlook.AddressEntries oEntries = oGal.AddressEntries;
        Outlook.AddressEntry oDL = oEntries[sDL];

        if (oDL.Manager != null)
        distributionLists.Add(new DistributionListDetails
            {
                DistributionListId = oDL.Name,
                DistributionListEmail = oDL.Manager.ToString()
            });

        //get all of the members of the distribution list. 
        oEntries = oDL.Members;
        Outlook.AddressEntry oEntry = default(Outlook.AddressEntry);

        //adding distribution lists to list
        distributionLists.AddRange(oGal.AddressEntries.Cast<Outlook.AddressEntry>().Select(
            x => new DistributionListDetails
                 {
                     DistributionListId = x.Name,
                     DistributionListEmail = x.Name
                 }).Take(400));

        //log off. 
        oNS.Logoff();

        //clean up. 
        oApp = null;
        oNS = null;
        oDLs = null;
        oGal = null;
        oEntries = null;
        oEntry = null; 

        return distributionLists;
}

Я в основном использую Interop Outlook сервис (которым я не в восторге), чтобы открыть Outlook и получить имя списков рассылки из глобального списка адресов. То, что я думал, что смогу сделать, чтобы получить адрес электронной почты DL, будет примерно таким в моем запросе LINQ:

DistributionListID = x.Email

Или что-то в этом роде, но это не дает мне никакой возможности. Мой конечный продукт - я хотел бы отправить списки рассылки по электронной почте из веб-приложения (поэтому мне нужен адрес электронной почты). Я думал, что смогу просто строго использовать имя, так как я использую Interop, и оно будет достаточно умным, чтобы отправить его по электронной почте, но я ошибся.

В настоящее время я бросаю это:

My Distribution List

Но он ожидает этого (это работает, я проверял это в отладке):

My Distribution List <MyDistributionListEmail@mycompany.com>

Итак, после всего этого, есть ли у кого-нибудь совет о том, как я могу получить адреса электронной почты DL?

1 ответ

Решение

Использование AddressEntry.Address, Если вы хотите SMTP-сумматоры, используйте AddressEntry.GetExchangeUser().PrimarySmtpAddress,

Не используйте LINQ с объектами OOM, используйте старый добрый цикл for.

Другие вопросы по тегам