Можно ли использовать сетевые учетные данные по умолчанию с 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 не имеет доступа.