Обновление
Как правильно заметил No'am, COM-интерфейс приложения Outlook не поддерживает подключение и отключение.Я был удивлен этим, но я обычно использую обертки Delphi, и действительно реализация Connect Connect для TOutlookApplication просто возвращает результат CreateOleObject или GetActiveObject.Реализация метода Disconnect TOutlookApplication на самом деле делает нечто большее, чем просто освобождение интерфейсов.Если AutoQuit имеет значение true, он вызывает Quit в COM-интерфейсе приложения.
Однако, поскольку это кажется необязательным, я думаю, что отказ от вызова olApp.Quit не должен вызывать проблем, с которыми сталкивается No'am.Оставляя мой ответ как «учебный» материал, и другие не должны проверять это.
Не уверен, что это на самом деле причина вашей проблемы, но я упускаю в вашем коде соединение си отключиться от приложения Outlook.Хотя они, очевидно, не нужны для использования COM-сервера Outlook (как предполагает отправляемая почта), они являются частью «обычных» шаблонов использования COM, которые я знаю.Я вполне могу себе представить, что отсутствие соединения / разъединения может привести к падению кода завершения, когда он запускается из-за выхода переменных из области видимости (после оператора end).
Шаблон, который я обычно использую:
Create / CreateOleObject
try
Connect
try
...
finally
Disconnect
end
finally
Free / Release
end
Вы должны использовать Create и Free при использовании одного из предоставленных Delphi упаковщиков TxxxApplication, CreateOleObject и Releasing интерфейса (устанавливая его в ноль / не назначенный), если вы используете «прямой» COM.
В вашем примере это будет означать добавление
olApp.Connect;
между строками назначения CreateOleObject и olNameSpace и добавление
olApp.Disconnect;
после olNameSpace.LogOff;
Добавлениепара блоков try / finally также не будет потрачена впустую.