PDA

Ver la Versión Completa : Recibir Mensajes


ANALBA
24-07-2008, 11:06:48
Buenos dias, como comente en otro mensaje tengo un programa que envia correos, pero nunca he tratado de recibir, he visto un ejemplo en las indy de como reciben, pero este descarga las cabeceras y no el mensaje, ¿alguien sabe alguna forma de descargar los mensajes del servidor con indy 10?. Otra duda que tengo cuando se descargan estos mensajes hay alguna forma de guardarlos en una base de datos tipo MS Access, para luego yo poderlos gestionar por carpetas, consultas, etc.

Gracias de antemano

poliburro
24-07-2008, 14:25:20
Yo lo hago de la siguiente manera:



Function TFrmMainform.ProcesaCorreo(PiNumCorreo: Integer): String;
Var
LiNumMsgParts: Integer; // Número de bloques del correo
LStlCuerpoCorreo: TStringList; // contenido del mensaje
LStlcorreo: TStringList; // Correo por almacenar
LIdmMensaje: TIdMessage; // Instancia del mensaje
Begin
Result := 'Nada';
Try
Try
LStlCuerpoCorreo := TStringList.Create;
LStlcorreo := TStringList.Create;
LIdmMensaje := TIdMessage.Create(self);
LIdmMensaje.ContentType := 'text/plain';
PopCorreo.Retrieve(PiNumCorreo,LIdmMensaje);
If LIdmMensaje.MessageParts.Count = 0 Then
LStlCuerpoCorreo.AddStrings(LIdmMensaje.Body)
Else
For LiNumMsgParts := 0 To Pred(LIdmMensaje.MessageParts.Count) - 1 Do
If LIdmMensaje.MessageParts.Items[LiNumMsgParts] Is TIdText Then
LStlCuerpoCorreo.AddStrings(TIdText(LIdmMensaje.MessageParts.Items[LiNumMsgParts]).Body);
// Para evitar que se creen varios tickets a partir de un mismo correo, se
// elimina el mensaje antes de procesarlo con el autómata
PopCorreo.Delete(PiNumCorreo);
If Result = 'Nada' then
Begin
..............
End;
Finally
LStlCuerpoCorreo.Free;
LStlcorreo.Free;
LIdmMensaje.Free;
End;
Except
On Error: Exception Do
Result := 'Ha ocurrido un error al guardar el mensaje. Error: ' + Error.message;
End;
End;




Sobre guardarlo en access, pues es super sencillo en tu tabla incluyes un campo de tipo memo y listo, grabas el correo.

Saludos

ANALBA
28-07-2008, 16:55:13
Gracias por tu respuesta poliburro, he estado mirando el jeemplo que me diste y sobre el ejemplo que me bajaba solo las cabeceras e intentado acoplar el codigo tuyo, en el cual vi unas sentencias que realmente creia yo que eran lo que me faltaban, como entre otras poner en el pop.retrieve en vez de pop.retrieveheader, pero despues de estar dos dias probando cosas me sigue quedando el mensaje en el servidor, aparte que creo que no me lo baja correctamente, pues cuando se baja el mensaje si lleva alguna imagen me la pone como adjunto y el cuerpo del mensaje no se lee, aparte de que si aduntas una foto por ejemplo, no la abre correctamente. La verdad que voy algo perdido con la descarga de correos electronicos. Otra cosa que me comentas es que para guardar en acess los mails es muy sencillo. A mi no me gustaria guardarlo como un campo memo, sino poderlo guardar como quien lo manda, fecha del correo, adjunto, cuerpo etc. para posteriormente hacer busquedas es esto posible, he incluso como hace el outlook que cuando lo habras carge desde acess los correos que tenga en la carpeta que llamemos "entrada". Adjunto el codigo con el que he empezado a trabajar, por si sirve de ayuda.

Gracias de antemano y perdona por no haberte contestado antes, pero me hubiera gustado decirte que gracias a tu ejemplo ya lo habia conseguido, pero bueno tenia que probarlo.