c# - 如何获取用户的exchange/outlook/office365照片?

标签 c# asp.net outlook exchange-server office365

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

outlook从哪里获取用户的照片?我如何以编程方式实现它?

我尝试访问 ActiveDirectory 并获取缩略图照片,但对于大多数用户来说它是空白的。因此,Outlook 必须在其他地方获取它。在哪里以及如何?

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

最佳答案

I've tried hitting up the ActiveDirectory and fetching the thumbnailPhoto, but it's blank for most users. Thus Outlook must be getting it elsewhere. Where and how?

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

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

我假设您的本地 AD 正在通过 DirsyncADConnect 实用程序与 Azure AD 同步。如果是,那么实际上 photothumbnailphoto 属性仅以一种方式同步(从内部部署到 Azure)并且不会写回。引用 here for DirSynchere for ADConnect .

这就是为什么您无法从广告中删除它的原因。

How to get user's exchange/outlook/office365 photo?

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

  1. Exchange Web 服务 (EWS):使用 GetUserPhoto手术。基本上是发送一个带有电子邮件地址和大小的 SOAP 信封。 XML 响应将为您提供 PictureData 中包含的 base64 编码照片元素

  2. Exchange Web 服务(EWS Managed API 和/或 REST API):基本上使用自动发现服务到 URL https://outlook.office365.com/ews/exchange.asmx,然后通过 Microsoft.Exchange.WebServices.Data 命名空间上的 EWS.Service.ConnectToService 方法进行连接,您需要为其引用库(您可以 download from here 的 DLL)。方法保持不变 GetUserPhoto,图像以二进制形式包含在响应中。

  3. Outlook REST API:基本上是在 URL 处向 Outlook API(使用不记名访问 token )发送一个GET 请求https://outlook.office.com/api/{version}/me/photo 为你自己的,在 URL https://outlook.office.com/api/{版本}/users/email@example.com/photo。您将获得二进制格式的照片流作为响应。不要忘记附加 $value 以获取 blob,否则您将获得元数据。 More details referenced here.

  4. Office 365 统一 API(又名图形):基本上与旧 API 几乎相同。向 URL https://graph.microsoft.com/{version}/me/photo/ 发送一个 GET 请求(带有不记名 token )以获取您自己的照片和 https://graph.microsoft.com/{version}/users/UPN/photo 另一个用户。或多或少相同。 More details referenced here .还有a sandbox here供您浏览示例和 API 引用。也可以自己尝试一下online interactively here (不要忘记在触发您的获取请求之前登录)

希望对您有所帮助。

更多引用资料:here , herehere .

关于c# - 如何获取用户的exchange/outlook/office365照片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34069979/

相关文章:

c# - 如何在 openfiledialog 中检查文件类型

javascript - 折线图生成的图像将通过电子邮件发送

c# - 为什么Covariance和Contravariance这样命名?

java - 无法打开带有附件的 Outlook

vba - Outlook VBA - 每半小时运行一次代码

c# - ApiExplorer 无法识别自定义类型的路由属性

.net - .NET 中的全局导入/使用别名

javascript - 单击按钮可更改动态生成的焦点文本框中的文本

c# - 如何将浏览器重定向到 ASP.NET 中的本地文件?

wpf - 在 Outlook 中显示 WPF 窗口时的奇怪行为