Как я могу аутентифицироваться по имени пользователя и пройти в MailKit?

#mailkit #mimekit

Вопрос:

Я использую Mailkit для отправки писем в моем asp.net основное приложение 3.1. Я могу подключиться и пройти аутентификацию с помощью своей учетной записи Google. Но когда я перешел на использование своей бизнес-учетной записи, я не могу пройти аутентификацию с помощью опции starttls со следующим кодом:

 client.CheckCertificateRevocation = false;  client.Connect( Host,25, SecureSocketOptions.StartTls);  client.Authenticate(new NetworkCredential(Username, Password));  

Результат: «535: 5.7.3 Аутентификация не удалась». Однако я могу подключиться с помощью .net smtpclient, используя этот код:

 var smtpclient= new System.Net.Mail.SmtpClient();  ServicePointManager.ServerCertificateValidationCallback =ValidateServerCertificate  smtpclient.Host = Host;  smtpclient.Port = 25;  smtpclient.EnableSsl = true;  var cred= new System.Net.NetworkCredential();  cred.UserName =Username;  cred.Password = Password;  smtpclient.Credentials = cred;  smtpclient.DeliveryMethod = SmtpDeliveryMethod.Network;  smtpclient.Send(message);  
  • Если я удалил доменное имя из своего имени пользователя, я могу пройти аутентификацию, но не в режиме starttls.
  • Я могу подключиться анонимно, используя starttls.

Итак, как я могу решить эту проблему? Это образец моего журнала:

 Connected to smtp://ip:25/?starttls=always S: 220 xxxxxxx Microsoft ESMTP MAIL Service ready at dt  C: EHLO [ip]  S: 250-xxxx Hello [ip]  S: 250-SIZE 104857600  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 XRDST  

Комментарии:

1. Отредактируйте свой вопрос. Покажите код, который вы используете, удалите код, который вы не используете. Покажите сообщение об ошибке. Предоставьте подробную информацию о том, к чему вы подключаетесь (O365, Exchange и т.д.). В вашем вопросе упоминается Google. Авторизация Google отличается от авторизации Microsoft. Часть Google не имеет никакого отношения к делу.

2. код в моем посте-это код, который я использую . Я не могу аутентифицироваться с использованием учетных данных, однако я могу анонимно аутентифицироваться. Я не знаю, не поддерживает ли эта проблема с Mailkit или smtp-сервером аутентификацию? и почему .net smtpclient аутентифицируется с использованием учетных данных?

Ответ №1:

Известно, что реализация аутентификации NTLM в MailKit 2.x (включая 2.15) работает неправильно не во всех условиях.

Вы можете попробовать сделать это, чтобы убедиться, что MailKit не использует NTLM:

 client.AuthenticationMechanisms.Remove ("NTLM"); client.Authenticate (username, password);  

Или вы можете активно использовать определенный механизм аутентификации, подобный этому:

 client.Authenticate (new SaslMechanismLogin (username, password));  

Если это не сработает, вероятно, это связано с тем, что либо ваше имя пользователя/пароль неверны, либо сервер просто настроен на отказ от аутентификации при входе.

В предстоящем выпуске MailKit v3.0 есть рабочая реализация NTLM, которая afaict работает во всех случаях.