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

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

13.05.2024, 11:40. Показов 3737. Ответов 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,150
Записей в блоге: 3
13.05.2024, 11:52
Доброго...
У самого EIdException , вроде нет такой возможности (я могу быть не прав, но не нашел в .h файле).

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


что не соответствует коду при ошибке
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 3
13.05.2024, 12:08
Серж762,
А как вы обработку сделали, можно код?...то просто там не Message надо брать, а LastError.
0
 Аватар для Серж762
1814 / 885 / 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,150
Записей в блоге: 3
13.05.2024, 12:49
e.LastError ?
0
 Аватар для Серж762
1814 / 885 / 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,150
Записей в блоге: 3
13.05.2024, 13:15
Не чего не игнорируется, просто в прошлом посте Вы разместили код без исправлений.
Ну то есть это не помогло...хотя в документации указано что именно этот параметр отвечает за код ошибки.

Как вариант, можете сделать отдельно функцию которая по тексту, может возвращать код ошибки, предварительно в нее вбив результаты.
0
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,389
Записей в блоге: 3
13.05.2024, 13:19
Серж762, а если Вы запустите проект не из среды, а просто скомпилированный ехе-файл? Что покажет?
0
 Аватар для Серж762
1814 / 885 / 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
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,389
Записей в блоге: 3
13.05.2024, 13:29
Цитата Сообщение от Серж762 Посмотреть сообщение
то выводится соответствующее сообщение
значит это исключение не относится к классу исключений EIdSocketError.
0
 Аватар для Серж762
1814 / 885 / 223
Регистрация: 10.02.2018
Сообщений: 3,682
13.05.2024, 13:45  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
значит это исключение не относится к классу исключений EIdSocketError.
Значит не относится, а как тогда сделать, что бы вместо текста были коды ошибок ???
0
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,389
Записей в блоге: 3
13.05.2024, 15:25
А черт его знает... Сроду с Indy не работал...
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,150
Записей в блоге: 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
1814 / 885 / 223
Регистрация: 10.02.2018
Сообщений: 3,682
13.05.2024, 21:24  [ТС]
Цитата Сообщение от gunslinger Посмотреть сообщение
Набросок:
Спасибо ! завтра попробую Ваш код
0
 Аватар для Серж762
1814 / 885 / 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru