![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 - ситуация аналогичная, и не только на моей машине! Что же это получается? Может его как-то по-особенному надо закрывать, в отличие от других серверов офиса ? Если кто-то сталкивался с таким траблом или раоборот, писал диспетчера для аутлука и проблемы не возникало - сообщите плз!