FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Ayuda con incompatibilidad del Post de TIdHTTP de Indy 8 con Indy 10
Hola,
Tengo una aplicación con Delphi 4 e Indy 8. Estoy migrando a Delphi 2007 (Update 1), el cual trae Indy 10. El problema es que no funciona la llamada al método Post de TIdHTTP. Post es un método sobrecargado; pero solo estoy usando la llamada que en Indy 8 tenía la siguiente definición: procedure Post(URL: string; const Source: TStrings; const AResponseContent: TStream); La razón por la cual falla es que en la versión 10 está transformando el fin de línea (CR + NL) en un caracter &. De acuerdo al sistema de Ayuda, esa conversión es el comportamiento normal bajo Indy 10; pero no indica porque cambiaron el comportamiento que traían de Indy 8 (no sé si lo hicieron en Indy 9) ni como hacer para que el componente en Indy 10 emule el comportamiento de la versión 8; de hecho ni siquiera advierten de ese cambio. He intentado varias combinaciones con los parámetros de opciones de TIdHTTP; pero ninguna ha funcionado. Cambiar el servidor para que reconozca el & como equivalente a CR + NL no es una solución viable. La única solución que tengo hasta el momento es desmontar Indy 10 de Delphi 2007 e instalar Indy 8; pero quiero hacerlo solo como último recurso. Alguno podría indicarme una solución diferente ?. Más aún, alguién sabe si aparte de este problema hay otras diferencias entre las dos versiones que afecten el comportamiento de TIdHTTP y en tal caso como hacer para emular totalmente el comportamiento viejo ?. |
#2
|
|||
|
|||
Solución
Hola,
De antemano gracias a cualquiera que haya pensado una solución y si es diferente a la que acabo de encontrar, agradecería si pudiera compartirla. La solución que encontré fué usar un TStringStream en lugar de TStrings como parámetro de entrada. Es decir, usé la segunda forma del método sobrecargado Post, o sea : procedure Post(URL: string; const Source, AResponseContent: TStream); La conclusión es que, para mantener la compatibilidad, en Indy 8 debe usarse solo este método y no la otra versión del mismo. He hecho varias pruebas y al parecer está trabajando bien. De todas formas, si alguién conoce algunos otros puntos de incompatibilidad de versiones, o algo de las razones para el cambio hecho en Indy, mucho agradecería si los comentara aquí. Cita:
|
#3
|
|||
|
|||
Buenas! Estoy intentando crear una aplicacion para poder enviar correos electronicos através de delphi 4 y la verdad es que estoy un poco perdida, me he bajado la version 8 de los componentes Indy y creo que los he instalado, aunque no se si de forma correcta o no. Me gustaria que me echarais una mano y me indicarais como puedo empezar con el tema.
Un saludo! |
#4
|
|||
|
|||
Voy a averiguar y te comento
Cita:
Te cuento que no he tenido la oportunidad de usar Indy 8 con Delphi 4 para enviar correos; de hecho nunca he usado Indy para el envío de correos. El envío de correo lo he hecho sin inconvenientes con Delphi 5 y FastNet para correos internos (recuerdo haber leído algo de que FastNet tiene problemas para los externos). Lo curioso del caso es que hacerlo fué muy fácil; pero, posteriormente, cuando tuve problemas con FastNet para la conexión Web, fué cuando me enteré que FastNet tenía serios problemas en esa área y en consecuencia empecé a trabajar con Indy. Para estar homogeneo intenté pasar la parte de correo a Indy; pero lo encontré muy complicado con respecto a FastNet y me dió tantos problemas que opté por seguír usando FastNet para correo. En este momento estoy lidiando con un problema bastante complicado de registro de componentes en Delphi 2007; pero en cuanto me desocupe te prometo que miro a ver como es el envío desde Delphi 4 con Indy 8. Espero que a más tardar mañana en la noche te pueda decir algo al respecto Si mientras tanto alguién puede explicar algo sobre el tema, bienvenido sea. Saludos |
#5
|
|||
|
|||
Muchas gracia
Gracias por la rapidez, estoy avanzando algo pero me da errores que no tengo ni idea de como resolver, a ver si puedo encontrar algo de ayuda por ahi. Un saludo y suerte con tus problemillas!
|
#6
|
|||
|
|||
Lo que te he averiguado
Cita:
Como te prometí, aquí esta lo que he podido averiguarte hasta ahora: Los mensajes se envían mediante objetos del tipo TIdSMTP. Este es un componente Indy disponible en la paleta Indy Clients. Cada mensaje se almacena en objetos del tipo TIdMessage. Este es un componente Indy disponible en la paleta Indy Misc. Para definir el mensaje, las propiedades claves de TIdMessage son las siguientes: Body : Esta propiedad es un TStringList que almacena el texto del mensaje From : Esta propiedad es del tipo TIdEmailAddressItem, un tipo usado por Indy para definir direcciones. La prpoiedad indica el correo del que envía Subject : Es un string con el título o asunto del mensaje Recipients : Esta propiedad indica la lista de direcciones a donde se enviará el mensaje. Es del tipo TIdEmailAddressList, el cual es usado por Indy para manejar los TIdEmailAddressItem, Lógicamente hay más; pero estas son las básicas. El manejo de direcciones dado por TIdEmailAddressItem se maneja con 3 propiedades: Address : La dirección de correo en sí Name : El nombre asociado a esa dirección Text : El texto usado para desplegar direcciones, o se 'Name <Address>' Finalmente, el componente TIdSMTP se configura con base a 3 propiedades: Port : El número del puerto (por default 25) Host : La dirección IP o el nombre del servidor AutheticationType : Usa atNone si no requiere autenticar, o si es requerido, usa atLogin, suministrando además las credenciales en las propiedades UserId y Password Una vez definido lo anterior, hacer el envío requiere 3 métodos de TIdSMTP a. Llamar al método Connect para establecer la conexión b. Enviar el mensaje con el método Send c. Garantizar el fin de la conexión con el método Disconnect La siguiente rutina ilustra toda esta teoría: Coloco el puerto solo para ilustración, ya que el default es 25. Observa el uso de la variable ElDestinatario para agregar uno a uno, un par de destinarios a la lista dada por Recipients. Es de anotar que TIdEmailAddressItem está definido en la unidad IdEMailAddress, por tanto, debes agregarla a clausula Uses. El principal problema es determinar los parámetros correctos para las propiedades de TIdSMTP. Creo que ahí es donde estarán tús problemas. Bueno, espero que esto te ayude Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
ayuda Indy | hidal | C++ Builder | 1 | 27-08-2006 20:28:55 |
Ayuda con Indy | JerS | Varios | 1 | 07-10-2005 21:44:10 |
Ayuda con componentes Indy FTP | taita | Internet | 3 | 26-10-2004 10:09:45 |
Ayuda con las Indy por favor :'( | k4sp3r | Internet | 9 | 25-09-2004 20:37:55 |
Ayuda Indy | VolaRe | Internet | 1 | 13-09-2004 23:51:28 |
|