.Net Core C# IMAP 与 Outlook 集成

问题描述 投票:0回答:1

我有一个要求,我需要自动化客户的 Outlook 收件箱,我需要阅读电子邮件并处理它。客户属于不同的公司,他有不同的 Outlook/Office 365 订阅。

我正在使用 C# 经历 IAMP OAuth2 流程。它谈到添加 Azure 应用程序注册、权限等。

我的问题是,由于我的客户没有使用 Azure,并且如果我在我的 azure 实例中配置所有应用程序注册/权限,我可以使用我的 Azure 应用程序使用 IMAP OAuth2 流访问他的电子邮件收件箱,还是客户必须从他的一端执行某些操作?

问候

马杜

c# azure .net-core azure-active-directory imap
1个回答
0
投票

我同意 @Max,可以通过在 Azure 中配置多租户应用程序来访问其他租户的 Outlook 电子邮件收件箱,但您的客户必须明确同意授予您的应用程序访问其数据的权限。

  • 当您在 Azure AD 中将应用程序注册为 多租户 时,这意味着其他 Azure AD 租户的用户(而不仅仅是您的用户)可以访问该应用程序。
  • 您的 应用程序注册 应在 Azure AD 租户(而不是客户端)中配置为 多租户,以便您的客户端可以对您的应用程序进行身份验证并授予权限。
  • 并授予 API 访问用户 Outlook 邮箱的权限,即
    IMAP.AccessAsUser.All
    l 或
    Mail.Read

当您的客户尝试使用该应用程序时,他们将通过 Azure AD 进行身份验证。在此过程中,系统将提示他们同意您的应用程序请求的权限。

您可以使用 Office 365 Exchange Online API 权限或 Microsoft Graph API 权限,如下所示:

enter image description here

并检索消息:

var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "common";
var clientId = "ClientID";

var options = new InteractiveBrowserCredentialOptions
{
    TenantId = tenantId,
    ClientId = clientId,
    AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
    RedirectUri = new Uri("http://localhost"),
};

var interactiveCredential = new InteractiveBrowserCredential(options);

var graphClient = new GraphServiceClient(interactiveCredential, scopes);

try
{
    var messages = await graphClient.Users["UserID"].Messages.GetAsync(); ;
    foreach (var message in messages.Value)
    {
        Console.WriteLine($"Subject: {message.Subject}");
    }
}

catch (ODataError odataError)
{
    Console.WriteLine(odataError.Error.Code);
    Console.WriteLine(odataError.Error.Message);
}

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.