С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
 Аватар для Серж762
1813 / 884 / 223
Регистрация: 10.02.2018
Сообщений: 3,682

SMTP и коды ошибок

13.05.2024, 11:40. Показов 3721. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день !!!

Есть программка которая автоматически, через SMTP (компонент Indy) отправляет письмо, есть ли возможность выводить код ошибки (например 501, 502 и тд) вместо текстового сообщения ???

C++
1
2
3
4
5
6
7
8
9
10
try
  {
    IdSMTP1->Connect();
    IdSMTP1->Send(IdMessage1);
    MessageDlg("Письмо отправлено", mtConfirmation, TMsgDlgButtons() << mbOK, 0);
  }
 catch(EIdException &e)
  {
   MessageDlg("Ошибка:" + e.Message + "Письмо не отправлено", mtError, TMsgDlgButtons() << mbOK, 0);
  }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.05.2024, 11:40
Ответы с готовыми решениями:

коды ошибок и предупреждений
Здравствуйте! Хотелось бы узнать есть ли какие нибудь базы данных с кодами ошибок и их комментариями кроме msdn? Не хочется изобретать...

Коды ошибок, для операций
Добрый вечер!Есть несложный класс,в котором перегружены операции +,-,*,/. Мне необходимо сделать какой-нибудь код ошибки операции. То...

Коды ошибок аэрогриль POLARIS pag 1205d, У кого есть коды ошибок на аэрогриль POLARIS
аэрогриль POLARIS pag 1205d ошибка e1 че значит?

16
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
13.05.2024, 11:52
Доброго...
У самого EIdException , вроде нет такой возможности (я могу быть не прав, но не нашел в .h файле).

Но если заменить EIdException на уровень ниже, до EIdSocketError, там есть.....
0
 Аватар для Серж762
1813 / 884 / 223
Регистрация: 10.02.2018
Сообщений: 3,682
13.05.2024, 12:00  [ТС]
Цитата Сообщение от Dinkin Посмотреть сообщение
Но если заменить EIdException на уровень ниже, до EIdSocketError, там есть.....
Поменял в коде, но получил следующее


что не соответствует коду при ошибке
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
13.05.2024, 12:08
Серж762,
А как вы обработку сделали, можно код?...то просто там не Message надо брать, а LastError.
0
 Аватар для Серж762
1813 / 884 / 223
Регистрация: 10.02.2018
Сообщений: 3,682
13.05.2024, 12:47  [ТС]
Цитата Сообщение от Dinkin Посмотреть сообщение
А как вы обработку сделали, можно код?...то просто там не Message надо брать, а LastError.
вот
C++
1
2
3
4
5
6
7
8
9
10
try
  {
    IdSMTP1->Connect();
    IdSMTP1->Send(IdMessage1);
    MessageDlg("Письмо отправлено", mtConfirmation, TMsgDlgButtons() << mbOK, 0);
  }
 catch(EIdSocketError &e)
  {
   MessageDlg("Ошибка:" + e.Message + "Письмо не отправлено", mtError, TMsgDlgButtons() << mbOK, 0);
  }
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
13.05.2024, 12:49
e.LastError ?
0
 Аватар для Серж762
1813 / 884 / 223
Регистрация: 10.02.2018
Сообщений: 3,682
13.05.2024, 12:54  [ТС]
Цитата Сообщение от Dinkin Посмотреть сообщение
e.LastError ?
C++
1
2
3
4
5
6
7
8
9
10
try
  {
    IdSMTP1->Connect();
    IdSMTP1->Send(IdMessage1);
    MessageDlg("Письмо отправлено", mtConfirmation, TMsgDlgButtons() << mbOK, 0);
  }
 catch(EIdSocketError &e)
  {
   ShowMessage("Socket Error ("+ IntToStr(e.LastError) +"): " + e.Message);
  }
изображение ошибки как в посте № 3, то есть мое сообщение просто игнорится
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
13.05.2024, 13:15
Не чего не игнорируется, просто в прошлом посте Вы разместили код без исправлений.
Ну то есть это не помогло...хотя в документации указано что именно этот параметр отвечает за код ошибки.

Как вариант, можете сделать отдельно функцию которая по тексту, может возвращать код ошибки, предварительно в нее вбив результаты.
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,362
Записей в блоге: 3
13.05.2024, 13:19
Серж762, а если Вы запустите проект не из среды, а просто скомпилированный ехе-файл? Что покажет?
0
 Аватар для Серж762
1813 / 884 / 223
Регистрация: 10.02.2018
Сообщений: 3,682
13.05.2024, 13:26  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Серж762, а если Вы запустите проект не из среды, а просто скомпилированный ехе-файл? Что покажет?
то же самое, даже после очистки проекта и новой пересборки !!!

Добавлено через 3 минуты
если напишу вот такой код
C++
1
2
3
4
5
6
7
8
9
10
try
  {
    IdSMTP1->Connect();
    IdSMTP1->Send(IdMessage1);
    MessageDlg("Письмо отправлено", mtConfirmation, TMsgDlgButtons() << mbOK, 0);
  }
 catch(...)
  {
   ShowMessage("Error");
  }
то выводится соответствующее сообщение, только что проверил
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,362
Записей в блоге: 3
13.05.2024, 13:29
Цитата Сообщение от Серж762 Посмотреть сообщение
то выводится соответствующее сообщение
значит это исключение не относится к классу исключений EIdSocketError.
0
 Аватар для Серж762
1813 / 884 / 223
Регистрация: 10.02.2018
Сообщений: 3,682
13.05.2024, 13:45  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
значит это исключение не относится к классу исключений EIdSocketError.
Значит не относится, а как тогда сделать, что бы вместо текста были коды ошибок ???
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,362
Записей в блоге: 3
13.05.2024, 15:25
А черт его знает... Сроду с Indy не работал...
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
13.05.2024, 16:35
Относится, это как раз семейство сетевых исключения от Indy.

А так что возвращает Ваш последний вариант код c (e.LastError), и какая версия Indy?
1
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,013
13.05.2024, 16:36
Серж762, примерный вариант уже указали в посте №8:
Цитата Сообщение от Dinkin Посмотреть сообщение
можете сделать отдельно функцию которая по тексту, может возвращать код ошибки, предварительно в нее вбив результаты.
Набросок:
C++
1
2
3
4
5
  catch (EIdException &E)  // исключение / ошибка
  {
    if (E.Message.Pos("Error connecting with SSL") || E.Message.Pos("Host not found"))
      // выводим соответствующий (какой нам удобно) код 
  }
0
 Аватар для Серж762
1813 / 884 / 223
Регистрация: 10.02.2018
Сообщений: 3,682
13.05.2024, 21:24  [ТС]
Цитата Сообщение от gunslinger Посмотреть сообщение
Набросок:
Спасибо ! завтра попробую Ваш код
0
 Аватар для Серж762
1813 / 884 / 223
Регистрация: 10.02.2018
Сообщений: 3,682
14.05.2024, 11:52  [ТС]
Решил проблему !!!

Для получения кода нужно подключить заголовочный файл
C++
1
<IdReplySMTP.hpp>
и сделать вот так

C++
1
2
3
4
5
6
7
8
9
10
try
  {
    IdSMTP1->Connect();
    IdSMTP1->Send(IdMessage1);
    MessageDlg("Письмо отправлено", mtConfirmation, TMsgDlgButtons() << mbOK, 0);
  }
 catch(EIdSMTPReplyError &E)
  {
   ShowMessage(E.ErrorCode);
  }
В результате получим сообщение с ошибкой 501 !!!

Добавлено через 2 часа 54 минуты

Может кому-то понадобится в дальнейшем (проверка на ошибки SMTP)
C++
1
2
3
4
5
6
7
8
9
10
try
  {
    IdSMTP1->Connect();
    IdSMTP1->Send(IdMessage1);
    MessageDlg("Письмо отправлено", mtConfirmation, TMsgDlgButtons() << mbOK, 0);
  }
 catch(EIdSMTPReplyError &E)
  {
   SMTP_ERRORS(E.ErrorCode);
  }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void __fastcall TForm1::SMTP_ERRORS(int ErrorCode)
{
 UnicodeString *err_code = new UnicodeString;
 *err_code = NULL;
 switch (ErrorCode)
  {
   //Коды SMTP 400
   case 421: {*err_code = "Нужная интерпритация"; break;}
   case 450: {*err_code = "/--------------/"; break;}
   case 451: {*err_code = "/--------------/"; break;}
   case 452: {*err_code = "/--------------/"; break;}
   case 455: {*err_code = "/--------------/"; break;}
 
   //Коды SMTP 500
   case 500: {*err_code = "/--------------/"; break;}
   case 501: {*err_code = "/--------------/"; break;}
   case 502: {*err_code = "/--------------/"; break;}
   case 503: {*err_code = "/--------------/"; break;}
   case 541: {*err_code = "/--------------/"; break;}
   case 550: {*err_code = "/--------------/"; break;}
   case 551: {*err_code = "/--------------/"; break;}
   case 552: {*err_code = "/--------------/"; break;}
   case 553: {*err_code = "/--------------/"; break;}
   case 554: {*err_code = "/--------------/"; break;}
   //Остальное
   default: {*err_code = "/--------------/"; break;}
   }
  MessageDlg("Ошибка: код " + IntToStr(ErrorCode) +"\n" + *err_code, mtError, TMsgDlgButtons() << mbOK, 0);
 delete err_code;
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.05.2024, 11:52
Помогаю со студенческими работами здесь

Коды ошибок, Коды ошибок для пользователей (не для мастеров)
ОшибкаПричинаE10проблемы подачи воды. Проверьте не закрыт ли кран, не забита ли сеточка, достаточно ли давление, не подключен ли сливной...

Коды ошибок Windows
Вам приходилось встречать при работе на компьютере раздражающие всплывающие окна с указанием различных кодов? Расшифровка КОДОВ ОШИБОК...

Коды ошибок в BAss
Всем привет. Кто знает как исправить ошибки Error codes list 0 BASS_OK 1 BASS_ERROR_MEM 2 BASS_ERROR_FILEOPEN 3...

Коды исправления ошибок
Не знаю, в каком разделе можно задать вопрос. Хотелось бы прочитать про коды исправления ошибок (код Хемминга и т. д.) что-нибудь...

Коды ошибок turbodebuger
скачать коды ошибок turbodebuger


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru