![](/img/trans.png)
[英]Retrieve Contacts using Microsoft Exchange WebServices from Outlook
[英]Getting contacts from Exchange instead of Outlook
我目前正在开发一个仅在工作中内部使用的应用程序。 我需要获取当前登录用户的联系人以在应用程序中使用,我目前正在获取以下联系人:
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.NameSpace NameSpace = app.GetNamespace("MAPI");
Microsoft.Office.Interop.Outlook.MAPIFolder ContactsFolder = NameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderContacts);
Microsoft.Office.Interop.Outlook.Items ContactItems = ContactsFolder.Items;
foreach (Microsoft.Office.Interop.Outlook.ContactItem item in ContactItems)
{
//do stuff with the contacts here
}
这种方法的问题是,每当用户打开应用程序而 Outlook 尚未打开时,会出现一个 Outlook 弹出窗口,要求用户允许或拒绝应用程序访问 Outlook 联系人。 这是不必要的,我唯一想到的是如何阻止这种形式的发生,而不是使用 Outlook 本身,从 Exchange 服务器获取联系人。
我已经查看了一堆关于 EWS 之类的文档,但是我没有找到保证 EWS 与 Exchange 2019 一起工作的参考资料。我还希望根据当前登录用户的域身份验证自动完成任何身份验证,而不是要求用户输入密码。
我确实尝试使用这个: https://learn.microsoft.com/en-us/exchange/client-developer/exchange-web-services/get-started-with-ews-managed-api-client-applications但是ExchangeVersion
只有 Exchange 2013 的选项。
我应该用什么来实现这一目标? 任何朝着正确方向的推动将不胜感激。
使用active directory
而不是EWS
来获取网络用户数据,包括 email 地址。
相关的命名空间是: System.DirectoryServices
这是我在项目中编写的一个示例,用于通过 AD 中的名字和姓氏获取包括 email 在内的用户数据。
注意: ActiveDirectoryEntity
我们是我的 class。
另外,关于您在问题中写的另一个问题,不需要输入用户名和密码,因为当用户通过 windows 进行身份验证时,身份验证已经完成。
public static List<ActiveDirectoryEntity> GetActiveDirectoryData(string sname, string fname)
{
try
{
DirectorySearcher search = new DirectorySearcher();
search.Filter = String.Format("(&(objectCategory=person)(objectClass=user)(givenname={0}*)(sn={1}*))", sname, fname);
search.PropertiesToLoad.Add("givenName");
search.PropertiesToLoad.Add("sn");
search.PropertiesToLoad.Add("mail");
search.PropertiesToLoad.Add("mobile");
search.PropertiesToLoad.Add("department");
var result = search.FindAll();
List<ActiveDirectoryEntity> resultlist = new List<ActiveDirectoryEntity>();
foreach (SearchResult r in result)
{
if (r.Properties["mail"] != null)
{
if (r.Properties["mail"].Count > 0)
{
ActiveDirectoryEntity ade = new ActiveDirectoryEntity();
if ((r.Properties["givenname"].Count > 0))
ade.FirstName = r.Properties["givenName"][0].ToString();
if ((r.Properties["sn"].Count > 0))
ade.LastName = r.Properties["sn"][0].ToString();
if ((r.Properties["mail"].Count > 0))
ade.Email = r.Properties["mail"][0].ToString();
if ((r.Properties["department"].Count > 0))
ade.Department = r.Properties["department"][0].ToString();
resultlist.Add(ade);
}
}
}
return resultlist;
}
catch
{
return null;
}
}
您收到安全提示是因为您的机器没有最新的防病毒应用程序。
如果您无法控制应用程序运行的环境,您唯一的选择是 Extended MAPI(C++ 或 Delphi)或Redemption (任何语言)。
Keep in mind that Outlook Object Model cannot run in a Windows service (such as as IIS) - you woudl need to switch to EWS, Extended MAPI, or Redemption (use its RDO family of objects).
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.