我有一个要求,我需要自动化客户的 Outlook 收件箱,我需要阅读电子邮件并处理它。客户属于不同的公司,他有不同的 Outlook/Office 365 订阅。
我正在使用 C# 经历 IAMP OAuth2 流程。它谈到添加 Azure 应用程序注册、权限等。
我的问题是,由于我的客户没有使用 Azure,并且如果我在我的 azure 实例中配置所有应用程序注册/权限,我可以使用我的 Azure 应用程序使用 IMAP OAuth2 流访问他的电子邮件收件箱,还是客户必须从他的一端执行某些操作?
问候
马杜
我同意 @Max,可以通过在 Azure 中配置多租户应用程序来访问其他租户的 Outlook 电子邮件收件箱,但您的客户必须明确同意授予您的应用程序访问其数据的权限。
IMAP.AccessAsUser.All
l 或 Mail.Read
。当您的客户尝试使用该应用程序时,他们将通过 Azure AD 进行身份验证。在此过程中,系统将提示他们同意您的应用程序请求的权限。
您可以使用 Office 365 Exchange Online API 权限或 Microsoft Graph API 权限,如下所示:
并检索消息:
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);
}