【问题标题】:delphi MS Office outlook errordelphi MS Office Outlook 错误
【发布时间】:2011-11-11 11:32:44
【问题描述】:

我正在尝试通过我在 BDS 2006 中通过 MS office Outlook 开发的应用程序发送邮件。 它在我的 Outlook 运行时完全正常,但如果 Outlook 关闭,它会在 try 块中失败。

它显示错误EOlesystem error : Operation unavailable 并且没有转到Exceptblock

我的代码

 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;

我该如何克服这个问题?

谢谢

【问题讨论】:

    标签: delphi outlook ole


    【解决方案1】:

    它必须转到 except 块。你在那里设置断点检查吗?

    但是你可以阻止异常的发生:

    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');
    { ... }
    

    【讨论】:

    • 没有成功,在vMailItem.Recipients.Add(mailaddress); 出现同样的错误。关于except 块只有在我在调试时对try 中生成的相同错误按下break 后才会出现,但在vMailItem.Recipients.Add(mailaddress); 上再次失败.但是当使用该应用程序时,会在try 块处生成错误,并且不会进一步。
    【解决方案2】:

    我遇到了同样的问题。但最近我找到了一种解决方法。我没有使用“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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多