Я должен проверить имя пользователя, и пароль начался SmtpClient
экземпляр прежде, чем отправить почту. Использование этого кода:
SmtpClient client = new SmtpClient(host);
client.Credentials = new NetworkCredential(username,password);
client.UseDefaultCredentials = false;
// Here I need to verify the credentials(i.e. username and password)
client.Send(mail);
Как я могу проверить, разрешают ли пользователю, идентифицированному учетными данными, соединить и отправить почту?
Нет пути.
SmtpClient обычно не может проверить пароль имени пользователя, не связавшись с сервером, к которому он подключается.
Что вы можете сделать, так это сделать это вне SmtpClient, открыв TCP-соединение с сервером ... но аутентификация МОЖЕТ быть сложной в зависимости от того, как настроен сервер.
Могу я спросить, ПОЧЕМУ вам это нужно знать перед отправкой? нормальным поведением IMHO было бы обернуть отправку соответствующей обработкой ошибок, чтобы поймать здесь исключения.
После проверки, отправка почты невозможна с классом клиента SMTP в .net 2.0.
Попытка проверить вручную, открыв порт, ничем не хуже написания собственного SMTP-клиента, это сложно.
.Net SmtpClient
не позволяет вам входить без отправка сообщения.
Вы можете проверить учетные данные, отправив тестовое сообщение на некоторый существующий адрес, который игнорирует входящую электронную почту, и проверив, получаете ли вы исключение.
Обратите внимание, что эти тестовые письма появятся в папке отправленных вашего аккаунта, если таковая имеется (например, Gmail)
Я согласен с предыдущими ответами, что SmtpClient не может проверить без отправки.
Но, возможно, вашу проблему все равно удастся решить: если имя пользователя или пароль неверны, client.Send (mail);
выдаст исключение. Вы можете построить цикл while и блок try-catch вокруг отправки, перехватить исключение и запросить у пользователя правильное имя пользователя и пароль, а затем повторить попытку. Если пользователь нажимает кнопку «Отмена» в диалоговом окне или если отправка завершается успешно, вы выходите из цикла while.