Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Microsoft Outlook не закрывается [D5]


Juice ©   (2005-06-09 18:20:00) 

Для отправки почтового сообщения через Microsoft Outlook использую следующий код. Сообщение отправляется нормально, но после отправки outlook.exe продолжает висеть в процессах и при попытке отправить следующее письмо программа есс-но зависает.
В чем тут ошибка, я вроде как все правильно делаю ?

try
             OutlookApp := GetActiveOleObject('Outlook.Application');
             OutlookApp.AutoQuit := true;
           except
             try
               OutlookApp := CreateOleObject('Outlook.Application');
             except
               Application.MessageBox('Äëÿ íàëåæíî¿ ðîáîòè ìîäóëÿ ïîòð³áåí Microsoft Outlook! Âñòàíîâ³òü öþ ïðîãðàììó òà ñïðîáóéòå ùå ðàç. ', 'Âèíèêëà ïîìèëêà', MB_YESNO);
               ExitProcess(0);
             end;
           end;
           try
             MailItem := OutlookApp.CreateItem(olMailItem);

             case Self.TraderID of
             5   : s := Self.Mail.toAdress_SAT;
             985 : s := Self.Mail.toAdress_LTD;
             else  s := Self.Mail.toAdress_OTH;
             end;

             while Pos(',', s)0 do
             begin
               MailItem.Recipients.Add(Copy(s, 1, Pos(',', s)-1 ));
               Delete(s, 1, Pos(',', s) );
               s:=Trim(s);
             end;
             MailItem.Recipients.Add(s);
             MailItem.Subject := 'zvit ' + qCustomer.FieldByName('SName').AsString +' '+ DateToStr(self.RprtDate);
             MailItem.Body    := '³äïîâ³äíî äî “Ïîëîæåííÿ ïðî ïîðÿäîê ñêëàäàííÿ àäì³í³ñòðàòèâíèõ äàíèõ ùîäî ä³ÿëüíîñò³ òîðãîâö³â ö³ííèìè ïàïåðàìè'+' òà ïîäàííÿ â³äïîâ³äíèõ äîêóìåíò³â äî ÄÊÖÏÔД, çàòâåðäæåíîãî ð³øåííÿì ÄÊÖÏÔÐ ¹279 â³ä 08.06.04ð. òà Íàêàçó ÄÊÖÏÔÐ ¹923 â³ä 27.09.04ð., íàäàºìî íåðåãóëÿðíó ³íôîðìàö³þ ç âèêîíàííÿ äîãîâîð³â Òîâàðèñòâîì ç îáìåæåíîþ â³äïîâ³äàëüí³ñòþ '+
               qCustomer.FieldByName('SName').AsString + ' (ë³öåç³ÿ ' +
                qCustomer.FieldByName('LicenseNumber').AsString + ' â³ä ' +
                 Date2text(qCustomer.FieldByName('LicenseDate').AsDateTime) + ') çà '+
                  Date2text(self.RprtDate);
             myAttachments    := MailItem.Attachments;
             myAttachments.Add(Files.mFileName, olByValue, 1, 'marc.dbf');
             myAttachments.Add(Files.oFileName, olByValue, 1, 'operate.dbf');
             MailItem.Send;
           finally
             myAttachments := VarNull;
             OutlookApp.Quit;
             OutlookApp := VarNull;
           end;


Juice   (2005-06-11 14:24:00) [1]

Нахожу. Каюсь. Но к делу это ведь не относится ?


Anatoly Podgoretsky   (2005-06-11 08:53:00) [2]

Juice ©   (10.06.05 19:11) [4]
но пока что юзером являюсь я, и кофе я вообще не пью.
Juice ©   (10.06.05 22:59) [5]
А зависать приложение начинает на машинах у пользователей, причем сам тому свидетель, и даже кофея с коньяком не надо :)

Не находишь противоречия?


nikkie   (2005-06-11 01:03:00) [3]

если бы вызывал - могла бы быть ошибка с подсчетом ссылок из-за неправильного порядка вызова (OleUninitialize раньше, чем освобождение интерфейса).

могу посоветовать присвоить Null и MailItem. если не поможет - начать последовательно комментировать строки и определить минимальный код, который приводит к зависанию аутлука.


Juice   (2005-06-10 23:46:00) [4]

Пишу в gui, приложение однопоточное. OleInitialize/OleUninitialize не вызываю. А зачем ?


nikkie   (2005-06-10 23:23:00) [5]

ты случайно этот код не в консольном приложении пишешь? OleInitialize/OleUninitialize сам вызываешь?


Juice   (2005-06-10 22:59:00) [6]

А если быть честным то он у меня и не зависает вовсе, просто я вижу что дело обстоит не так, как полагается. А зависать приложение начинает на машинах у пользователей, причем сам тому свидетель, и даже кофея с коньяком не надо :)


Juice   (2005-06-10 19:11:00) [7]


> nightsoft ©   (10.06.05 13:10) [3]
> и вообще, замет outlook пользовать ? а вдруг он не установлен
> на машине ?
> есть другие пути отправки почты :) исходники послать ?

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1117549229&n=4
П.2 в особенно


> Digitman

Ну это конечно все очень правильно, но пока что юзером являюсь я, и кофе я вообще не пью. Если сервер автоматизации не используется то он должен уходить в даун а не висеть в памяти. Обьясню иначе -
1) аутлук не вивсит в памяти
2) выполняется этот код
3) аутлук висит в памяти


nightsoft   (2005-06-10 13:10:00) [8]

и вообще, замет outlook пользовать ? а вдруг он не установлен на машине ?
есть другие пути отправки почты :) исходники послать ?


Digitman   (2005-06-10 12:37:00) [9]


> при попытке отправить следующее письмо программа есс-но
> зависает


почему это "есс-но" ?

при выполнении какой строчке в твоем коде происходит это "есс-но" ?


> outlook.exe продолжает висеть в процессах


а почему бы ему не "висеть" ?

к примеру, юзер открыл Аутлук "ручками", создал там документ, начал его редактировать, "недоредактировал", бросил все и пошел пить кофе ... в это время как черт из табакерки являешься ты со своей программой, "цепляешься" (GetActiveOleObject) к заведомо существующему процессу олей-сервера (стартованному юзером "ручками" как обычное приложение и смиренно ожидающему возврата юзера после кофиепития), делаешь свои "черные дела") и с какого-то перепугу ожидаешь, что процесс по твоей команде будет немедленно завершен ..

как ты себе это мыслишь ?
почему юзер, таки явившись после кофиепития, должен быть неприятно огорчен внезапным исчезновением им стартованного процесса ?


Juice   (2005-06-10 11:09:00) [10]

В поисках решения даже переточил этот код под компоненты со страницы Servers - ситуация аналогичная, и не  только на моей машине! Что же это получается? Может его как-то по-особенному надо закрывать, в отличие от других серверов офиса ? Если кто-то сталкивался с таким  траблом или раоборот, писал диспетчера для аутлука и проблемы не возникало - сообщите плз!


Наверх

Титульная страница Поиск, карта сайта Написать письмо