我在开发一个控制台应用程序,必须登录Outlook365电子邮件帐户,然后获取电子邮件中的附件。
我现在有我在ExchangeOAuth2上找到的代码。
当我到了令牌必须取回的部分时,它打开了一个网站,我必须选择一个帐户才能继续。
我怎样才能防止这种情况。没有用户交互。
我的代码:
string? host = Configuration.GetSection("email").GetValue<string>("host");
int? port = Configuration.GetSection("email").GetValue<int>("port");
string? clientId = Configuration.GetSection("email").GetValue<string>("clientId");
string? tenantId = Configuration.GetSection("email").GetValue<string>("tenantId");
if (string.IsNullOrEmpty(host) || port == null || string.IsNullOrEmpty(clientId) ||
string.IsNullOrEmpty(tenantId))
{
return;
}
var options = new PublicClientApplicationOptions
{
ClientId = clientId,
TenantId = tenantId,
RedirectUri = "http://localhost"
};
var publicClientApplication = PublicClientApplicationBuilder
.CreateWithApplicationOptions(options)
.Build();
var scopes = new string[] {
"email",
"offline_access",
"https://outlook.office.com/IMAP.AccessAsUser.All" // Only needed for IMAP
};
var authToken = await
publicClientApplication.AcquireTokenInteractive(scopes).ExecuteAsync();
var oauth2 = new SaslMechanismOAuth2(authToken.Account.Username,
authToken.AccessToken);
[更新]我已经更改了我的代码以使用microsoft graph。我使用了this tutorial
但这仍然是要求我去一个网站en填写代码。
这正是我不想看到的。没有用户交互,控制台必须自己运行。
为什么这么难?
有人能举个例子来说明如何做到这一点吗?
1条答案
按热度按时间brgchamk1#
我想通了,在邮件账户的Azure环境中,必须设置一些API权限。