Как проверить smtp учетные данные прежде, чем отправить почту?

Я должен проверить имя пользователя, и пароль начался 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);

Как я могу проверить, разрешают ли пользователю, идентифицированному учетными данными, соединить и отправить почту?

7
задан mhu 1 October 2014 в 19:26
поделиться

4 ответа

Нет пути.

SmtpClient обычно не может проверить пароль имени пользователя, не связавшись с сервером, к которому он подключается.

Что вы можете сделать, так это сделать это вне SmtpClient, открыв TCP-соединение с сервером ... но аутентификация МОЖЕТ быть сложной в зависимости от того, как настроен сервер.

Могу я спросить, ПОЧЕМУ вам это нужно знать перед отправкой? нормальным поведением IMHO было бы обернуть отправку соответствующей обработкой ошибок, чтобы поймать здесь исключения.

3
ответ дан 7 December 2019 в 07:43
поделиться

После проверки, отправка почты невозможна с классом клиента SMTP в .net 2.0.

Попытка проверить вручную, открыв порт, ничем не хуже написания собственного SMTP-клиента, это сложно.

1
ответ дан 7 December 2019 в 07:43
поделиться

.Net SmtpClient не позволяет вам входить без отправка сообщения.

Вы можете проверить учетные данные, отправив тестовое сообщение на некоторый существующий адрес, который игнорирует входящую электронную почту, и проверив, получаете ли вы исключение.

Обратите внимание, что эти тестовые письма появятся в папке отправленных вашего аккаунта, если таковая имеется (например, Gmail)

1
ответ дан 7 December 2019 в 07:43
поделиться

Я согласен с предыдущими ответами, что SmtpClient не может проверить без отправки.

Но, возможно, вашу проблему все равно удастся решить: если имя пользователя или пароль неверны, client.Send (mail); выдаст исключение. Вы можете построить цикл while и блок try-catch вокруг отправки, перехватить исключение и запросить у пользователя правильное имя пользователя и пароль, а затем повторить попытку. Если пользователь нажимает кнопку «Отмена» в диалоговом окне или если отправка завершается успешно, вы выходите из цикла while.

0
ответ дан 7 December 2019 в 07:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: