加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 07:55:34 所属栏目:百科 来源:网络整理
导读:我想使用MailKit通过我们的Exchange服务器发送电子邮件,使用该进程的凭据. 使用域/用户名/密码构建NetworkCredential: using (var client = new SmtpClient(ProtocolLogger)){ client.Connect(server,port); // Works var creds = new NetworkCredential(us
我想使用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,则会因MailKit.Security.AuthenticationException而失败:

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

    // Authentication failure
    client.Authenticate(CredentialCache.DefaultNetworkCredentials);

    client.Send(msg);        
}

ProtocolLogger输出如下(邮件服务器和base64编码的字符串已更改):

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在将UseDefaultCredentials属性设置为true时使用DefaultNetworkCredentials,这对我有用.我想使用MailKit,因为ProtocolLogging等额外的功能.

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读