2009-10-14 76 views
5

¿Alguien sabe de un buen ejemplo de generación de correo electrónico HTML con imágenes incrustadas y una parte de texto alternativa? Necesito generar algunos informes tabulares en HTML y me gustaría incorporar logotipos y otras imágenes.Generar correo electrónico HTML con imágenes incrustadas en Delphi

Creo que Indy puede hacer esto con algo de trabajo, pero esperaba que alguien pudiera señalarme un buen ejemplo como punto de partida. Estoy abierto a utilizar bibliotecas distintas de Indy y soluciones comerciales siempre que la fuente esté disponible. La calidad y el tiempo para implementar es más importante que el costo. La solución también necesita admitir la entrega basada en SMTP a un intercambiador de correo.

El otro elemento de mi lista de deseos es poder aprovechar FastReports, TRichView o una herramienta similar para generar el contenido del mensaje HTML. Hay filtros de salida HTML disponibles para ambos, pero no he tenido la oportunidad de hacer ninguna prueba. Cualquier comentario sobre este tema sería apreciado.

¡Gracias de antemano!

David

Respuesta

9

leer los siguientes artículos en el sitio web de Indy:

HTML Messages
New HTML Message Builder class

+0

El Indy MesssageBuilder parece ser el camino a seguir. El único problema potencial de codificación que veo basado en los ejemplos es que los archivos se están leyendo desde el disco. Necesito usar transmisiones ya que los datos y las imágenes viven en una base de datos. Comprobaré la fuente para ver si otros métodos de agregar imágenes son compatibles y realizaré los ajustes necesarios si no fuera así. –

+0

Al usar TIdMessage, TIdText y TIdAttachmentMemory, puede compilar el mensaje y los archivos adjuntos mediante transmisiones. – ajob

+0

TIdMessageBuilderHtml admite el uso de TStream para los datos adjuntos que están relacionados con el HTML, como las imágenes. La propiedad TIdMessageBuilderHtml.HtmlFiles ha sobrecargado versiones de Add() para nombres de archivos y datos de TStream. Sin embargo, adjuntar datos no relacionados actualmente no es compatible con TStream. –

0

Hemos intentado esto hace años con Indy y incrustado cid: imágenes como esta: https://forums.codegear.com/thread.jspa?threadID=17473

Nunca llegamos estable, cada vez que había otro lector electrónico que barfed (si lo conseguimos trabajando en Outlook, luego Thunderbird no lo aceptó, o Outlook Express, o, etc., etc.).

Al final lo hicimos con .NET usando AspNetEmail y funcionó a las mil maravillas.

--jeroen

+1

¿Alguna vez ha comparado los correos electrónicos generados por Indy con los correos electrónicos generados por AspNetEmail para ver qué hay de diferente entre ellos? –

+0

Hace años lo hicimos.Pero no mantuvimos notas debido a la presión del proyecto. El proyecto vivió por un par de años, pero ahora está muerto. Así que hoy, podría funcionar con Indy. –

+0

Muy bien, gracias. –

0

todo depende de la cantidad de diferentes clientes de correo remoto tiene que ser capaz de soportar. Creo que las bien conocidas bibliotecas Delphi que admiten SMTP/Mime harán un trabajo razonable, pero pueden dejarlo con problemas de soporte cuando uno de sus usuarios de correo descubre que su destinatario no puede ver un correo electrónico con el formato correcto.

Recomiendo visitar Jacob Palme's site que le dará una idea de algunos de los problemas que puede encontrar. Es un poco desactualizado, tal vez, pero en resumen, como construya y envíe su correo electrónico MIME complejo, encontrará uno o más clientes de correo que no pueden manejar la sintaxis correctamente. El sitio también tiene enlaces a algunos ejemplos útiles de construcciones que puede examinar y probar.

No quiero decir que tenga que desarrollar su propia lógica como nosotros: una buena solución empaquetada probablemente sea exitosa en la gran mayoría de los casos. Escribimos nuestro propio código Delphi para manejar esto hace algunos años, así que lo dejaré para que otros le den información actualizada sobre lo que está en el estante ahora.

1

En estos días yo uso del cliente de correo electrónico inteligente de componentes, aunque no libre.

Los controles de Internet de TurboPower (OpenSource) funcionaron muy bien en el pasado.

+0

Gracias, no he visto sus componentes en algunos años. Clever Component ciertamente se ha hecho muy rico en funciones, pero el precio es un poco elevado a menos que realmente necesite algunas de las funciones avanzadas. –

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; 
Cuestiones relacionadas