用于向Office 365帐户查询新电子邮件的服务器端任务

时间:2016-06-14 19:13:24

标签: c# outlook office365

我的.NET 4.6.1 / MVC 5应用程序需要一个服务器端任务,它会定期检查特定O365电子邮件地址以查找新电子邮件,并在找到时检索它们。这似乎是一个非常简单的任务,但我找不到文档任何地方来创建服务器端进程来完成此任务。 Microsoft似乎唯一的文档是OAuth2,并在用户登录时通过凭据。我不想这样做。我想查看一个特定的帐户,就是这样。我该如何做到这一点?

这些是我发现的页面。还有其他人,但都是这样的。

1 个答案:

答案 0 :(得分:1)

  
    

Outlook API简介 - 我没有看到使用v2端点的服务帐户的方法。

  

v2端点目前不支持客户端凭据(请参阅limitation)。您需要使用Azure门户注册/配置应用程序,并使用原始端点对应用程序进行身份验证。有关注册应用程序的更多详细信息,请参阅here。我们需要“读取所有邮箱中的邮件”以使用客户端凭据来阅读如下图所示的邮件。 enter image description 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