Можно ли использовать сетевые учетные данные по умолчанию с Mailkit и Exchange?

Я хотел бы использовать 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 использует DefaultNetworkCredentials при установке UseDefaultCredentials свойство в true, и это работает для меня. Я хочу использовать MailKit из-за дополнительных функций, таких как Протоколлогирование.

1 ответов


вы не можете ue CredentialCache.DefaultNetworkCredentials с MailKit потому что, когда MailKit запрашивает учетные данные для предоставления строк имени пользователя и пароля, которые он должен отправить на сервер, DefaultNetworkCredentials сообщает MailKit, что строки имени пользователя и пароля пусты, и поэтому MailKit пытается аутентифицироваться с пустыми строками.

Система.Сеть.Почта, похоже, может использовать внутренний API для получения реальных строк, к которым MailKit не имеет доступа.