Mailkit认证失败

3

我的问题:

同样的代码在一个实例中可以正常工作,但在另一个实例中无法使用相同的用户名/密码进行身份验证。

我的代码:

static NetworkCredential _emailLoginCredentials;
_emailLoginCredentials = new NetworkCredential(_accountName, _accountPassword, _accountDomain);

using (var client = new ImapClient(new ProtocolLogger("C://Temp//Logs//imap1.log")))
{
    var credentials = _emailLoginCredentials;
    var uri = new Uri(_emailServer);
    string serverReply = String.Empty;

    client.Timeout = _imapClientTimeOut;
    client.Connect(uri);
    client.AuthenticationMechanisms.Remove("XOAUTH2");
    client.Authenticate(credentials);
    client.Inbox.Open(FolderAccess.ReadWrite);
}

错误:

Connected to imap://mail.company.com:143/?starttls=when-available
S: * OK The Microsoft Exchange IMAP4 service is ready.
C: A00000000 CAPABILITY
S: * CAPABILITY IMAP4 IMAP4rev1 AUTH=NTLM AUTH=GSSAPI AUTH=PLAIN UIDPLUS CHILDREN IDLE NAMESPACE LITERAL+
S: A00000000 OK CAPABILITY completed.
C: A00000001 AUTHENTICATE PLAIN
S: +
C: ZljbAY3hDYXJhdHNkZXYAQ2FyYXRzMTIz
S: A00000001 NO AUTHENTICATE failed.
C: A00000002 LOGIN username Password
S: A00000002 NO LOGIN failed.

来自工作项目的日志(相同的代码):

Connected to imap://mail.company.com:143/?starttls=when-available
S: * OK The Microsoft Exchange IMAP4 service is ready.
C: A00000000 CAPABILITY
S: * CAPABILITY IMAP4 IMAP4rev1 AUTH=NTLM AUTH=GSSAPI AUTH=PLAIN UIDPLUS CHILDREN IDLE NAMESPACE LITERAL+
S: A00000000 OK CAPABILITY completed.
C: A00000001 AUTHENTICATE PLAIN
S: +
C: AN4FyYXRzZGV2AENhcmF0czEyMw==
S: A00000001 OK AUTHENTICATE completed.

为了排除故障,我甚至在两个项目中都硬编码了用户名和密码。然而,结果仍然是一样的 - 一个能用,另一个不能用。
嗯,项目设置等方面存在一些差异。例如,在不工作的项目中,我正在使用Mutex中的上述身份验证代码。此外,整个方法是 protected override async Task Process(TaskMessage message) 发现这篇文章,但它是由NTLM引起的,与我的情况无关。 Mailkit Authenticate to Imap fails

你的日志中不同的那一行表明你没有传递相同的凭据。在不工作的情况下,似乎有一些额外的字符前缀。也许你没有指定相同的域名? - Mike Zboray
@mikez 我再次仔细检查了一遍,两者使用的域名、用户名和密码完全相同。 - xzk
1个回答

3

普通认证包含两到三个字符串:“我希望以x的身份登录,我实际上是y,我的密码是z”。常见的情况有x=y和未指定x。极少情况下,y是一个超级特权管理员用户,可以以其他用户的身份登录。

在您的工作案例中,x为空,y为xCaratsdev。在错误案例中,x为gicnt。您的密码在这两种情况下相同(它在base64 blob中)。您的下一个任务是找出gicnt来自哪里。但首先,请更改密码。


谢谢,我知道它的来源。这是我的领域,在我的工作案例中也有说明。但在从不起作用的案例中将其移除后,现在它可以工作了。 - xzk
1
值得一提的是,MailKit 2.0.5开始使用Domain字符串作为authzid(也称为@arnt解释中的“x”),因为有用户要求添加此功能,而我并不认为有人实际上在使用Domain字符串。您应该考虑使用Domain字符串的唯一SASL机制是NTLM,其他所有机制都应忽略它。 - jstedfast

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接