Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.03.2011, 10:39
ProESM ProESM вне форума
Прохожий
 
Регистрация: 19.03.2009
Сообщения: 33
Репутация: 10
По умолчанию 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"'
Прошу помочь.
Ответить с цитированием
  #2  
Старый 15.03.2011, 10:43
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

удалить try..except и оставить CreateOleObject('Outlook.Application');
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 15.03.2011, 11:01
ProESM ProESM вне форума
Прохожий
 
Регистрация: 19.03.2009
Сообщения: 33
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
удалить try..except и оставить CreateOleObject('Outlook.Application');

Все равно ругается той же ошибкой на той же строке. Такое ощущение, что в новом 2010 оутлуке как-то по другому процесс называется
Ответить с цитированием
  #4  
Старый 15.03.2011, 11:41
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

в реестре глянь
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 15.03.2011, 11:50
ProESM ProESM вне форума
Прохожий
 
Регистрация: 19.03.2009
Сообщения: 33
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
в реестре глянь

Если не затруднит, подскажи, где конкретно посмотреть? Ветку реестра назвать можешь?
Ответить с цитированием
  #6  
Старый 15.03.2011, 11:53
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

ну должна быть HKEY_CLASSES_ROOT\Outlook.Application
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 15.03.2011, 13:31
ProESM ProESM вне форума
Прохожий
 
Регистрация: 19.03.2009
Сообщения: 33
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
ну должна быть HKEY_CLASSES_ROOT\Outlook.Application

Судя по скрину, все вроде норм
Изображения
Тип файла: jpg Запись-в-реестре2.jpg (15.4 Кбайт, 11 просмотров)
Ответить с цитированием
  #8  
Старый 15.03.2011, 13:51
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

наоборот ничего хорошего
попробуй:
Код:
  try
    OutlookApp := GetActiveOleObject('Outlook.Application.14');
  except
    OutlookApp := CreateOleObject('Outlook.Application.14');
  end;
а лучше ветку создай ветку с именем Outlook.Application с содержимым = Outlook.Application.14. чтобы на всех компьютерах одинаково работало.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #9  
Старый 15.03.2011, 15:23
ProESM ProESM вне форума
Прохожий
 
Регистрация: 19.03.2009
Сообщения: 33
Репутация: 10
По умолчанию

Изменил код на:
Код:
  try
    OutlookApp := GetActiveOleObject('Outlook.Application.14');
  except
  end;

  if OutlookApp = Unassigned then
  try
    OutlookApp := CreateOleObject('Outlook.Application.14');
  except
    Exit
  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;

Получил следующее:
Код:
Exception class EVariantInvalidOpError with message 'Invalid variant operation'
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:23.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025