2011-10-20 4 views
1

Je crée un message mapi dans mon application Delphi, et les utilisateurs envoient simplement le message dans leur client de messagerie mapi par défaut, à savoir le message formaté apparaît dans leur client de messagerie et ils cliquent sur "envoyer".Comment fonctionne avec Outlook dans Delphi différent des autres clients de messagerie?

Tout fonctionne très bien lorsque le client de messagerie est Thunderbird ou Outlook Express, mais les choses sont plus bizarres quand il s'agit d'Outlook (2007). Le focus va à Outlook, par exemple, mais un utilisateur ne peut pas fermer la fenêtre Outlook, parfois l'utilisateur ne peut même pas utiliser une souris dans le programme - la flèche disparaît dans Outlook. Je me retrouve à devoir fermer l'application depuis le Gestionnaire des tâches. De mon point de vue de débutant, le problème est celui de contrôler les formes et se concentrer plus que quelque chose lié à mapi simple ou étendu; ce dernier semble hors de propos dans ce cas.

Est-ce que quelqu'un sait ce qui se passe ici? Et comment je devrais changer mon code pour faire face à ce problème?

Voici le code:

MapiMail1 := TMapiMail.Create(self); 
try 
    MapiMail1.Recipients.Add(MainGrid.AllCells[aCol, aRow]); 
    MapiMail1.Subject := ''; 
    MapiMail1.Body := ''; 
    MapiMail1.EditDialog := True; 
    MapiMail1.Send; 
finally 
    MapiMail1.Free; 
end; 
+0

Montrez-nous votre code, s'il vous plaît. En attendant, vous pouvez jeter un coup d'œil [ici] (http://www.imibo.com/imidev/delphi/les/index.html). Il existe de nombreux exemples complexes d'utilisation de MAPI dans Delphi. – TLama

+0

Merci TLama. J'utilise le composant MapiMail de Mike Shkolnik (www.scalabium.com). Quel que soit le problème, il semble que ce soit juste Outlook (2007) qui soit affecté. –

Répondre

3

Perspectives fonctionne très bien en utilisant OLE plutôt que MAPI. Essayez ceci:

USES OleCtrls, ComObj; 

procedure TForm1.Button1Click(Sender: TObject); 
const 
    olMailItem = 0; 
var 
    Outlook: OLEVariant; 
    MailItem: Variant; 
    MailInspector : Variant; 
    stringlist : TStringList; 
begin 
    try 
    Outlook:=GetActiveOleObject('Outlook.Application') ; 
    except 
    Outlook:=CreateOleObject('Outlook.Application') ; 
    end; 
    try 
    Stringlist := TStringList.Create; 
    MailItem := Outlook.CreateItem(olMailItem) ; 
    MailItem.Subject := 'subject here'; 
    MailItem.Recipients.Add('[email protected]'); 
    MailItem.Attachments.Add('c:\boot.ini'); 
    Stringlist := TStringList.Create; 
    StringList.Add('body here'); 
    MailItem.Body := StringList.text; 
    MailInspector := MailItem.GetInspector; 
    MailInspector.display(true); //true means modal 
    finally 
    Outlook := Unassigned; 
    StringList.Free; 
    end; 
end; 
+1

Merci pour ça. Utiliser MailInspector est le moyen d'afficher le message. L'utilisation de MailItem.Display (true) provoquait une exception "Invalid function" après la fin de la fonction Delphi. –

Questions connexes