Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   gmail e IMAP error (https://www.clubdelphi.com/foros/showthread.php?t=90968)

epuigdef 19-10-2016 00:13:14

gmail e IMAP error
 
Hola!

Hace un tiempo escribí un programa que leía el correo de gmail vía Indy e IMAP.

Acabo de rescatarlo, y veo que, sin haber tocado nada, no recibe el correo.

Estoy utilizando un TIdSSLIOHandlerSocketOpenSSL y un TIdIMAP4, configurados creo que correctamente (al menos, hace un año funcionaban con esta configuración)

La excepción aparece después de conectar, al seleccionar el mailbox:

Unable to execute command, wrong connection state;Current connection state: Authenticated.

Alguna idea al respecto?


Gracias por adelantado

Edu

AgustinOrtu 19-10-2016 03:56:26

Deberias poner el codigo

Hace no mucho he visto algun que otro hilo en donde tenian problemas con Indy + Gmail. Creo que la solucion era habilitando "aplicaciones no seguras" o algo asi desde el propio Gmail

Busca en los foros o sino revisa los hilos que aparecen abajo de todo

epuigdef 19-10-2016 08:08:31

Hola!

No he puesto el código porque he usado lo que aparece en todos los ejemplos que hay por internet, nada nuevo.

De hecho mi pregunta va más dirigida a saber si desde gmail se han aplicado cambios en la seguridad que han hecho que estas aplicaciones hayan dejado de funcionar.

El tema de permitir las aplicaciones no seguras ya lo tengo hecho, sin resultado

Gracias

Edu

Neftali [Germán.Estévez] 19-10-2016 09:50:25

Dependiendo del tiempo que tenga el programa sí que deberás cambiar cosas en la conexión.
Normalmente casi todos los servidores se han vuelto más restrictivos. Sin ver código el código que estás utilizando es difícil saber lo que hay que cambiar, pero si revisas los últimos códigos publicadops en el club (hay un hilo de no hace más de 2 semanas que hablaba sobre el tema) puedes compararlo con el tuyo.

epuigdef 19-10-2016 16:02:31

gmail e IMAP
 
Hola:

Simplificando, éste es el código que tengo:

Código Delphi [-]
function GetGmailMessageCount(const UserName, Password: string): Integer;
var
  IMAPClient: TIdIMAP4;
  OpenSSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  Result := 0;
  IMAPClient := TIdIMAP4.Create(nil);
  try
    OpenSSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    try
      OpenSSLHandler.SSLOptions.Method := sslvSSLv3;
      IMAPClient.IOHandler := OpenSSLHandler;
      IMAPClient.Host := 'imap.gmail.com';
      IMAPClient.Port := 993;
      IMAPClient.UseTLS := utUseImplicitTLS;
      IMAPClient.Username := UserName;
      IMAPClient.Password := Password;
      IMAPClient.Connect;
      try
        if IMAPClient.SelectMailBox('INBOX') then
          Result := IMAPClient.MailBox.TotalMsgs;
      finally
        IMAPClient.Disconnect;
      end;
    finally
      OpenSSLHandler.Free;
    end;
  finally
    IMAPClient.Free;
  end;
end;


Cristian MD 31-10-2016 14:42:33

Gracias por hacer la misma pregunta que iba a hacer, excelente aporte del foro ¡Gracias!

Tecnofacil 03-11-2016 20:59:55

Prueba con esto, a mi me funciono hace unos días aun.
Código Delphi [-]
procedure Tfpdfemail.btn_emailClick(Sender: TObject);
  // variables y objetos necesarios para el envío
  Var
    IdSSLIOHandlerSocket: TIdSSLIOHandlerSocketOpenSSL;
    IdSMTP: TIdSMTP;
    IdMessage: TIdMessage;
    IdText: TIdText;
    sAnexo, ruta: string;
begin
    // -- ENVIO POR CORREO --
   // instanciación de objetos
  IdSSLIOHandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create(Self);
   IdSMTP := TIdSMTP.Create(Self);
  IdMessage := TIdMessage.Create(Self);
   try
    // Configuración de protocolo SSL (TIdSSLIOHandlerSocketOpenSSL)
    IdSSLIOHandlerSocket.SSLOptions.Method := sslvSSLv23;
    IdSSLIOHandlerSocket.SSLOptions.Mode := sslmClient;
     // Configuración de servidor SMTP (TIdSMTP)

    // -- PARA GOOGLE --
       IdSMTP.IOHandler := IdSSLIOHandlerSocket;
       IdSMTP.UseTLS := utUseImplicitTLS;
       IdSMTP.AuthType := satDefault;
       IdSMTP.Port := 465;
       IdSMTP.Host := 'smtp.gmail.com';
       IdSMTP.Username := 'usuario@gmail.com';
       IdSMTP.Password := 'password';

     // Configuración del mensage (TIdMessage)
    IdMessage.From.Address := 'micorreo@dominio';
    IdMessage.From.Name := 'Mi Nombre';
    IdMessage.ReplyTo.EMailAddresses := IdMessage.From.Address;
    IdMessage.Recipients.Add.Text := 'destinatario1@dominio';
    IdMessage.Recipients.Add.Text := 'destinatario2@dominio';
    IdMessage.Recipients.Add.Text := 'destinatario3@dominio';
    //Se pueden agregar todas las cuentas de destino que se necesite
    IdMessage.Subject := 'Correo automático del Sistema';
    IdMessage.Encoding := meMIME;
    // Configuración del cuerpo de email (TIdText)
    IdText := TIdText.Create(IdMessage.MessageParts);
    IdText.Body.Add('No responda a este correo, se envía automáticamente desde el sistema.');
    IdText.Body.Add('Se adjunta pdf.');
    IdText.ContentType := 'text/plain; charset=iso-8859-1';
     // Opcional - Adjunto (TIdAttachmentFile)
    sAnexo := 'C:\pdf\Algo.pdf';
    if FileExists(sAnexo) then
    begin
      TIdAttachmentFile.Create(IdMessage.MessageParts, sAnexo);
    end;
     // Conexión y autenticación
    try
      IdSMTP.Connect;
      IdSMTP.Authenticate;
    except
      on E:Exception do
      begin
        MessageDlg('Error en la conexión o autenticación: ' +
          E.Message, mtWarning, [mbOK], 0);
        Exit;
      end;
    end;
     // Envio
    try
      IdSMTP.Send(IdMessage);
      MessageDlg('Correo enviado correctamente!', mtInformation, [mbOK], 0);
    except
      On E:Exception do
      begin
        MessageDlg('Error al enviar el correo: ' +
          E.Message, mtWarning, [mbOK], 0);
      end;
    end;
  finally
    // desconectar del servidor
    IdSMTP.Disconnect;
    // liberación de las DLL
    UnLoadOpenSSLLibrary;
    // liberación de objetos
    FreeAndNil(IdMessage);
    FreeAndNil(IdSSLIOHandlerSocket);
    FreeAndNil(IdSMTP);
  end;
end;

paul170185 25-01-2017 16:49:27

Hola que tal, he visto el código para envió, funciona correctamente, pero para recibir?, yo necesito recibir correos con archivos adjuntos pero no me desconecta y aparece el mismo error, alguien tiene algun ejemplo?


La franja horaria es GMT +2. Ahora son las 12:36:11.

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