| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
yao_13 Master


Registrado: 29 Jul 2003Mensajes: 226
|
Publicado: Jue 03 Sep, 2009 7:50 pm Asunto: Error al leer un Correo |
|
|
Buen día,
trabajo bajo BCB6 y uso los componentes Indy standard para enviar y recidir correo; pero al querer recibir , en la linea:
| Código: | IdPOP31->Retrieve(i,IdMessage2); |
Me envía el siguiente error:
EConvertError with Message 'Invalid Argument to date encode'
por lo que supongo y leo, es un error de le Fecha Hora, checo en el servidor como viene la fecha hora y viene de esta forma:
correos de la semana actual salen como : Wed 10:25 (como ejemplo)
y de semanas anteriores el formato es: 21.08.2009 11:02 (dd.mm.yyyy hh:mm)
No sé como solucionarlo.
Alguna ayuda?
Gracias de antemano. _________________ Sin pena, ni gloria |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 03 Sep, 2009 10:50 pm Asunto: |
|
|
Probablemente es porque la fecha no viene en el formato estándar utilizado por POP3. Poniendo el siguiente código en cualquier parte del programa puedes interceptar el momento antes de convertir la fecha y ver en que formato viene. También podrías usarlo para añadir tu propio código de conversión (al usar este código se pierde la rutina original de conversión):
| Código: | namespace Idglobal {
System::TDateTime __fastcall GMTToLocalDateTime(AnsiString S)
{
ShowMessage(S);
// Una función que puede serte útil aquí una vez corrijas
// el formato de entrada es: "StrInternetToDateTime"
return 0;
}
} | (Esto solo funciona si tenemos enlazados estáticamente los packages con el ejecutable. O sea:
Ir al menú: Project -> Options... Dentro de ese dialogo ir a la pestaña: "Packages". Y dentro de esa pestaña desmarcar el Checkbox: "Build with runtime packages")
En el siguiente enlace tienes el formato que deberían tener las fechas:
http://www.faqs.org/rfcs/rfc2822.html |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Vie 04 Sep, 2009 5:29 pm Asunto: |
|
|
Modificandolo un poco para no perder la rutina original de conversión:
| Código: | namespace Idglobalprotocols { // En Indy10 cambiar "Idglobal" por "Idglobalprotocols"
System::TDateTime __fastcall GMTToLocalDateTime(String S)
{
// Podemos ver el formato original en que viene
// la fecha en "S" y modificarla si es necesario
//...
TDateTime result = StrInternetToDateTime(S);
TDateTime offset = (S.Length() < 5) ? 0.0 : GmtOffsetStrToDateTime(S);
if (static_cast<double>(offset) < 0.0)
result += abs(offset);
else
result -= offset;
return result + OffsetFromUTC();
}
} |
|
|
| Volver arriba |
|
 |
yao_13 Master


Registrado: 29 Jul 2003Mensajes: 226
|
Publicado: Jue 17 Sep, 2009 5:27 pm Asunto: |
|
|
Muchas gracias _Leo... lo pondré en práctica.
Y perdón por responder hasta ahora, pero se presentaron urgencias.
Saludos. _________________ Sin pena, ni gloria |
|
| Volver arriba |
|
 |
|