![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не отправляется почта из сервиса [D6, Win2k]
Tomkat © (2006-01-17 10:42:00)Hi, ALL! Есть проблема - на событие таймера в системной СЛУЖБЕ повешено две процедуры - архивация файлов и отправке по почте. Архивация проходит на ура, а отправка нет , хотя из ПРИЛОЖЕНИЯ с формой и таймером все ОК !
с чего так ? такое впечатление, что в процедуру отправки почты просто не входят ... компоненты все теже Indy.
код
procedure TService.Timer(Sender: TObject);
begin
ZipSprv; //работает
SendMail; //не работает
end;
procedure TService.SendMail;
begin
////////
Message1.Clear;
Message1.From.Address:='user1@work.com';
Message1.From.Name:='User1';
Message1.Subject:='Tema ';
Message1.BccList.EMailAddresses:='user2@work.com';
Message1.Body.Append('Body');
TIdAttachment.Create(Message1.MessageParts,'sprv.zip');
SMTP2.Connect;
SMTP2.Send(Message1);
SMTP2.Disconnect;
end;
Slym (2006-01-17 16:50:00) [1]Tomkat (17.01.06 11:12) [2]
Я отлаживаю так:
1. Ставлю OnStart Sleep(5000);
2. Стандартно запускаю сервис.
3. в делльфи Run>Attach to process>Show system process> выбираю экзешник...
это надо успеть сделать за 5 сек
Reindeer Moss Eater (2006-01-17 16:37:00) [2]Скорее всего проблема связана с тем, что текущий каталог процесса сервиса не совпадает с папкой в которой лежит сам сервис.
То есть к примеру такой код может обломаться, так как использует относительный путь.
TIdAttachment.Create(Message1.MessageParts,'sprv.zip');
Slym (2006-01-17 16:23:00) [3]Дарагой... какой в сервисе таймер?
делай так:
1. на ServiceStart Создаем доп поток
2. В нем Event:TEvent;
3. в потоке
while not Terminated do
begin
ZipSprv;
SendMail;
Event.WaitFor(переодичность работы)
end;
4. На Stop
Thread.Terminate;
Event.PulseEvent;
Tomkat (2006-01-17 16:01:00) [4]
> На всякий случай - переключи сервис в интерактивный режим,
> есть одно предположение
давно переключен
он дажде маяк на входе в процедуру не показывает
procedure TService.SendMail;
begin
ShowMessage('In Mail');
Message1.Clear;
Message1.From.Address
......
Rouse_ (2006-01-17 11:36:00) [5]На всякий случай - переключи сервис в интерактивный режим, есть одно предположение :)
Digitman (2006-01-17 11:17:00) [6]
> проблемка в том , что сервисы не отлаживаются
Глупости.
Замечательно отлаживаются они, средствами все того же встроенного отладчика. Есть, конечно, некие "тонкости" в связи с этим, но все они понимаемы и вовсе не сложны .. Инф-ция по встроенной отладке сервисов имеется в теме "Debugging service applications" в станд.стравке Делфи.
> в приложении работает все на ура
Да мало ли что там еще "работает") .. Севисы все-таки имеют некие отличия по отношению к обычным приложениям .. На то и отладчик, чтобы утвердиться в понимании этих отличий ..
Tomkat (2006-01-17 11:12:00) [7]еще проблемка в том , что сервисы не отлаживаются .... во всяком случае у меня :-(
а на счет ошибки в теле TService.SendMail - в приложении работает все на ура . Странно это .
Digitman (2006-01-17 11:06:00) [8]
> такое впечатление, что в процедуру отправки почты просто
> не входят
Такого не может быть.
И отладчикподтвердит это. На то он, отладчик, и существует.
Наиболее вероятным м.б. факт возникновения искл.ситуации при исполнении некоего вызова в теле метода TService.SendMail.