Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Problemas al descargar un Mail con los Indy (https://www.clubdelphi.com/foros/showthread.php?t=13878)

Fizban 02-09-2004 13:40:21

Problemas al descargar un Mail con los Indy
 
Buenas

Os comento así por encima un poco lo que me pasa.
Tengo una aplicación que descarga de la bandeja de entrada de un buzón todos los mensajes para insertarlos en una BBDD, pero tengo un problema con un tipo de mensajes.
Son mensajes que tienen como fichero adjunto otro mensaje. Al descargar el mensaje el objeto TIDMessage no distingue que sea un fichero adjunto si no lo trata como texto, y esto es un problema ya que en ese texto viene la cabecera de internet, vamos un pequeño caos.
Además hay otro problema, si en ese mensaje adjunto a su vez tiene un fichero adjunto, este fichero tampoco lo detecta y lo guarda como texto binario, vamos una gran maravilla.

Espero que mi explicación os haya valido de algo.
espero vuestras respuestas

Gracias de antemano y un saludo

jachguate 03-09-2004 01:18:25

Hola.

Sobre los adjuntos que son un mensaje... basta con tomarlos y asignarlos a un nuevo TidMessage, por ejemplo, con su método LoadFromStream. Si este mensaje tuviese archivos adjuntos, en ese momento se interpretarán correctamente. Si no te funciona, vuelve aca, que yo ahora no he tenido tiempo para comprobarlo antes de decirlo.

Para identificar que adjuntos son otro mensaje, creo que se usa un tipo MIME especial para ellos, aunque no estoy plenamente seguro, si estoy seguro que con unos minutos de pruebas lo podes determinar vos mismo...

sobre:
Cita:

Empezado por Fizban
lo guarda como texto binario

Esto es una paradoja... no se exactamente lo que habras querido decir, pero por un lado, si vamos al hecho de que las computadoras representan todo en forma binaria... estarás de acuerdo conmigo que cualquier texto almacenado y/o representado en una computadora será binario.

Por otro lado, si nos basamos en la clasificación de archivos binarios, como contraparte a los archivos de texto, o es texto, o es binario... pero no hay tal cosa como "texto binario".

Es probable que te refiras a que los adjuntos se ven como un "texto ilegible". Es porque está codificados, de manera que puedan traspasar ciertas redes que no soportan la transmisión de ciertos códigos ASCII, y debido a que el protocolo asi lo exige. Si ves cualquier mensaje que tenga un archivo adjunto (de cualquier tipo mime que no sea TEXT/*) como texto plano, el adjunto aparecerá de esta manera.

Hasta luego.

;)

Fizban 03-09-2004 11:11:50

Gracias por tu ayuda, Voy a probarlo ahora mismo y ya te comentaré

Gracias de nuevo y un saludo

Fizban 07-09-2004 15:57:27

Buenas otra vez,


He intentando probarlo, pero me quedo atascado...


Aquí intento grabar la parte del mensaje de Texto a un TStream pero me da un error de violación de acceso a memoria.


TidTExt(RecMensaje.MessageParts.Items[intindex]).Body.SaveToStream(TIdMessageCoder.SourceStream);

TIdMessage.LoadFromStream(TIdMessageCoderSourceStream);

Y ahí es dónde tengo el problema.

Gracias de nuevo

Y un saludo

jachguate 08-09-2004 07:10:41

Hola

Cita:

Empezado por Fizban
Aquí intento grabar la parte del mensaje de Texto a un TStream pero me da un error de violación de acceso a memoria.


Código Delphi [-]
  TidTExt(RecMensaje.MessageParts.Items[intindex]).Body.SaveToStream(TIdMessageCoder.SourceStream);
  TIdMessage.LoadFromStream(TIdMessageCoderSourceStream);

Y ahí es dónde tengo el problema.

Si el adjunto es un mensaje, en primer lugar, el MessagePart no será de la clase TidText, sino de la clase TidAttachment, que es el molde que debieras aplicar. De hacer este casteo no seguro, es muy probable que provenga el Access Violation que obtenes. En otra ocasión, te recomiendo comprobar primero la clase de un objeto, o bien realizar un casteo seguro, con el operador AS, para evitar este tipo de errores.

Ahora si he tenido delphi a mano, asi que he comprobado que el mime/type de los adjuntos que son otro mensaje es message/rfc822.

He comprobado también que esta clase (TidAttachment) no tiene método SaveToStream, pero si un método SaveToFile, con el que seguramente usando un archivo temporal o intermedio solucionarás el asunto.

Te recomiendo darte una vuelta por la ayuda de TidAttachment, y poner atención en sus propiedades: FileName, ContentType y ContentTransfer.

Hasta luego.

;)

pd. He editado tu mensaje, que has puesto un tipo de letra demasiado grande. Si vuelve a ocurrite, se agradece que vos mismo lo edites.

Fizban 08-09-2004 10:28:51

El problema es que este mensaje adjunto en el MessagePart viene como TIdtext y no como TidAttachment, con lo cual no puedo realizar lo que dices.

Seguiré probando e investigando...

Muchas gracias por tu ayuda

Saludos

PD: perdona por lo de la fuente pero se me fue un poco la cabeza.

jachguate 08-09-2004 15:28:10

Y si es asi, como se supone que identificas que el adjunto es otro mensaje, y no un texto cualquiera?

:confused:

Fizban 08-09-2004 15:38:27

porque lo veo desde la bandeja de entrada del Outlook.

jachguate 08-09-2004 23:05:48

Cita:

Empezado por jachguate
Y si es asi, como se supone que identificas que el adjunto es otro mensaje, y no un texto cualquiera?

Cita:

Empezado por Fizban
porque lo veo desde la bandeja de entrada del Outlook.

Creo que no he sabido expresarme. Me referia a como identificas programáticamente que se trata de un mensaje inserto en el MessagePart, y no de otra cosa.

En otras palabras... ¿cómo hace outlook para saberlo?

¿me explico ahora?

Creo que si no fuese en un TidAttachment, con el mime type ya indicado... salvo que me haya perdido alguna parte... no habrá forma de hacerlo.

Quizas estas viendo dos mensajes diferentes... o estas agarrando el MessagePart equivocado.... :(

Hasta luego.

;)

pd. Supongo que el outulook seguira el estándar... al menos, el mensaje enviado ayer, y que me ha servido de prueba, es un forward enviado desde outlook express, de un forward enviado desde yahoo.


La franja horaria es GMT +2. Ahora son las 02:13:03.

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