我目前正试图从我的全球地址列表中提取电子邮件的分发列表。我现在部分运作,部分我的意思是我目前能够成功地提取分发名单的名称,但不是电子邮件。这就是我到目前为止所做的:
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
或者那种性质的东西,但它并没有给我任何类型的选择。我的最终产品是我想通过电子邮件发送Web应用程序的分发列表(因此我需要电子邮件地址)。我以为我能够严格使用这个名称,因为我使用的是Interop,它很聪明,可以通过电子邮件发送,但我错了。
目前我正在抛弃它:
My Distribution List
但它期待这个(这确实有效,我在调试中测试了它):
My Distribution List <MyDistributionListEmail@mycompany.com>
所有这些之后,是否有人就如何提取DL的电子邮件地址提出任何建议?
答案 0 :(得分:2)
使用AddressEntry.Address
。如果您想要SMTP加法器,请使用AddressEntry.GetExchangeUser().PrimarySmtpAddress
。
不要将LINQ与OOM对象一起使用,使用好的旧的&#34;用于&#34;循环。