从DistListItem对象获取Outlook ContactItems

时间:2018-11-02 12:34:49

标签: c# outlook vsto

在Outlook中,可以通过几种方式将收件人添加到通讯组列表中,既可以是简单的名称/地址组合,也可以是Outlook联系人。将ContactItem添加到通讯组列表时,对联系人电子邮件地址的后续更改不会自动反映在列表上-您需要打开列表并手动单击“更新成员”。我想以编程方式执行此操作。但是,DistListItem对象没有公开update()方法,因此需要另一种方法。

为此,我试图从ContactItem的成员(是DistListItem对象)恢复到原始的Recipient。我以为我应该可以使用DistListItem.GetMember(i).AddressEntry.GetContact()之类的东西,但这只会引发异常。知道我做错了什么吗?这是我的代码的一部分(这是VSTO插件的一部分):

Outlook.Explorer currentExplorer = Application.ActiveExplorer();
Outlook.MAPIFolder currentFolder = currentExplorer.CurrentFolder;
foreach (Object item in currentFolder.Items.OfType<Outlook.DistListItem>())
{
   Outlook.DistListItem DistList = (Outlook.DistListItem)item;
   for (int i = 1; i <= DistList.MemberCount; i++)
   {
      Outlook.Recipient recipient = DistList.GetMember(i);

      // this will throw an exception, saying the object can't be found:
      Outlook.ContactItem contact = recipient.AddressEntry.GetContact();
   }
}

1 个答案:

答案 0 :(得分:0)

我在MSDN论坛(https://social.msdn.microsoft.com/Forums/en-US/26ffa714-1213-46cd-953c-53c6e26cb992/get-outlook-contactitems-from-a-distlistitem-object?forum=outlookdev)上对您的问题的答复副本

ilike,apples,oranges,bananas sed: no input files 仅返回一次性地址条目:let products = [GroceryProduct?] 同时存储一次性(名称和地址嵌入到条目ID中)和实际条目ID(指向原始AB对象) 。从理论上讲,您可以读取并解析存储条目ID的DistListItem.GetMember属性-DistListItem(DASL名称PT_MV_BINARY)和DistributionListMembers(DASL名称http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/80551102) MAPI属性-使用OutlookSpy(单击IMessage按钮)查看现有的DL。

如果可以选择使用Redemption,则其RDODistListItem对象的版本将公开DistributionListOneOffMembershttp://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/80541102集合以及Members方法。