#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 работает во всех случаях.