ошибка внешнего вида в MS Office - PullRequest
3 голосов
/ 11 ноября 2011

Я пытаюсь отправить письмо через приложение, разработанное в BDS 2006, через MS Office Outlook.Он полностью работает с моим внешним видом, но не работает в блоке try, если внешний вид закрыт.

Отображает ошибку EOlesystem error : Operation unavailable и не переходит в блок Except

мой код

 procedure TMyform.BTN_mailClick(Sender: TObject);
 const
    olMailItem =0;
 var
    Outlook: OleVariant;
    vMailItem: variant;
 begin
  try
   Outlook := GetActiveOleObject('Outlook.Application');
  except
   Outlook := CreateOleObject('Outlook.Application');
  end;
  vMailItem := Outlook.CreateItem(olMailItem);
  vMailItem.Recipients.Add(mailaddress);
  vMailItem.Subject := 'mymail';
  vMailItem.Body := 'Dear '
  vMailItem.Attachments.Add(path);
  vMailItem.Send;
  VarClear(Outlook);
 end;

Как я могу это преодолеть?

Спасибо

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

Должен идти в блок кроме. Вы установили точку останова для проверки?

Но, тем не менее, вы можете предотвратить возникновение исключения:

var
  Outlook: OleVariant;
  ClassID: TCLSID;
  Unknown: IUnknown;
begin
  if Succeeded(GetActiveObject(ClassID, nil, Unknown)) then
    OleCheck(Unknown.QueryInterface(IDispatch, Outlook)) else
    Outlook := CreateOleObject('Outlook.Application');
{ ... }
1 голос
/ 17 июня 2014

У меня была такая же проблема.Но недавно я нашел обходной путь.Вместо добавления нескольких адресов электронной почты, используя « vMailItem.Recipients.Add (mailaddress); », я использовал « vMailItem.To: = 'mailID'; ».Я надеюсь, что это поможет вам.

Вот пример:

procedure TForm1.SendMailClick(Sender: TObject);
const olMailItem = $00000000;
Var
  Outlook: OleVariant;
  Mail: Variant;
begin
  try
    try
      Outlook := GetActiveOleObject('Outlook.Application');
    except
      Outlook := CreateOleObject('Outlook.Application');
    end;
    Mail := Outlook.CreateItem(olMailItem);

    Mail.To := 'receiver1@xyz.com' + ';' + 'receiver2@xyz.com';

    Mail.Subject := 'your subject';

    Mail.Display; //Mail.Send; if you want to send directly

  Except
    on E : Exception do
      ShowMessage(E.ClassName+' error raised, with message : '+E.Message);
  End;
end;
...