在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();
}
}
答案 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对象的版本将公开DistributionListOneOffMembers
和http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/80541102
集合以及Members
方法。