2009-03-23 13 views
2

Pour le moment, nous utilisons MAPI pour envoyer un e-mail en texte brut à partir de notre application. Nous spécifions l'indicateur de dialogue lorsque l'utilisateur appelle cette fonction, afin que l'email apparaisse dans son client de messagerie et qu'il puisse ensuite le modifier et l'envoyer.Envoyer un e-mail au format HTML

Nous souhaitons embellir l'email et l'envoyer dans un format HTML.
Selon ce lien MAPI lien MSDN est Sutiable pas pour cette http://support.microsoft.com/kb/268440

J'ai vu un article sur ExpertsExchange qui disent que vous pouvez utiliser MAPI pour le faire mais je ne peux pas obtenir l'exemple de travailler avec Outlook (pas essayé autre client pour le moment)

procedure ShowMailDlg(ToName,Address,HTMLMessage: string); 
var 
    li: integer; 
    lMessage: TMapiMessage; 
    lRecipArray: array of TMapiRecipDesc; 
    lREs: DWord; 
begin 
    SetLength(lRecipArray,1); 
    lRecipArray[0].ulRecipClass:=MAPI_TO; 
    lRecipArray[0].lpszName:=pChar(ToName); 
    lRecipArray[0].lpszAddress:=pChar(Address); 
    lMessage.ulReserved:=0; 
    lMessage.lpszSubject:=nil; 
    lMessage.lpszNoteText:=pChar(HTMLMessage); 
    lMessage.lpszMessageType:= nil;//pChar('HTML'); 
    lMessage.lpszDateReceived:=nil; 
    lMessage.lpszConversationID:=nil; 
    lMessage.flFlags:=0; 
    lMessage.lpOriginator:=nil; 
    lMessage.nRecipCount:=length(lRecipArray); 
    lMessage.lpRecips:=PMapiRecipDesc(lRecipArray); 
    lMessage.nFileCount:=0; 
    lMessage.lpFiles:=PMapiFileDesc(nil); 
    lRes:=MapiSendMail(0, 0 , lMessage,MAPI_DIALOG, 0); 
end; 

Tout le monde a une idée de comment je peux le faire. Je pourrais probablement automatiser Outlook, mais je voudrais le garder assez indépendant du client de messagerie (donc MAPI)

Merci de

Mise à jour: Merci à tous pour les suggestions. La fonctionnalité est la question n'est pas très utilisée, donc demander à l'utilisateur de configurer les détails SMTP n'est pas vraiment une option. Je pense que nous allons juste coller à l'email de texte brut.

Merci

Répondre

4

MAPI ne prend pas en charge les messages au format HTML. De Microsoft: "MAPI (Extended Messaging Application Programming Interface) ne doit pas être utilisé pour générer des messages au format HTML.Par ailleurs, envisagez d'utiliser le modèle d'objet Microsoft Outlook, CDONTS, CDOSYS, CDOEX ou un contrôle SMTP tiers."

Je voudrais faire écho aux commentaires sur l'envoi via Indy. J'ai publié une unité qui fonctionne pour envoyer des messages HTML avec Indy très simplement here ou n'hésitez pas à écrire les vôtres. Si vous voulez vraiment rendre les messages modifiables, essayez une combinaison de WPTools et Indy. WPTools a un bon support pour le balisage HTML et ensuite vous pouvez envoyer le message résultant via Indy.

Je n'ai aucune expérience avec Synapse, donc je ne peux pas dire à quel point c'est facile/difficile avec ce projet.

0

Vous pouvez utiliser SMTP avec Indy:
HTML Messages
New HTML Message Builder class (Indy 10)

+0

Malheureusement, cela ne s'affichera pas dans l'e-mail du client de messagerie par défaut de l'utilisateur, comme le fera MAPI. –

2

Ceci est également possible en utilisant la bibliothèque Synapse. Un exemple spécifique est disponible sur la page howto intitulée "About MIME and its MIME Parts". J'ai personnellement utilisé cette technique dans plusieurs programmes pour envoyer des emails HTML.

Malheureusement, cela ne fonctionne pas sur MAPI, vous devrez obtenir les informations SMTP ou IMAP des utilisateurs et gérer cette communication vous-même (la bibliothèque Synapse a des routines pour cela).

Si vous décidez de télécharger Synapse, je vous suggère fortement d'obtenir la dernière version du référentiel subversion. La mise à jour disponible inclut la prise en charge de Delphi 2009.

3

Si vous avez seulement pour servir les clients Outlook, vous pouvez essayer d'accéder à Outlook en OLE:

procedure SendMail(const aRecipient, aSubject, aNote, aFile: string; Silent, HTML: boolean); 
const 
    olMailItem = 0; 
var 
    ii: integer; 
    MyOutlook, MyMail: variant; 
begin 
    //*** Send something via OLE/Outlook... 

    //*** Outlook- und Mail-Objekt erstellen... 
    MyOutlook := CreateOLEObject('Outlook.Application'); 
    MyMail := MyOutlook.CreateItem(olMailItem); 

    //*** create a mail message... 
    MyMail.To  := aRecipient; 
    MyMail.Subject := aSubject; 

    if aNote <> '' then begin 
    if HTML then 
     MyMail.HTMLBody := aNote 
    else begin 
     MyMail.Body  := aNote; 
    end; 
    end; 

    //*** Add Attachment... 
    if aFile <> '' then begin 
    MyMail.Attachments.Add(aFile); 
    end; 

    if Silent then 
    MyMail.Send 
    else 
    MyMail.Display; 

    MyOutlook := UnAssigned; 
end; 
2

Pour Delphi emailing Je recommande SakEmail
http://groups.yahoo.com/group/sakemail/
Si vous utilisez une version de delphi supérieure puis 7,
vous devez ajouter la définition de version au fichier .inc.
fourni avec SakEmail, sinon il retournera à
Mode de compatibilité Delphi4. Après avoir patché le fichier inc il semble
bien avec Delphi 2005.

aussi, il semble HTML sur MAPI fonctionne dans Thunderbird, mais aucun autre client.

0

Vous devriez envisager d'utiliser un composant SMTP, Indy par exemple, et d'ajouter l'utilisateur effectuant l'envoi au champ CC ou BCC du message. Cela satisfait largement le besoin d'avoir de tels messages envoyés dans le propre client de messagerie de l'utilisateur, ce qui est le principal avantage de MAPI. L'utilisateur peut même créer un compte distinct spécifiquement pour recevoir de telles copies. Cela permet de personnaliser complètement chaque détail lié à l'envoi de courrier (MHTML en est un exemple), y compris la mise en cache de tous les messages et l'envoi dans un thread séparé, ou à un moment différent, etc. En outre, cette méthode est plus agnostique au client que MAPI même; par exemple, cela fonctionne même si l'utilisateur utilise un courrier électronique Web tel que Gmail.

0

Il y a une fonctionnalité non documentée de MAPISendMail pour inclure un corps HTML:

  • mis lpszNoteText-nil (ou un pointeur vers une chaîne vide)
  • ajouter une pièce jointe HTML

MAPI utilisera la pièce jointe html comme corps de l'e-mail (sans inclure la pièce jointe).

Questions connexes