如何获取用户的Exchange/Outlook/Office365照片?

4

我们公司使用Office 365。因此,当用户登录我的asp.net mvc网站时,我想显示他们的照片,就像Outlook一样。

Outlook从哪里获取用户的照片?我如何以编程方式访问它?

我已经尝试过访问ActiveDirectory并获取thumbnailPhoto,但大多数用户都是空白的。因此,Outlook必须从其他地方获取它。在哪里以及如何获取?

我还看到一些示例使用Microsoft.Office.Interop.Outlook程序集(假设需要安装Outlook才能运行)。但是,这个网站运行在没有安装Outlook的服务器上。


1
这里有一个来自MSDN的例子,说明如何完成此操作,但我认为照片也是从AD中提取的,但不确定。https://msdn.microsoft.com/en-us/library/office/jj190905(v=exchg.150).aspx - Bearcat9425
1个回答

12

我尝试过访问ActiveDirectory并获取缩略图,但大多数用户的缩略图都是空的。因此Outlook必须从其他地方获取它。在哪里和如何获取?

用户照片在您的AD本地部署中不可用,因为您的用户很可能一开始就没有将其存储在那里,除非您向他们提供了一个应用程序,该应用程序将其写入AD。

用户照片在您的ADAzure中可用,因为您的用户很可能正在Outlook(或在线)中应用自己的照片。

我假设您的本地部署AD是通过DirsyncADConnect工具与Azure AD同步的。如果是,则实际上仅单向同步photothumbnailphoto属性(从本地部署到Azure),而不会写回。有关DirSync的参考在这里,有关ADConnect的参考在这里

这就是为什么您无法从AD中获取它的原因。

如何获取用户的 Exchange/Outlook/Office365 照片?

有很多从Azure AD获取照片的方法:

  1. Exchange Web Services (EWS): 使用 GetUserPhoto 操作,发送带有电子邮件地址和大小的 SOAP 包络。XML 响应将在 PictureData 元素中获取以 base64 编码的照片。

  2. Exchange Web Services (EWS Managed API 和/或 REST API): 基本上通过使用自动发现服务访问 URL https://outlook.office365.com/ews/exchange.asmx,然后通过 Microsoft.Exchange.WebServices.Data 命名空间上的 EWS.Service.ConnectToService 方法连接到服务,需要引用库的参考 (可以从此处下载 DLL)。方法仍然是相同的 GetUserPhoto,图像以二进制形式包含在响应中。

  3. Outlook REST API: 基本上向 Outlook API 发送带有访问令牌的 GET 请求,URL 为 https://outlook.office.com/api/{version}/me/photo,用于获取您自己的照片,并在 URL https://outlook.office.com/api/{version}/users/email@example.com/photo 上获取其他用户的照片。响应将以二进制格式返回照片流。不要忘记添加 $value 以获取 blob,否则您将获取元数据。详情请参阅此处。

  4. Office 365统一API(又称Graph):基本上与旧API几乎相同。发送带有令牌的GET请求到URL https://graph.microsoft.com/{version}/me/photo/ 可以获取您自己的照片,发送到https://graph.microsoft.com/{version}/users/UPN/photo可以获取其他用户的照片。大致相同。 更多详情请参考此处。这里还有一个沙盒供您探索示例和API参考。您也可以在线交互式尝试这里在发送get请求之前不要忘记登录

希望对您有所帮助。

更多参考:这里这里这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接