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

前端之家收集整理的这篇文章主要介绍了c# – 是否可以使用Mailkit和Exchange的默认网络凭据?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想使用MailKit通过我们的Exchange服务器发送电子邮件,使用该进程的凭据.

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

  1. using (var client = new SmtpClient(ProtocolLogger))
  2. {
  3. client.Connect(server,port);
  4.  
  5. // Works
  6. var creds = new NetworkCredential(username,password,domain);
  7. client.Authenticate(creds);
  8.  
  9. client.Send(msg);
  10. }

如果我在以同一用户身份运行时使用CredentialCache.DefaultNetworkCredentials,则会因MailKit.Security.AuthenticationException而失败:

  1. using (var client = new SmtpClient(ProtocolLogger))
  2. {
  3. client.Connect(server,port);
  4.  
  5. // Authentication failure
  6. client.Authenticate(CredentialCache.DefaultNetworkCredentials);
  7.  
  8. client.Send(msg);
  9. }

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

  1. Connected to smtp://mymailserver:25/?starttls=when-available
  2. S: 220 mymailserver Microsoft ESMTP MAIL Service ready at Thu,30 Jun 2016 12:45:04 +0930
  3. C: EHLO [172.1.1.2]
  4. S: 250-mymailserver Hello [172.1.1.2]
  5. S: 250-SIZE 51200000
  6. S: 250-PIPELINING
  7. S: 250-DSN
  8. S: 250-ENHANCEDSTATUSCODES
  9. S: 250-STARTTLS
  10. S: 250-X-ANONYMOUSTLS
  11. S: 250-AUTH NTLM LOGIN
  12. S: 250-X-EXPS GSSAPI NTLM
  13. S: 250-8BITMIME
  14. S: 250-BINARYMIME
  15. S: 250-CHUNKING
  16. S: 250-XEXCH50
  17. S: 250 XRDST
  18. C: STARTTLS
  19. S: 220 2.0.0 SMTP server ready
  20. C: EHLO [172.1.1.2]
  21. S: 250-mymailserver Hello [172.1.1.2]
  22. S: 250-SIZE 51200000
  23. S: 250-PIPELINING
  24. S: 250-DSN
  25. S: 250-ENHANCEDSTATUSCODES
  26. S: 250-AUTH NTLM LOGIN
  27. S: 250-X-EXPS GSSAPI NTLM
  28. S: 250-8BITMIME
  29. S: 250-BINARYMIME
  30. S: 250-CHUNKING
  31. S: 250-XEXCH50
  32. S: 250 XRDST
  33. C: AUTH NTLM {EncodedStringRemoved}
  34. S: 334 {EncodedStringRemoved}
  35. C: {EncodedStringRemoved}
  36. S: 535 5.7.3 Authentication unsuccessful
  37. C: AUTH LOGIN
  38. S: 334 {EncodedStringRemoved}
  39. C:
  40. S: 334 {EncodedStringRemoved}
  41. C:
  42. S: 334 {EncodedStringRemoved}
  43. C: QUIT
  44. S: 334 {EncodedStringRemoved}

值得注意的是,System.Net.Mail.SmtpClient在将UseDefaultCredentials属性设置为true时使用DefaultNetworkCredentials,这对我有用.我想使用MailKit,因为ProtocolLogging等额外的功能.

解决方法

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

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

猜你在找的C#相关文章