Outlook - 如何访问自动完成地址列表

时间:2017-07-11 13:12:16

标签: c# outlook outlook-addin

我希望能够访问在电子邮件中输入TO,CC或BCC行时出现的自动完成地址列表。我希望能够提取此数据的方式与我访问Outlook中的其他地址列表的方式类似。

是否有人能够确认这是否可行,如果是这样我将如何去做。

目前,我正在提取各种其他地址列表的电子邮件地址。

foreach (Outlook.AddressEntry item in addressList.AddressEntries)
    {
        using (item.ComDisposable())
           {
               switch (item.AddressEntryUserType)
                   {
                       case Outlook.OlAddressEntryUserType.olExchangeUserAddressEntry:
                       case Outlook.OlAddressEntryUserType.olExchangeRemoteUserAddressEntry:
                           var exUser = item.GetExchangeUser();
                           Debug.WriteLine(exUser.PrimarySmtpAddress, "_GetOutlookContacts");
                           yield return new EGContact(exUser.Name, exUser.PrimarySmtpAddress, item.ID);
                           break;

                       case Outlook.OlAddressEntryUserType.olOutlookContactAddressEntry:
                            var contact = item.GetContact();
                            yield return new EGContact(contact.FullName, contact.Email1Address, item.ID);
                            break;

                       case Outlook.OlAddressEntryUserType.olExchangeDistributionListAddressEntry:
                       break;

                       default:
                       break;

                  }
          }
    }

2 个答案:

答案 0 :(得分:1)

自动完成流存储为隐藏(关联)消息,消息类别为" IPM.Configuration.Autocomplete"在收件箱文件夹中。您可以在OutlookSpy中查看数据:转到收件箱文件夹,单击OutlookSpy功能区上的IMAPIFolder按钮,转到"关联内容"选项卡,使用PR_MESSAGE_CLASS ==" IPM.Configuration.Autocomplete"找到一条消息,选择PR_ROAMING_BINARYSTREAM属性以查看其内容。

您可以使用Outlook对象模型(MAPIFolder.GetStorage("IPM.Configuration.Autocomplete", OlStorageIdentifierType.olIdentifyByMessageClass)打开该邮件,使用PropertyAccessor.GetProperty读取该属性,然后解析它。请注意,无法使用PropertyAccessor打开大型自动完成流。

如果使用Redemption选项,则会将自动填充功能公开为RDONicknames集合:

 set Session = CreateObject("Redemption.RDOSession")
 Session.MAPIOBJECT = Application.Session.MAPIOBJECT
 set Nicknames = Session.GetNicknames
 for each NickName in NickNames
     Debug.Print NickName.Name & " - " & NickName.SmtpAddress
 next

答案 1 :(得分:0)

在早期版本的Outlook中,此信息存储在本地.NK2文件中。在Outlook 2010及更高版本中,此信息存储在您的邮箱中(自动完成流)。有关详细信息,请参阅Clearing AutoComplete and other Recipient Caches

您可以使用Recipients集合(请参阅MailItem类的相应属性)来访问输入到“收件人”,“抄送”或“密件抄送”字段的数据。