我的.NET 4.6.1 / MVC 5应用程序需要一个服务器端任务,它会定期检查特定O365电子邮件地址以查找新电子邮件,并在找到时检索它们。这似乎是一个非常简单的任务,但我找不到文档任何地方来创建服务器端进程来完成此任务。 Microsoft似乎唯一的文档是OAuth2,并在用户登录时通过凭据。我不想这样做。我想查看一个特定的帐户,就是这样。我该如何做到这一点?
这些是我发现的页面。还有其他人,但都是这样的。
答案 0 :(得分:1)
Outlook API简介 - 我没有看到使用v2端点的服务帐户的方法。
v2端点目前不支持客户端凭据(请参阅limitation)。您需要使用Azure门户注册/配置应用程序,并使用原始端点对应用程序进行身份验证。有关注册应用程序的更多详细信息,请参阅here。我们需要“读取所有邮箱中的邮件”以使用客户端凭据来阅读如下图所示的邮件。
以下是使用客户端凭据使用Microsoft Graph读取消息的代码:
string clientId = "";
string clientsecret = "";
string tenant = "";
string resourceURL = "https://graph.microsoft.com";
string authority = "https://login.microsoftonline.com/" + tenant + "/oauth2/token";
string userMail = "";
var accessToken = new TokenHelper(authority).AcquireTokenAsync(clientId, clientsecret, resourceURL);
var graphserviceClient = new GraphServiceClient(
new DelegateAuthenticationProvider(
(requestMessage) =>
{
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
return Task.FromResult(0);
}));
var items = await graphserviceClient.Users[user].Messages.Request().OrderBy("receivedDateTime desc").GetAsync();
foreach (var item in items)
{
Console.WriteLine(item.Subject);
}
class TokenHelper
{
AuthenticationContext authContext;
public TokenHelper(string authUri)
{
authContext = new AuthenticationContext(authUri);
}
public string AcquireTokenAsync(string clientId, string secret,string resrouceURL)
{
var credential = new ClientCredential(clientId: clientId, clientSecret: secret);
var result = authContext.AcquireTokenAsync(resrouceURL, credential).Result;
return result.AccessToken;
}
}
此外,如果我们使用代码授权流程对应用程序进行身份验证,我们还可以创建一个订阅,在邮箱收到新邮件时通知应用程序。(请参阅webhoocks/subscription)