Mailkit 登录失败

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

我正在开发一个应用程序,旨在为我们的客户移动和分发传入的邮件。

当前版本在没有 OAuth2 的情况下运行,因此我的任务是开发一个在 C# 中与 OAuth2 配合使用的全新版本。

我对 C# 完全陌生(现在已经专业使用它大约 1.5 个月了),并且对 Outlook、Exchange 等的机制一无所知,所以我基本上是在旅途中学习所有内容。

介绍就这么多了 - 我一直在使用 Mailkit 并根据我发现的问题判断,我确实成功获得了访问令牌。

但是当我尝试连接时,下面的方法只会抛出

MailKit.Security.AuthenticationException: "LOGIN failed."

以下是应该获取邮箱中所有邮件的方法(我目前主要是在玩这个,以了解 Mailkit 的所有方法和机制,然后再实际开始最终应用程序并获取所有邮件)邮件似乎是一个足够简单的例子,可以让一切围绕它工作)

作为提示;我的公司使用 Exchange Online,如果这对我需要做的事情有任何影响

static async Task<List<string>> GetEmails(string accessToken)
        {
            var emails = new List<string>();

            using (var client = new ImapClient())
            {
                await client.ConnectAsync("outlook.office365.com", 993, SecureSocketOptions.SslOnConnect);
                await client.AuthenticateAsync("[my mail address]", accessToken);

                MessageBox.Show("Test");

                //var inbox = client.Inbox;
                //inbox.Open(FolderAccess.ReadOnly);
                //var uids = inbox.Search(SearchQuery.All);

                //foreach (var uid in uids)
                //{
                //    var message = inbox.GetMessage(uid);
                //    emails.Add(message.TextBody);
                //}

                await client.DisconnectAsync(true);
            }

            return emails;
        }

如果有人能准确地告诉我出了什么问题,那就太好了,但根据我的研究,这可能是很多问题,而“登录失败”不一定是最能提供信息的异常。因此,我已经很高兴获得一些关于尝试或解决问题的提示或建议列表。

提前致谢!

c# exception outlook imap mailkit
1个回答
0
投票

如果你的OAuth2.0权限等在服务器上设置正确,那么问题就出在下面这行代码:

await client.AuthenticateAsync("[my mail address]", accessToken);

您在上面使用的通用

AuthenticateAsync(string username, string password)
方法不会尝试 OAUTH2.0 - 它只会尝试基于密码的身份验证机制(例如您的情况下的“LOGIN”)。

相反,你需要使用的是:

var oauth2 = new SaslMechanismOAuth2("[my mail address]", accessToken);
await client.AuthenticateAsync(oauth2);

这个

AuthenticateAsync(SaslMechanism)
方法现在将正确使用 XOAUTH2 SASL 机制来使用提供的身份验证令牌进行身份验证,并且应该可以工作(当然假设令牌有效)。

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