Nityananda Das Ответов: 2

Как проверить учетные данные SMTP-сервера перед отправкой электронной почты


Я хочу проверить учетные данные SMTP-сервера перед отправкой электронного письма.

Тесты, которые должны быть охвачены:
1. Неверный порт
2. Неправильный SMTP сервер
3. Неверное Имя Пользователя
4. Неверный Пароль.

Примечание: Я не хочу отправлять никаких сообщений электронной почты во время проверки

Заранее спасибо

[no name]

Вы не.

2 Ответов

Рейтинг:
1

Wendelius

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

Поэтому я считаю, что лучший вариант-попытаться отправить почту, а если это не удастся, то изучить полученную ошибку. Это хорошо объяснено в Отправка электронных писем через .NET framework и общие проблемы – использование кода C# [^]

Если вам действительно нужно попытаться проверить (частично) SMTP-сервер, я думаю, что "лучшим" способом было бы связаться с сервером с помощью сокетов и попробовать выполнить операции шаг за шагом. Чтобы понять суть общения, взгляните на Понимание внутренностей почтового протокола SMTP: Часть 1[^]


Afzaal Ahmad Zeeshan

5ed; хорошее решение. Также прочтите мое решение Решение 2 для немного большего объяснения того, почему ничто не будет работать для него в качестве решения, и ему, возможно, придется работать со своим собственным TCP-клиентом, чтобы общаться с этим SMTP-сервером.

Рейтинг:
1

Afzaal Ahmad Zeeshan

Прежде всего прочтите Решение 1 и Статья, на которую ссылается Мика, моя, Отправка электронных писем через .NET framework и общие проблемы – использование кода C# [^] эта статья была написана для того, чтобы охватить некоторые основы отправки электронных писем и некоторые проблемы, которые могут возникнуть при отправке электронной почты.

Теперь то, что происходит в объекте SmtpClient, заключается в том, что вы не получаете никакой ошибки в следующем коде,

using (SmtpClient client = new SmtpClient("smtp.example.com", 25)) { // Default TCP port
  client.EnableSsl = true;
  client.Credentials = new NetworkCredentials("username", "password");
  
  // Even the following lines are executed safely, 
  MailMessage message = new MailMessage {
                           From = "",
                           To = "",
                           Subject = "",
                           Body = ""
                        };
}


Но как только код попадает в эту функцию,

client.Send(message);


В случае какой-либо ошибки программа ломается. Почему? Потому что в этот момент программа взаимодействует с сервером и делится данными. Сервер проверяет аутентификацию и отвечает. В случае возникновения каких-либо проблем программа прерывается. Проблема может быть любой из следующих:

1. Проблемы с именем хоста, сервер не существует в этом URI, проверьте его еще раз.
2. Неправильный номер порта. Вы должны знать, что этот 25-й TCP-порт по умолчанию, он не вызовет проблем, если сервер не откажется отвечать.
3. ошибка в адресе получателя или отправителя. Это также вызывает проблему, если адрес электронной почты неверен. Итак, проверьте это дважды.
4. Проблемы сети. :смех: это должно было быть первым. Глупый я.

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

Очень типичным решением этой проблемы является создание собственного объекта Smtp клиента с помощью TCP клиента (TcpClient[^]) объект. Затем инициируйте запросы к серверу, чтобы определить, готов ли он к взаимодействию (в случае проблем с именем хоста или портом). Также попробуйте запустить некоторые функции для проверки подлинности или нет. Затем отправляйте электронные письма самостоятельно. :-) Долгое, но достойное решение в данном случае, то есть единственный способ пойти для вас, чтобы решить загадку.


Wendelius

Хорошее объяснение, 5. :)

Однако я бы упомянул, что, проводя тестирование поэтапно, один за другим, он может раскрыть больше информации. Рассмотрим следующую логику:
- пропингуйте сервер, нет ответа => неправильный адрес (или пинг отклонен)
- ping успешен, попробуйте открыть SMTP-порт, fail => неправильный порт и т. д
- откройте успешную попытку вертолета и так далее...

Afzaal Ahmad Zeeshan

Спасибо, Мика.

Действительно, а не просто пингует. Он мог бы создать собственный TCP-клиент для подключения к этому серверу. Но это все зависит от него. :)