Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / TIdSMTP в UDF для Firebird / 22 сообщений из 22, страница 1 из 1
31.01.2019, 14:17
    #39767605
harisma
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TIdSMTP в UDF для Firebird
Такая проблема. Написал в 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
31.01.2019, 14:19
    #39767607
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TIdSMTP в UDF для Firebird
harismaКто что подскажет?

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

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

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

Исходники библиотеки - у тебя. Падает она у тебя. Соответственно и отлаживать - тоже тебе.
Или ты думаешь, что у кого-то есть такие большие хрустальные шары, что в них можно
разглядеть какую именно ошибку ты допустил в 17-й строке?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
31.01.2019, 17:08
    #39767726
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TIdSMTP в UDF для Firebird
harismaпомочь да подсказатьПиши информацию о письмах в табличку. Табличку разгребай внешним сервисом (обычная программа, которая может быть как на самом хосте, так и на любом другом).
...
Рейтинг: 0 / 0
31.01.2019, 17:17
    #39767736
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TIdSMTP в UDF для Firebird
автор но есть одна, которая по моей задумке должна отправлять мейлы.
проктостоматологи аплодируют стоя
...
Рейтинг: 0 / 0
31.01.2019, 21:39
    #39767829
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TIdSMTP в UDF для Firebird
harismaКак критиковать и насмехаться над задачей - так каждый первый, а как помочь да подсказать - так никого нет. Печально :(
Выдохни. Тебе уже правильно сказали - ты бы код дал посмотреть, без него по такой ошибке мы ничего внятно тебе не скажем. Хочешь слать письма через UDF - да ради бога, мало ли что тебе нужно.
...
Рейтинг: 0 / 0
01.02.2019, 10:24
    #39767947
harisma
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TIdSMTP в UDF для Firebird
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
01.02.2019, 10:34
    #39767955
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TIdSMTP в UDF для Firebird
harisma,

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

т.е. ты считаешь что LMsg грохать за собой не надо?
Надо, просто я, копируя и чистя код, чтоб вставить сюда на форум, случайно эту строку удалил, но ваш ответ не по теме. Креш возникает в строке smtp.Connect, а она раньше, чем место, где я разрушаю объекты.
...
Рейтинг: 0 / 0
01.02.2019, 11:04
    #39767981
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TIdSMTP в UDF для Firebird
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
01.02.2019, 11:05
    #39767983
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TIdSMTP в UDF для Firebird
harismaAHost: PAnsiChar; APort: longint)

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

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

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

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

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

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


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