Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-01-2015
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Smile Error al descargar emails con acentos

Hola amigos,

estoy intentando descargar correos de una cuenta de un servidor propio, y poder extraer cierta información de dichos correos, para lo cual conecto mediante un TIDPOP3 y descargo mediante un TIDMESSAGE, la descarga se realiza hasta aquí perfectamente. El problema viene al tratar de procesar los datos del mensaje, en donde los acentos aparecen de forma extraña (interrogación sobre rombo negro). No ocurre en todos los correos, los que el charset lo detecta y marca como UTF8 van perfectamente, pero los que el charset no lo detecta y lo deja vacio fallan.

Aqui pongo el código que utilizo para conectar y descargar:


Código Delphi [-]
procedure TLeerEmail.ProcessMail;
begin
  With Memo1, lines, IdMessage1 do begin
    Add(IdMessage1.Headers.Text);
    Add('CHARSET: '+IdMessage1.CharSet);
    add('Original ('+IdMessage1.ContentTransferEncoding+'): '+IdMessage1.Subject);
    add('');
    Application.ProcessMessages;
  end;
end;
function TLeerEmail.RetrieveMails(IdPop31: TIdPOP3): boolean;
var
  i, J:integer;
begin
  Result:=true;
  with IdPop31 do
    try
      J:=0;
      For i:= CheckMessages downto 1 do begin
         IdMessage1.Clear;
         RetrieveHeader(i, IdMessage1);   //Decargar la cabezera del correo
         processMail;                     //Procesar los datos del correo

         //se hacen solo 8 correos de ejemplo
         INC(J);
         if J>=8 then break;
      end; //For
    except
       On E:Exception do begin
          result:=false;
          MessageDlg(E.Message, mtError, [mbOK], 0);
       end;
    end;
end;
function TLeerEmail.DescargarEmails: boolean;
var
   i:longint;
begin
  result:=false;
  GetUserPassPop3;
  With IdPOP31 do
    try
      AutoLogin := True;
      Connect;                    // se conecta al servidor
      if not Connected then
        MessageDlg('No se ha podido conectar con el servidor.', mtError, [mbOK], 0)
      else
        try
          Result:=RetrieveMails(IdPop31); //Se descargan los emails
        finally
          if Connected then
            Disconnect;           //Se desconecta del servidor
        end;
     except
         On E:Exception do
           MessageDlg('DescargarEmails: Error al conectar con el servidor.', mtError, [mbOK], 0);
     end;
end;


Analizando mas a fondo el contenido del mensaje que falla, se ve que esta codificado en WINDOWS-1252,
pero por mas que he probado ha cambiar el CHARSET antes y/o déspues de leer el mensaje o convertir las cadenas con las funciones de conversión entre codificicaciones, no he
conseguido solucionar el problema.


Comento que los componentes INDY son la versión 10.6.0.4975 que se supone que tienen ya resuelto todo el tema de codificación para los distintos caracteres
y esto lo ejecuto sobre DELPHI XE4

Agradecería cualquier ayuda al respecto
Responder Con Cita
  #2  
Antiguo 09-01-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
bucanero,

Cita:
Empezado por bucanero
...estoy intentando descargar correos de una cuenta de un servidor propio...El problema viene al tratar de procesar los datos del mensaje, en donde los acentos aparecen de forma extraña...Analizando mas a fondo el contenido del mensaje que falla, se ve que esta codificado en WINDOWS-1252...ejecuto sobre Delphi XE4...


Te comento:

1- A partir de Delphi 9, la codificación de string por default es Unicode.

2- El codepage 1252 corresponde al tipo de string : AnsiString.

3- Pregunto : ¿Has probado mover el mensaje a una variable de tipo AnsiString?.

Revisa esta información:
Espero sea útil

Nelson.
Responder Con Cita
  #3  
Antiguo 09-01-2015
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Hola Nelson, gracias por responder tan rápido


Si, ya mire las opciones de conversión de tipos, pero no he obtenido ningún resultado. De hecho uno de los códigos que he probado para convertir a ANSI es este:


Código Delphi [-]
procedure convertir(texto:string);
type
  TWindows1252String = type AnsiString(1252);
var
  sW1252:TWindows1252String;

begin
...
  sW1252:=texto;
...
end;

Aqui pongo la parte del mensaje donde viene el asunto con el formato de codificacion


Código:
Subject: =?windows-1252?Q?Art=EDculo_n=2E=BA_251761373688=3A_Notificaci=F3n_de?=
 =?windows-1252?Q?_de_***?=
 =?windows-1252?Q?_=28user=40***=2E***=29?=

Buscando por google este problema, he encontrado varios enlaces antiguos anteriores al 2009 donde indican que este es un BUG de los componentes INDY para este tipo de codificación, pero no se si ha día de hoy andará ya resuelto.

Alguien que le pase algo similar y pueda indicar como lo ha solucionado

Un Saludo
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mandar emails con D4php!! verde_esmeralda PHP 14 29-03-2011 05:10:52
Error al descargar actualizacion de mi aplicacion sitrico Internet 2 13-07-2010 00:15:14
Emails, error de conexion en algunas PC nfrfabian Internet 1 19-09-2007 18:03:29
enviar emails jmlifi Varios 9 25-11-2005 22:16:37
Cadenas de emails santana Humor 1 06-09-2004 17:38:00


La franja horaria es GMT +2. Ahora son las 12:27:50.


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