我正在尝试解决SharePoint提供程序托管的ASP.NET MVC应用程序中的以下任务:来自Exchange Online
对于第一部分,MSFT建议使用Exchange PowerShell-Commands,这不是一个理想的解决方案,而是使用具有完整凭据的服务帐户。
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session
$sharedMailboxes = Get-Mailbox | where {$_.recipientTypeDetails -eq 'sharedmailbox' }
$mailboxPermissions = Get-Mailbox | where {$_.recipientTypeDetails -eq 'sharedmailbox' } | Get-MailboxPermission
对于第二部分,我按照本教程https://dev.outlook.com/restapi/tutorial/dotnet创建了一个MVC应用程序,通过Outlook REST API访问Exchange Online,并且运行良好,从他的邮箱中获取已登录用户的电子邮件。 当我尝试访问共享邮箱时,用户具有 FullAccess 权限,以便我收到访问被拒绝的异常。
对此的REST请求是
GET https://outlook.office.com/api/beta/users/shared@mydomain.com/messages
包裹的C#-Request是
OutlookServicesClient client = new OutlookServicesClient(new Uri("https://outlook.office.com/api/v2.0"), GetAccessToken);
client.Context.SendingRequest2 += new EventHandler<Microsoft.OData.Client.SendingRequest2EventArgs>((sender, e) => InsertXAnchorMailboxHeader(sender, e, userEmail));
var mailResults = await client.Users["shared@mydomain.com"].Messages.ExecuteAsync();
对于 userEmail 我已经尝试了邮箱的电子邮件以及我/当前用户的电子邮件。
与图谱API相同。
GET https://graph.microsoft.com/beta/users/shared@mydomain.com/messages
到目前为止,我理解在API(!)的当前状态下访问共享邮箱我需要一个app令牌。这可以通过构建服务应用程序来完成,如https://blogs.msdn.microsoft.com/exchangedev/2015/01/21/building-daemon-or-service-apps-with-office-365-mail-calendar-and-contacts-apis-oauth2-client-credential-flow/
中所述我目前的流程是: 1.通过SharePoint CSOM从SharePoint App获取当前用户的电子邮件 2.对于此用户,获取他可以通过PowerShell访问的邮箱列表(是的,缓存...,可能稍后) 3.使用服务应用程序枚举这些邮箱中的未读电子邮件。
在我看来,这就像一堆乱七八糟的API,我有一个愿望:
有人可以(!)建议构建MVC应用程序的正确方法,该应用程序查找用户有权访问的所有邮箱并获取未读邮件
我知道大约一年半前曾提出过一个非常类似的问题(Accessing all user's mailbox via Office 365 REST API),但自那时起API已发生变化,正如(What is the purpose of the new "Read user and shared mail" delegated scope in Azure AD portal for Office 365 Exchange Online)所示。
再见 本