2011-11-11 19 views
3

MS Office OutlookからBDS 2006で開発したアプリケーションを使用してメールを送信しようとしています。 見通しが完全に正常に動作しますが、Outlookが閉じている場合はtryブロックで失敗します。delphi MS Office Outlookのエラー

それは私がこれを克服するにはどうすればよい私のコード

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; 

をエラーEOlesystem error : Operation unavailableを表示し、Exceptブロックに行きませんか?

ありがとうございました

答えて

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)で同じエラー:ここ

は一例です同じエラーがデバッグ中に 'try'で生成されましたが、 ' vMailItem.Recipients.Add(mailaddress); ' で再び失敗します。しかし、アプリケーションを使用すると、' try'ブロックでエラーが生成され、それ以上は実行されません。 – Shirish11

1

私は同じ問題を抱えていました。しかし、最近私は回避策を見つけました。 "vMailItem.Recipients.Add(mailaddress);"を使用して複数の電子メールアドレスを追加する代わりに、 "vMailItem.To:= 'mailID';"を使用しました。それがあなたに役立つことを願っています; `それは私が破る押した後にのみ行くブロックexcept` .About`

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; 
関連する問題