是否可以使用Mailkit和Exchange的默认网络凭据?

时间:2016-06-30 03:20:17

标签: c# exchange-server mailkit

我想使用MailKit通过我们的Exchange服务器发送电子邮件,使用该流程的凭据。

使用域名/用户名/密码构建NetworkCredential

using (var client = new SmtpClient(ProtocolLogger))
{
    client.Connect(server, port);

    // Works
    var creds = new NetworkCredential(username, password, domain);
    client.Authenticate(creds);

    client.Send(msg);        
}

如果我作为同一用户运行时使用CredentialCache.DefaultNetworkCredentials,则 <{1}}

MailKit.Security.AuthenticationException

using (var client = new SmtpClient(ProtocolLogger)) { client.Connect(server, port); // Authentication failure client.Authenticate(CredentialCache.DefaultNetworkCredentials); client.Send(msg); } 输出以下内容(邮件服务器和base64编码的字符串已更改):

ProtocolLogger

值得注意的是,Connected to smtp://mymailserver:25/?starttls=when-available S: 220 mymailserver Microsoft ESMTP MAIL Service ready at Thu, 30 Jun 2016 12:45:04 +0930 C: EHLO [172.1.1.2] S: 250-mymailserver Hello [172.1.1.2] S: 250-SIZE 51200000 S: 250-PIPELINING S: 250-DSN S: 250-ENHANCEDSTATUSCODES S: 250-STARTTLS S: 250-X-ANONYMOUSTLS S: 250-AUTH NTLM LOGIN S: 250-X-EXPS GSSAPI NTLM S: 250-8BITMIME S: 250-BINARYMIME S: 250-CHUNKING S: 250-XEXCH50 S: 250 XRDST C: STARTTLS S: 220 2.0.0 SMTP server ready C: EHLO [172.1.1.2] S: 250-mymailserver Hello [172.1.1.2] S: 250-SIZE 51200000 S: 250-PIPELINING S: 250-DSN S: 250-ENHANCEDSTATUSCODES S: 250-AUTH NTLM LOGIN S: 250-X-EXPS GSSAPI NTLM S: 250-8BITMIME S: 250-BINARYMIME S: 250-CHUNKING S: 250-XEXCH50 S: 250 XRDST C: AUTH NTLM {EncodedStringRemoved} S: 334 {EncodedStringRemoved} C: {EncodedStringRemoved} S: 535 5.7.3 Authentication unsuccessful C: AUTH LOGIN S: 334 {EncodedStringRemoved} C: S: 334 {EncodedStringRemoved} C: S: 334 {EncodedStringRemoved} C: QUIT S: 334 {EncodedStringRemoved} 在将System.Net.Mail.SmtpClient属性设置为true时使用DefaultNetworkCredentials,这对我有用。我想使用MailKit,因为它有一些额外的功能,比如ProtocolLogging。

1 个答案:

答案 0 :(得分:4)

你不能使用MailKit CredentialCache.DefaultNetworkCredentials因为当MailKit要求凭证提供它需要发送到服务器的用户名和密码字符串时,DefaultNetworkCredentials告诉MailKit用户名和密码字符串是空的所以MailKit尝试使用空字符串进行身份验证。

System.Net.Mail似乎能够使用内部API来获取MailKit无权访问的真实字符串。