Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2011, 10:07   #1
ProESM
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 27
По умолчанию Delphi и MS Outlook 2010

Приветствую всех и каждого!

Пишу простейшую программу, которая отсылает через MS Outlook 2010 письмо.

Делаю это следующим образом:
Код:
uses
  ComObj;

var
  OutlookApp, SpamNameSpace, MyLetter: OleVariant;

procedure TForm1.SendMail(Subject, Body, RecvAddress: string; Attachs: array of string);
begin
  try
    OutlookApp := GetActiveOleObject('Outlook.Application');
  except
    OutlookApp := CreateOleObject('Outlook.Application');
  end;
  try
    SpamNameSpace := OutlookApp.GetNameSpace('MAPI');
    MyLetter := OutlookApp.CreateItem(0);
    MyLetter.To := RecvAddress;
    MyLetter.Body := Body;
    MyLetter.Subject := Subject;
    MyLetter.Attachments.Add(paramstr(0));
    //MyLetter.DeleteAfterSubmit := True;
    MyLetter.Send;
  finally
    OutlookApp.Quit;
  end;
end;
На строке
Код:
OutlookApp := GetActiveOleObject('Outlook.Application');
выдает следующую ошибку
Код:
Exception class EOleSysError with message 'Недопустимая строка с указанием класса, ProgID: "Outlook.Application"'
Прошу помочь.
ProESM вне форума Ответить с цитированием
Старый 15.03.2011, 11:00   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Всё логично. GetActiveOleObject возвращает OleObject уже запущеного экземпляра интерфейса.

А это
Цитата:
Код:
OutlookApp := CreateOleObject('Outlook.Application');
Выполняется?

Просто, дело в чём. Приведенный вами код можно закоментарить так
Код:
 try
    OutlookApp := GetActiveOleObject('Outlook.Application'); // Подключаемся к уже запущенному экземпляру Outlook'а
  except // Если нет токого, то выдаем ошибку (только на этапе отладки) и переходим на except. Если такой есть, то except пропускается
    OutlookApp := CreateOleObject('Outlook.Application'); // Создаем новый экземпляр
  end;
выдаем ошибку (только на этапе отладки) - значит, что когда вы запустили приложение из Delphi (F9), то сообщение об ошибке между try...except появится. А если из проводника откомпелированный exe-шник запустите, то - нет.
Sibedir вне форума Ответить с цитированием
Старый 15.03.2011, 11:12   #3
ProESM
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 27
По умолчанию

Даже при запуске откомпилированного .exe все равно выскакивает эта ошибка:
Недопустимая строка с указанием класса, ProgID: "Outlook.Application".

Пробывал убирать вообще try except. Не помогает
ProESM вне форума Ответить с цитированием
Старый 15.03.2011, 12:58   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Даже при запуске откомпилированного .exe все равно выскакивает эта ошибка:
Недопустимая строка с указанием класса, ProgID: "Outlook.Application".
Значит ошибка и на CreateOleObject тоже.

Сделай так
Код:
var
  OutlookApp: OleVariant;
begin
  try
    OutlookApp := GetActiveOleObject('Outlook.Application');
  except
  end;

  if OutlookApp = Unassigned then
  try
    OutlookApp := CreateOleObject('Outlook.Application');
  except
    Exit;
  end;

  try
    // ...
    // ...
    // ...
  finally
    OutlookApp.Quit;
  end;
end;
Затем
1. Устанавливаем точку останова на begin
2. Запускаем приложение, отправляем письмо
3. Нажимаем F7 пока не появится сообщение (на GetActiveOleObject)
4. Жмем OK
5. Продолжаем нажимать F7 до CreateOleObject и далее
6. Выкладываем сюда, что получилось.

P/S: У меня ошибка 2 раза возникала, т.к. MS Outlook не установлен (подозреваю, что у вас тоже, или их несколько, или был один потом установили другой), потому точно сказать не могу. Но по идее всё почти правильно.

Последний раз редактировалось Sibedir; 15.03.2011 в 13:01.
Sibedir вне форума Ответить с цитированием
Старый 15.03.2011, 13:39   #5
ProESM
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 27
По умолчанию

Там ОК нет, у меня стоит Delphi 2010, но есть Continue, что я и нажал.
Вот лог:
Код:
Source Breakpoint at $004AB60C: C:\Users\e-mazhitov\Desktop\Outlook\Unit1.pas line 39. Process Project1.exe (6040)
First chance exception at $752C9617. Exception class EOleSysError with message 'Недопустимая строка с указанием класса'. Process Project1.exe (6040)
First chance exception at $752C9617. Exception class EOleSysError with message 'Недопустимая строка с указанием класса'. Process Project1.exe (6040)
First chance exception at $752C9617. Exception class EOleSysError with message 'Недопустимая строка с указанием класса, ProgID: "Outlook.Application"'. Process Project1.exe (6040)
ProESM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cоздание почтовой рассылки из Outlook 2010 c Диспетчером контактов Vaadoo Софт 1 14.03.2011 15:59
GlScene и Embarcadero Rad Studio 2010 (Delphi 2010) Fiery Fox Мультимедиа в Delphi 4 19.11.2010 21:46
Delphi 2010 Djeka(c) Помощь студентам 2 24.09.2010 08:21
Delphi 2010 Hausedark Софт 9 14.07.2010 22:12
Delphi 2010 beemoto Общие вопросы Delphi 6 22.09.2009 13:57