Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Cliente de correo con formato HTML (https://www.clubdelphi.com/foros/showthread.php?t=79436)

juank1971 04-07-2012 21:53:41

Cliente de correo con formato HTML
 
Saludos colegas:

He pasado demasiado trabajo buscando como leer el correo mediante delphi y mostrar el contenido que ya siempre es html y no lograba encontrar la manera, como me tomo dos días buscar la solución la posteo en este forum por si alguna necesita lo mismo que yo y no pase tanto trabajo para encontrarlo.

El tema era lo siguiente algo cencillo leer correo con las indi que hay muchos ejemplos incluyendo en esa web, pero el contenido lo guardan siempre en un TMemo, nunca lo había visto en un browser o al menos una idea de como hacerlo, para ver correctamente los mensajes con formato HTML que son los mas comunes.

Entonces Baje este ejemplo de un Cliente de Correo con INDY del siguiente enlace:
http://www.indyproject.org/DemoDownl...MailClient.zip

Después de buscar en varios lugares encontré esta función que les pongo a continuació que lo que hace es mostrar en un TWebBrowser el contenido HTML pasado como parámetro:

Código Delphi [-]
procedure TfrmMain.WBLoadHTML(WebBrowser: TWebBrowser; HTMLCode: string) ;
var
   sl: TStringList;
   ms: TMemoryStream;
begin
   WebBrowser.Navigate('about:blank') ;
   while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
    Application.ProcessMessages;

   if Assigned(WebBrowser.Document) then
   begin
     sl := TStringList.Create;
     try
       ms := TMemoryStream.Create;
       try
         sl.Text := HTMLCode;
         sl.SaveToStream(ms) ;
         ms.Seek(0, 0) ;
         (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)) ;
       finally
         ms.Free;
       end;
     finally
       sl.Free;
     end;
   end;
end;

Agregan la unit ActiveX en el proyecto para que puedan asignar la clase IPersistStreamInit, en esta línea
Código Delphi [-]
(WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)) ;

Porque a cada rato me pasa esto en estos foros, la mayoría de las cosas que se encuentran le faltan a que unit pertenecen algunos procedimientos, funciones o clases extrañas que muchos ni conocemos y a veces nunca se encuentra a cual.

Despues en la unit principal llamada Maind del ejemplo arreglo el codigo de esta manera en el procedimiento RetrieveExecute:

Código Delphi [-]
procedure TfrmMain.RetrieveExecute(Sender: TObject);
  ...........
    ...........
             if Msg.MessageParts.Items[intIndex] is TIdText then
                  begin
                   //  Memo1.Lines.Clear;
                   //  Memo1.Lines.AddStrings(TIdText(Msg.MessageParts.Items[intIndex]).Body);
                     WBLoadHTML(WebBrowser1,TIdText(Msg.MessageParts.Items[intIndex]).Body.Text );
                  end

       ...........
   ...........

Después inserto un TWebBrowser en la forma principal y lo sustituyo por el memo1 eliminando este ultimo. y ya queda resuelto entonces y se muestran todos los correos de una forma completamente espectacular y a la altura de un programa hecho en delphi.
Que despues los de C# ven esas cosas HTML en modo Texto en un Tmemo y dicen mira la basura que logran en delphi.

Salud y pesetas para todos Juank

Casimiro Notevi 04-07-2012 22:13:40

Gracias por compartirlo :)

golf2008 23-11-2012 16:35:59

Gracias
 
Juank:

Muy bueno tu aporte, es justo lo que estaba necesitando...

Gracias y saludos.

codicia 03-12-2012 05:42:10

Gracias por compartirlo, te comento algo de paso. Hace un tiempo quise hace lo mismo, quería hacer mi propio Outlook y como lo había planeado me llevaría mucho tiempo pero no había cosas que no podía hacer hasta que me encontré con un problema. El objeto que contiene y permite bajar los mensajes de correo tiene un error y es que no detecta todos los archivos adjuntos. Probá con varios e-mails y veras que en la mayoría lee los adjuntos pero hay algunos, que no se por qué motivo, no los lee o sea es como si no estuvieran. Traté de hacerlo yo mismo recorriendo el mensaje completo y detectar las partes (que son en si los adjuntos) y desistí porque además de complicado (no imposible) me frustró mucho tener que hacer algo complicado cuando si ese objeto andaría bien no tendría que hacer más que pedirle que me devuelva los adjuntos. Sería bueno si alguien solucionó esto que lo publique.

titoarrieta 01-08-2016 16:45:01

Gracias por el tip
 
Lo estaba buscando y por fin di con este documento


La franja horaria es GMT +2. Ahora son las 20:12:15.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi