2009-10-14 11 views
5

Quelqu'un connaît un bon exemple de génération de courrier électronique HTML avec des images intégrées et une partie de texte alternative? J'ai besoin de générer des rapports tabulaires en HTML et j'aimerais intégrer des logos et d'autres images. Je crois qu'Indy peut le faire avec un peu de travail, mais j'espérais que quelqu'un pourrait me donner un bon exemple comme point de départ. Je suis ouvert à l'utilisation de bibliothèques autres que Indy et les solutions commerciales fournies source est disponible. La qualité et le temps de mise en œuvre est plus important que le coût. La solution doit également prendre en charge la livraison basée sur SMTP à un échangeur de messagerie.Générer des e-mails HTML avec des images incorporées dans Delphi

L'autre élément sur ma liste de souhaits est de pouvoir utiliser FastReports, TRichView ou un outil similaire pour générer le contenu du message HTML. Il y a des filtres de sortie HTML disponibles pour les deux, mais je n'ai pas eu l'occasion de faire des tests. Tout commentaire sur ce sujet serait apprécié.

Merci d'avance!

David

Répondre

9

Lisez les articles suivants sur le site Web de l'Indy:

HTML Messages
New HTML Message Builder class

+0

L'Indy MesssageBuilder semble être la voie à suivre. Le seul problème de codage potentiel que je vois sur la base des exemples est que les fichiers sont lus à partir du disque. J'ai besoin d'utiliser des flux car les données et les images vivent dans une base de données. Je vais vérifier la source pour voir si d'autres méthodes d'ajout d'images sont prises en charge et faire les ajustements nécessaires sinon. –

+0

En utilisant TIdMessage, TIdText et TIdAttachmentMemory, vous pouvez créer le message et les pièces jointes à l'aide de flux. – ajob

+0

TIdMessageBuilderHtml prend en charge l'utilisation de TStream pour les données de pièces jointes liées au code HTML, telles que les images. La propriété TIdMessageBuilderHtml.HtmlFiles comporte des versions surchargées de Add() pour les noms de fichiers et les données TStream. Toutefois, la connexion de données non liées ne prend pas encore en charge TStream. –

0

Nous avons essayé il y a des années avec Indy et intégré cid: images comme ceci: https://forums.codegear.com/thread.jspa?threadID=17473

Nous ne l'avons eu stable, chaque fois qu'il y avait un autre lecteur de courrier qui barfed (si nous avons eu travailler dans Outlook, puis Thunderbird ne l'a pas accepté, ou Outlook Express, ou, etc, etc). À la fin, nous l'avons fait avec .NET en utilisant AspNetEmail et cela a fonctionné comme un charme.

--jeroen

+1

Avez-vous déjà comparer les e-mails générés par Indy avec les e-mails générés par AspNetEmail pour voir ce qui est différent entre eux? –

+0

Il y a des années nous avons fait.Mais nous n'avons pas gardé de notes à cause de la pression du projet. Le projet a vécu pendant quelques années, mais maintenant il est mort. Donc aujourd'hui, ça pourrait aussi bien marcher avec Indy. –

+0

Assez juste, merci. –

0

Tout dépend de combien de différents clients de messagerie à distance, vous devez être en mesure de soutenir. Je crois que les bibliothèques Delphi bien connues qui supportent SMTP/Mime feront un travail raisonnable, mais elles peuvent vous laisser avec des problèmes de support quand l'un de vos utilisateurs de messagerie trouve que son destinataire ne peut pas voir un email correctement formaté.

Je recommande de visiter site de Jacob Palme qui vous donnera une idée de certains des problèmes que vous pourriez rencontrer. C'est un peu démodé, peut-être, mais en résumé, cependant vous construisez et envoyez votre email MIME complexe, vous rencontrerez un ou plusieurs clients de courrier qui ne peuvent pas manipuler la syntaxe correctement. Le site contient également des liens vers des exemples utiles de constructions que vous pouvez examiner et tester. Je ne veux pas insinuer que vous devez rouler votre propre logique comme nous l'avons fait: une bonne solution empaquetée réussira probablement dans la grande majorité des cas. Nous avons écrit notre propre code Delphi pour gérer cela il y a quelques années, donc je vais laisser à d'autres le soin de vous fournir des informations à jour sur ce qui est disponible sur le marché.

1

Ces jours-je utiliser le client de messagerie de Clever Component, mais pas libre.

Les commandes TurboPower Internet (OpenSource) ont bien fonctionné dans le passé.

+0

Merci, je n'ai pas regardé leurs composants dans quelques années. Clever Component est certainement devenu très riche en fonctionnalités, mais l'étiquette de prix est un peu raide, sauf si vous avez vraiment besoin de certaines fonctionnalités avancées. –

1
function data64(const filename:string): ansistring; 
// uses Classes, IdGlobalProtocols, EncdDecd; 
const 
    crlf = #13#10; 
begin 
    result := ''; 
    with TIdMimeTable.Create do 
    try 
    result := 'data:' 
     + GetFileMIMEType(filename) + ';'; 
    finally 
    Free; 
    end; 
    with TMemoryStream.Create do 
    try 
    LoadFromFile(filename); 
    result := result + 'base64,' + crlf 
     + EncodeBase64(Memory,Size); 
    finally 
    Free; 
    end; 
end;