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 => неправильный порт и т. д
- откройте успешную попытку вертолета и так далее...