Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-09-2004
Fizban Fizban is offline
Registrado
 
Registrado: oct 2003
Posts: 5
Poder: 0
Fizban Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 03-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 03-09-2004
Fizban Fizban is offline
Registrado
 
Registrado: oct 2003
Posts: 5
Poder: 0
Fizban Va por buen camino
Gracias por tu ayuda, Voy a probarlo ahora mismo y ya te comentaré

Gracias de nuevo y un saludo
Responder Con Cita
  #4  
Antiguo 07-09-2004
Fizban Fizban is offline
Registrado
 
Registrado: oct 2003
Posts: 5
Poder: 0
Fizban Va por buen camino
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

Última edición por jachguate fecha: 08-09-2004 a las 08:12:43. Razón: Quitar letra demasiado grande
Responder Con Cita
  #5  
Antiguo 08-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

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.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate

Última edición por jachguate fecha: 08-09-2004 a las 08:15:49.
Responder Con Cita
  #6  
Antiguo 08-09-2004
Fizban Fizban is offline
Registrado
 
Registrado: oct 2003
Posts: 5
Poder: 0
Fizban Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 08-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Y si es asi, como se supone que identificas que el adjunto es otro mensaje, y no un texto cualquiera?

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 08-09-2004
Fizban Fizban is offline
Registrado
 
Registrado: oct 2003
Posts: 5
Poder: 0
Fizban Va por buen camino
porque lo veo desde la bandeja de entrada del Outlook.
Responder Con Cita
  #9  
Antiguo 09-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

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.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:45:23.


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
Copyright 1996-2007 Club Delphi