如何在 Outlook 2016 c# 中获取用户联系人列表?
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
方法(除非你使用Redemption - I am its author - which implements RDOFolder2.GetAddressList),所以最好的办法是遍历 Namespace.AddressLists
集合中的所有地址列表,调用 AddressList.GetContactsFolder
。如果您取回有效的 MAPIFolder
对象,请使用 Namespace.CompareEntryIDs
.[=23 将其条目 ID (MAPIFolder.EntryID
) 与默认联系人文件夹 (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;
}
}
如果您将其添加到我在初始 post 中编写的代码中。您将成功在 Outlook 中看到当前帐户的联系人。我希望这能像对我一样对你有所帮助。
我正在尝试显示 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
方法(除非你使用Redemption - I am its author - which implements RDOFolder2.GetAddressList),所以最好的办法是遍历 Namespace.AddressLists
集合中的所有地址列表,调用 AddressList.GetContactsFolder
。如果您取回有效的 MAPIFolder
对象,请使用 Namespace.CompareEntryIDs
.[=23 将其条目 ID (MAPIFolder.EntryID
) 与默认联系人文件夹 (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;
}
}
如果您将其添加到我在初始 post 中编写的代码中。您将成功在 Outlook 中看到当前帐户的联系人。我希望这能像对我一样对你有所帮助。