[英]How can you get user contact list in Outlook 2016 c#?
我正在尝试显示一个Outlook帐户的联系人列表。 (Outlook 2016)以下代码显示全局联系人列表,但不显示您自己的个人联系人列表。 如何显示帐户地址列表? 这是我到目前为止的代码:
try
{
Outlook._Application application = new Outlook.Application();
Outlook.AddressList addrList = null;
foreach (Outlook.AddressList oAL in application.Session.AddressLists)
{
Outlook.MAPIFolder folder = oAL.GetContactsFolder();
}
Outlook.SelectNamesDialog dlg = application.Session.GetSelectNamesDialog();
dlg.InitialAddressList = addrList;
dlg.ShowOnlyInitialAddressList = true;
dlg.NumberOfRecipientSelectors = Outlook.OlRecipientSelectors.olShowTo;
dlg.Display();
if (dlg.Recipients.Count > 0)
{
foreach (Outlook.Recipient recip in dlg.Recipients)
{
Outlook.PropertyAccessor pa = recip.PropertyAccessor;
string smtpAddress = pa.GetProperty(PR_SMTP_ADDRESS).ToString();
AddrTextBox.Text += smtpAddress;
AddrTextBox.Text += "; ";
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
因此,问题在于您找不到正确的AddressList对象来分配给SelectNamesDialog.InitialAddressList
属性?
您可以使用AddressList.GetContactsFolder
从AddressList对象转到MAPIFolder对象,但是不幸的是,没有对应的MAPIFolder.GetAddressLIst(除非您使用实现RDOFolder2 .GetAddressList的Redemption ),所以最好的办法是遍历所有地址列表在Namespace.AddressLists
集合中,调用AddressList.GetContactsFolder
。 如果返回有效的MAPIFolder
对象,则使用Namespace.CompareEntryIDs
将其条目ID( MAPIFolder.EntryID
)与默认Contacts文件夹( Namespace.GetDefaultFolder(olFolderContacts)
)的条目ID进行比较。
之后,深入研究和测试。 我找到了自己问题的答案。 如果要显示特定帐户的联系人列表,只需在第一个foreach语句中添加一个if语句:
foreach (Outlook.AddressList oAL in m_AddInModule.OutlookApp.Session.AddressLists)
{
Outlook.MAPIFolder folder = oAL.GetContactsFolder();
if (folder.AddressBookName == m_AddInModule.ContactsFolder.AddressBookName)
{
addrList = oAL;
break;
}
}
如果您将其添加到我在第一篇文章中编写的代码中。 您将可以在Outlook中看到当前帐户的联系人。 希望对我有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.