2011-02-05 4 views
2

In this question I just asked J'ai dit que je prépare des messages Outlook en envoyant des données de mon application à Outlook avec MAPI.Delphi: comment composer un email dans Outlook sans utiliser MAPI?

Mais de cette façon, j'ai un obstacle majeur: je ne peux pas envoyer de texte formaté pour le corps du message. Ma forme a un champ rtf, je dépouille les données rtf puis prépare le mail de perspectives.

Comment est-il possible de faire la même chose (créer un email sortant Outlook prêt à être envoyé) sans utiliser mapi, et garder le formatage, en quelque sorte "rtf to html" ... Quelqu'un at-il déjà ce code?

+1

Pourquoi croyez-vous que l'utilisation de MAPI est liée à l'utilisation de la mise en forme? Cela me semble orthogonal. –

+0

Avez-vous vraiment besoin d'utiliser Outlook pour composer et envoyer l'e-mail? Pourquoi ne pas l'envoyer directement via un service SMTP en utilisant Indy et IdSmtp? –

+0

@ Paul-Jan Je ne suis pas un expert MAPI, je viens d'utiliser du code écrit par quelqu'un d'autre qui prépare un email à être envoyé par Outlook. Donc pour moi MAPI est un nouveau monde et je pourrais l'étudier mais je pose des questions pour éviter d'étudier des choses inutiles. – LaBracca

Répondre

2

Vous pouvez utiliser le Collaboration Data Objects de Microsoft, mais il est limité par le correctif de sécurité Outlook. Les objets de données de remboursement qui font partie de Outlook Redemption fonctionnent autour du correctif de sécurité. J'ai utilisé RDO pour créer des emails RTF dans Outlook.

Voici un exemple de procédure utilisant RDO pour créer un e-mail, insérer du texte au format RTF et afficher l'e-mail afin qu'il puisse être modifié avant l'envoi.

procedure TForm1.RTFemail; 
var 
    Session, Drafts, Mail, Recip: OleVariant; 
    s : string; 
begin 
    Session := CreateOleObject('Redemption.RDOSession'); 
    Session.Logon; 
    Drafts := Session.GetDefaultFolder(olFolderDrafts); 
    Mail := Drafts.Items.Add; 
    Recip := Mail.Recipients.Add('[email protected]'); 
    Recip.Type := olTo; 
    Recip.Resolve; 
    Mail.Subject := 'Testing Redemption'; 
    s := '{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil'+ 
    '\fcharset0 Arial;}}\viewkind4\uc1\pard\fs16 This is \ul '+ 
    'underlined\ulnone , \i italic\i0 , and \b bold\b0 .\par }'; 
    Mail.RTFBody := s; 
    Mail.Save; 
    Mail.Display; 
end; 

Il produit les éléments suivants avec Outlook 2003

enter image description here

+0

Notez que la rédemption le fait via MAPI. Cela dit, l'exigence «pas de carte» est probablement hors de propos. –

+0

Redemption utilise Extended Mapi qui n'est pas affecté par le correctif de sécurité. – Remko

+0

Il semble que CDO soit obsolète: "A compter d'Exchange 2007, ni les bibliothèques client MAPI (Messaging API) ni CDO 1.2.1 ne sont fournies dans le cadre de l'installation du produit de base." - http://en.wikipedia.org/wiki/Collaboration_Data_Objects – mjn

3

En utilisant les enveloppes de composant serveur OLE Automation fournies par Delphi. Un exemple que j'ai récemment découvert pour une autre question peut être trouvé ici: Easiest way to compose Outlook 2010 mail from Delphi?

+0

Merci, je vais étudier cet exemple, il semble une bonne réponse à ma question. – LaBracca

0

Exchange Web Services (EWS) ont été introduits dans Exchange 2007 comme une alternative au protocole MAPI, il s'agit d'un protocole SOAP documenté.

Je suppose qu'il ne sera pas lancer ou activer le client Outlook, mais il est possible de create a new E-mail message dans le dossier "Brouillon" (voir CreateItem refrence). Le Body element documentation montre que le texte brut et HTML sont supportés.

+0

Alors pourquoi une downvote? Delphi ne supporte pas le savon? – mjn

Questions connexes