2011-11-11 80 views
3

我想通過我的應用程序通過我的應用程序在BDS 2006中通過微軟辦公室Outlook發送一封郵件。 我的展望運行完全正常,但如果outlook關閉,它在try塊中失敗。delphi微軟辦公室前景錯誤

它顯示錯誤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; 

我如何克服這個問題?

謝謝

回答

1

它必須去除了塊。你有沒有設置一個斷點來檢查?

但無論如何,你可以防止異常情況的發生:

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

沒有成功,在 'vMailItem.Recipients.Add(mailaddress)相同的錯誤;' 。關於該'except'阻止它進入後,才按打破在調試時在'try'中生成的錯誤,但在 'vMailItem.Recipients.Add(mailaddress);' 錯誤再次失敗。但是,當使用應用程序時,錯誤在'try'模塊生成,並且不再進一步。 – Shirish11

1

我有同樣的問題。但最近我找到了一個解決方法。我不是使用「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 := '[email protected]' + ';' + '[email protected]'; 

    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;