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
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