powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / TIdSMTP в UDF для Firebird
22 сообщений из 22, страница 1 из 1
TIdSMTP в UDF для Firebird
    #39767605
harisma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая проблема. Написал в Delphi 10.2.3 Tokio библиотечку с набором UDF для Firebird. Через хост-приложение (с кнопками, вызывающими эти UDF) оттестировал - все работает. функции импортировал в Firebird. Обычные простые функции вызываются и работают "на ура", но есть одна, которая по моей задумке должна отправлять мейлы. Написал ее с использованием компонент из пакета Indy. Создаю их динамически (те, какие нужны). Она также успешно вызывается из Firebird. И вот тут проблема: при вызове метода Connect у экземпляра TIdSMTP возникает исключение "Access violation at address 00000000045AC115 in module 'FirebirdUDFs.DLL'. Read of address FFFFFFFFFFFFFFFF".
И не могу понять почему, ведь под хост-приложением работает.
Кто что подскажет? Чего не хватает этой библиотеке?
Заранее благодарю за ответы.
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39767607
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
harismaКто что подскажет?

Подсказываю: используй отладчик, Люк.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39767614
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
31.01.2019 14:17, harisma пишет:
> ...UDF для Firebird.
> есть одна, которая по моей задумке должна отправлять мейлы...

УПЕЙ СЕПЯ АП СТЕНУ!!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39767654
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эту бы энергию, да в мирное русло. Это в каком страшном сне должна привидиться отсылка почты из УДФ. особенно весело будет запускать сервер на линуксе с подобной УДФ.
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39767702
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, на триггер навесил
Апдейт 100500 строк
Почтовый сервер в шоке.
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39767718
harisma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSeryНаверное, на триггер навесил
Апдейт 100500 строк
Почтовый сервер в шоке.
Ну, во первых, никто ничего никуда еще не навешивал, только тестировал возможность в принципе что-то подобное реализовать.
Мимопроходящий УПЕЙ СЕПЯ АП СТЕНУ!!
Очень смешно и не остроумно....
Ivan_Pisarevsky Это в каком страшном сне должна привидиться отсылка почты из УДФ
А что тут такого странного и страшного? Между прочим, существуют такие коммерческие библиотеки, которые реализуют данный функционал. Но мне хотелось таковое самому реализовать.
Как критиковать и насмехаться над задачей - так каждый первый, а как помочь да подсказать - так никого нет. Печально :(
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39767722
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
31.01.2019 16:56, harisma пишет:
> А что тут такого странного и страшного? Между прочим, существуют такие коммерческие библиотеки, которые реализуют данный функционал. Но мне хотелось таковое самому реализовать.
> Как критиковать и насмехаться над задачей - так каждый первый, а как помочь да подсказать - так никого нет. Печально :(

НЕ НАДО ТАК ДЕЛАТЬ
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39767725
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
harismaКак критиковать и насмехаться над задачей - так каждый первый, а как помочь да подсказать
- так никого нет.

Исходники библиотеки - у тебя. Падает она у тебя. Соответственно и отлаживать - тоже тебе.
Или ты думаешь, что у кого-то есть такие большие хрустальные шары, что в них можно
разглядеть какую именно ошибку ты допустил в 17-й строке?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39767726
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
harismaпомочь да подсказатьПиши информацию о письмах в табличку. Табличку разгребай внешним сервисом (обычная программа, которая может быть как на самом хосте, так и на любом другом).
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39767736
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор но есть одна, которая по моей задумке должна отправлять мейлы.
проктостоматологи аплодируют стоя
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39767829
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
harismaКак критиковать и насмехаться над задачей - так каждый первый, а как помочь да подсказать - так никого нет. Печально :(
Выдохни. Тебе уже правильно сказали - ты бы код дал посмотреть, без него по такой ошибке мы ничего внятно тебе не скажем. Хочешь слать письма через UDF - да ради бога, мало ли что тебе нужно.
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39767947
harisma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GallemarharismaКак критиковать и насмехаться над задачей - так каждый первый, а как помочь да подсказать - так никого нет. Печально :(
Выдохни. Тебе уже правильно сказали - ты бы код дал посмотреть, без него по такой ошибке мы ничего внятно тебе не скажем. Хочешь слать письма через UDF - да ради бога, мало ли что тебе нужно.
Вот это уже более адекватный ответ.
Код дать - то без проблем. Странно то, что через апликацию работает, а когда вызываю из IBExpert - крешит. Причем может быть как Access violation, так и Socket Error Connection timeout
Код: pascal
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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
function  SendEmail(AFromEMail: PAnsiChar; AToEmail: PAnsiChar; ALogin: PAnsiChar; APassword: PAnsiChar; AHost: PAnsiChar; APort: longint): longint; cdecl; export;
var
  smtp: TIdSmtp;
  LMsg: TIdMessage;
  LText: TidText;
  K: TextFile;
begin
  try
    AssignFile(K, 'C:\Temp\DebugUDF.txt');
    Rewrite(K);

    smtp := TIdSmtp.Create(nil);
    Writeln(K, 'SMTP created');
    try
      LMsg := TIdMessage.Create(nil);
      Writeln(K, 'IDMessage created');
      try
        smtp.Host := AHost;
        smtp.Port := APort;
        smtp.Username := ALogin;
        smtp.Password := APassword;
        LMsg.CharSet := 'ISO-8859-2';
        LMsg.ContentType := 'multipart/mixed';
        LMsg.ContentTransferEncoding := 'quoted-printable';
        LMsg.Encoding := meMIME;
        LMsg.UseNowForDate := True;
        LMsg.Organization := 'Grupa';

        LMsg.Subject := wintoiso('Test');

        LMsg.From.Address := wintoiso(Afromemail);
        LMsg.from.Name := wintoiso(ALogin);

        LMsg.Recipients.Add;
        LMsg.Recipients[0].Name := WinToISO(AToEmail);
        LMsg.Recipients[0].Address := AToEmail;
        LMsg.GenerateHeader;
        Writeln(K, 'Message initialized');

        LText := tidtext.create(LMsg.MessageParts, nil);
        LText.CharSet := 'WINDOWS-1250';
        LText.ContentType := 'text/plain';

        LText.Body.Text := 'Test';
        Writeln(K, 'IDText initialized');
        Writeln(K, 'SMTP.host: ' + smtp.host);
        Writeln(K, 'SMTP.UserName: ' + smtp.username);
        Writeln(K, 'SMTP.Password: ' + smtp.Password);
        Writeln(K, 'Message initialized');
        smtp.Connect;
        Writeln(K, 'Connected');
        smtp.Send(LMsg);
        Writeln(K, 'Sended');
        smtp.Disconnect;
        Writeln(K, 'Disconnected');
        result := 0;
      finally
        freeandnil(smtp);
      end;
    except
      on E: exception do
      begin
        Writeln(K, e.Message);
        result := 1;
      end;
    end;
  finally
    CloseFile(K);
  end;
end;
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39767955
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
harisma,

т.е. ты считаешь что LMsg грохать за собой не надо?
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39767960
harisma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисharisma,

т.е. ты считаешь что LMsg грохать за собой не надо?
Надо, просто я, копируя и чистя код, чтоб вставить сюда на форум, случайно эту строку удалил, но ваш ответ не по теме. Креш возникает в строке smtp.Connect, а она раньше, чем место, где я разрушаю объекты.
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39767981
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
harisma,

по теме

1. надо проверять готова ли ваша библиотека к многопоточному доступу. Судя по всему нет.
2. любое исключение не должно выходить за пределы вашей UDF (это не UDR где оно может быть обработано и преобразовано к ошибке Firebird)
3. Показать сюда как ваша UDF объявлена в Firebird
4. Перечитать http://www.ibase.ru/udf_ok/ и http://www.ibphoenix.com/files/Writing-External-Functions.pdf
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39767983
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
harismaAHost: PAnsiChar; APort: longint)

тут ошибка
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39768176
harisma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисharismaAHost: PAnsiChar; APort: longint)

тут ошибка
Ок. Спасибо. Да, согласен. Тут ошибка, а именно,
Код: pascal
1.
 АPort: longint 

должен быть объявлен как
Код: pascal
1.
 var АPort: longint 

. Тогда внутри функции порт имеет нужное значение и ошобка таймаута не возникает.
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39768210
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
harismaошобка таймаута не возникаетОшибка тут в подходе. Скармливать письма надо исходя из лимитов почтаря. Превысил лимит, получил ошибку, толком не обработал и сервер ФБ упал. Нафиг вообще эта костыльная схема с УДФ? Как из УДФ не превысить кол-во писем в час кол-во в сутки?
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39768216
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикольно, а что, действительно, в UDF нельзя передавать целые по значению?
Или аффтар просто не до конца идентифицировал грабли?))
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39768233
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

ну ты документацию по написанию UDF читал?
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39768241
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

И не пытался даже.)) Но я же не спорю, вы так, на пальчиках, кратко.))
Зато я реализовывал то, что он творит ввиде внешнего, с многочисленными параметрами,
настраиваемого под разные почтовые клиенты, с иконкой в трее, руководством пользователя
и т.д. и т.п., внешнего сервиса. Который, как правильно советовали, исполнял соотв. задания
из специальной таблички в БД.))
...
Рейтинг: 0 / 0
TIdSMTP в UDF для Firebird
    #39768357
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FПрикольно, а что, действительно, в UDF нельзя передавать целые по значению?
Что-то мне кажется что если не указано BY DESCRIPTOR именно по значению они и передаются
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / TIdSMTP в UDF для Firebird
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]