2011-11-11 2 views
3

J'essaie d'envoyer un mail via mon application développée dans BDS 2006 via MS Office Outlook. Cela marche parfaitement bien avec mon Outlook en cours d'exécution, mais il échoue dans le bloc try si Outlook est fermé.delphi MS Office erreur de perspective

Il affiche une erreur EOlesystem error : Operation unavailable et ne va pas à Except bloc

mon code

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; 

Comment puis-je surmonter cela?

Merci

Répondre

1

Il doit aller à l'exception bloc. Avez-vous mis un point d'arrêt là pour vérifier?

Mais néanmoins vous pouvez empêcher l'exception de se produire:

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

sans succès, même erreur à 'vMailItem.Recipients.Add (MailAddress);' '.Au sujet du except' bloc il va seulement après que je presse sur pause la même erreur générée dans 'try' pendant le débogage, mais échoue à nouveau sur ' vMailItem.Recipients.Add (adresse mail); ' .Mais lors de l'utilisation de l'application, l'erreur est générée au bloc' try' et il ne va pas plus loin. – Shirish11

1

J'ai eu le même problème. Mais récemment, j'ai trouvé une solution de contournement. Au lieu d'ajouter plusieurs adresses e-mail en utilisant "vMailItem.Recipients.Add (adresse_adresse);", j'ai utilisé "vMailItem.To: = 'mailID';". J'espère que ça t'aide.

Voici un exemple:

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; 
Questions connexes