提问人:MrCalvin 提问时间:11/16/2023 更新时间:11/17/2023 访问量:20
使用 mailkit 从 Exchange Online 检索邮件并作为应用程序进行身份验证
Retrieving mails from Exchange online using mailkit and authenticate as appl
问:
我正在尝试使用 MailKit 连接到 Exchange Online。
我作为应用程序进行身份验证(使用 appl.id 和 secret)。
我已经有检索令牌的代码(使用图形 API)I already have the code to retrieve the token (using Graph API)
但是如何使用令牌对 MailKit imapClient 进行身份验证呢?
如果我想对 HttpClient 进行身份验证,请使用:
_HttpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", AccessToken);
如果我想使用基本身份验证对 MailKit imapClient 进行身份验证,似乎我可以这样做:
using (var imapClient = new ImapClient())
{
imapClient.Connect("outlook.office365.com", 993, SecureSocketOptions.SslOnConnect);
imapClient.Authenticate("username", "password");
...
}
答:
0赞
mainframe007
11/17/2023
#1
我最近为这种情况设置了一个应用程序。以下是我使用 appId、Client Secret 和 TenantId 连接到 Exchange 服务的代码。我还需要添加您需要使用 Microsoft Exchange Web 服务来访问 Microsoft Graph API(应用程序 ID 和客户端密码在云中添加的位置),因为据我所知,MailKit 不支持它。需要从 NuGet 添加 Microsoft.Exchange.WebServices dll。
//Set up auth data
var cca = ConfidentialClientApplicationBuilder
.Create("<ApplicationId>")
.WithClientSecret("<ClientSecret>")
.WithTenantId("<TenantId>")
.Build();
var ewsScopes = new string[] { "https://outlook.office365.com/.default" };
ExchangeService _ewsClient;
//Aquire Auth token
Task<AuthenticationResult> tsk = cca.AcquireTokenForClient(ewsScopes).ExecuteAsync();
tsk.Wait();
AuthenticationResult authResult = tsk.Result;
//Configure the ExchangeService with the access token.
_ewsClient = new ExchangeService();
_ewsClient.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
_ewsClient.Credentials = new OAuthCredentials(authResult.AccessToken);
_ewsClient.ImpersonatedUserId =
new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "<EmailAddressOfAccount>");
//Include x-anchormailbox header
_ewsClient.HttpHeaders.Add("X-AnchorMailbox", "<EmailAddressOfAccount>");
评论
0赞
MrCalvin
11/17/2023
但是如何将此令牌与 ImapClient 一起使用呢?生成令牌没有问题。
评论