正在从全局地址列表中提取电子邮件(不是姓名)

本文关键字:电子邮件 提取 全局 地址 列表 | 更新日期: 2023-09-27 18:27:06

我当前正试图从我的全局地址列表中提取电子邮件的通讯组列表。我现在有部分功能,我的部分意思是,我目前能够成功提取通讯组列表的名称,但不能提取电子邮件。这就是我目前所拥有的:

    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并从全局地址列表中检索通讯组列表的名称。我想我能做的是在我的LINQ查询中获得DL电子邮件地址:

DistributionListID = x.Email

或者是那种性质的东西,但它没有给我任何类型的选择。我的最终产品是,我想通过电子邮件从网络应用程序发送通讯组列表(因此我需要电子邮件地址)。我以为我可以严格使用这个名字,因为我正在使用Interop,发电子邮件也足够聪明,但我错了。

目前我扔它这个:

My Distribution List

但它期待着这样(这确实有效,我已经在调试中测试过了):

My Distribution List <MyDistributionListEmail@mycompany.com>

那么,在所有这些之后,有人对我如何提取DL的电子邮件地址有什么建议吗?

正在从全局地址列表中提取电子邮件(不是姓名)

使用AddressEntry.Address。如果需要SMTP加法器,请使用AddressEntry.GetExchangeUser().PrimarySmtpAddress

不要将LINQ与OOM对象一起使用,使用一个好的旧"for"循环。