问题描述
||
我有VSTO加载项,可从mailitem获取收件人并将其保存在我们的用户列表中。
如果是交换分发列表或作为联系人的交换联系人,则可以通过从这两个地址中提取smtp邮件地址来正常工作。为此,Outlook对象模型起作用。
但是,当将Exchange通讯组列表添加为Outlook通讯组列表中的成员并将邮件发送到此本地通讯组列表时,就会出现问题。有什么方法可以从此嵌套通讯组列表中提取每个联系人的smtp地址。
到目前为止,我有用户DistListItem.GetMember(i)方法来获取此通讯组列表的成员。它提供了一个收件人对象,当我尝试从该对象访问属性member.AddressEntry.AddressEntryUserType时,它将引发异常“找不到该项目”。
有谁知道我如何从该接收者对象中获得通讯组列表成员类型或entryId?
解决方法
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);
}
}
}
}