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 02-05-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Errores en el envío de correos con TIdSmtp (Indy 9)

Estoy usando este código que utilizo habitualmente con BCB 6 e Indy 9.0.17, incluyendo las dll que indicais pro aquí algunos.
Código:
IdMessage1->From->Address = "administracion-socios@internautas.org";   //Remitente
IdMessage1->Subject = "Prueba de envío";
IdMessage1->Body->SetText("Esto es una prueba.");
IdMessage1->Recipients->Add();
IdMessage1->Recipients->EMailAddresses = "angelmatillacandas@gmail.com";      //Destinatario

IdSMTP1->Host = "mail.internautas.org";   //Servidor saliente
IdSMTP1->Username = <usuario>";   //Usuario
IdSMTP1->Password = "<clave>";   //Clave
IdSMTP1->Port     = 465;
IdSMTP1->AuthenticationType = atLogin;
IdSMTP1->IOHandler = IdSSLIOHandlerSocket1;

IdSSLIOHandlerSocket1->SSLOptions->Method = sslvTLSv1;
IdSSLIOHandlerSocket1->SSLOptions->Mode   = sslmClient;
try
{
     IdSMTP1->Connect();
     try
     {
          IdSMTP1->Send(IdMessage1);
     }
     catch(...)
     {
          ShowMessage("Se produjo un fallo durante el envío del mensaje");
     }
}
__finally
{
     ShowMessage("El mensaje se envió correctamente");
}

if (IdSMTP1->Connected())
     IdSMTP1->Disconnect();
Y al pasar por el método Connect me da este error:

No se ha cambiado nada en las especificaciones del servidor, pero no sé pro dónde agarrarlo.. He probado todos los valores posibles en SSLOptions->Method.
Responder Con Cita
  #2  
Antiguo 03-05-2016
Avatar de fredo
fredo fredo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Chile, Valparaiso
Posts: 318
Poder: 21
fredo Va por buen camino
SSL, tienes la libreria con el programa?
__________________
^_^

http://stna.cl
Responder Con Cita
  #3  
Antiguo 03-05-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por fredo Ver Mensaje
SSL, tienes la libreria con el programa?
En la carpeta dl ejecutable tengo las dos dll: libeay32 y ssleay32. O ¿te refieres a alguna otra librería?
Responder Con Cita
  #4  
Antiguo 03-05-2016
Avatar de fredo
fredo fredo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Chile, Valparaiso
Posts: 318
Poder: 21
fredo Va por buen camino
efectivamente al libeay32.dll y openssl.exe
__________________
^_^

http://stna.cl
Responder Con Cita
  #5  
Antiguo 04-05-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
He pasado a Indy 10

Bueno. Después de muchas idas y venidas he instalado los componentes de Indy 10, descargados desde https://indy.fulgan.com/ZIP/Indy10_5359.zip (vienen con el instalador para todas las versiones de Builder y Delphi). He modificado el código de la siguiente forma:
Código:
IdMessage1->From->Address = "administracion-socios@internautas.org";   //Remitente
IdMessage1->Subject = "Prueba de envío";
IdMessage1->Body->SetText("Esto es una prueba.");
IdMessage1->Recipients->Add();
IdMessage1->Recipients->EMailAddresses = "angelmatillacandas@gmail.com";      //Destinatario

IdSSLIOHandlerSocketOpenSSL1->PassThrough = true;
IdSMTP1->IOHandler = IdSSLIOHandlerSocketOpenSSL1;
IdSMTP1->Username                  = "<usuario>";
IdSMTP1->Password                  = "<clave>";
IdSMTP1->Host                      = "mail.internautas.org";
IdSMTP1->AuthType                  = satDefault;
IdSMTP1->Port                      = 25;
IdSMTP1->Connect();
IdSMTP1->SendCmd("STARTTLS");
IdSSLIOHandlerSocketOpenSSL1->PassThrough = false;
IdSMTP1->Authenticate();
IdSMTP1->Send(IdMessage1);
Ahora el error que se muestra es este otro:

Y en la carpeta del ejecutable están las librerías SSL
Responder Con Cita
  #6  
Antiguo 04-05-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por fredo Ver Mensaje
efectivamente al libeay32.dll y openssl.exe
Cita:
Empezado por Angel.Matilla Ver Mensaje
En la carpeta dl ejecutable tengo las dos dll: libeay32 y ssleay32. O ¿te refieres a alguna otra librería?
Son los ficheros:
  • ssleay32.dll
  • libeay32.dll

Revisa porque hay diferentes versiones según el sistema (32/64 bits).

Revisa los parámetros que necesitas para conectarte. Te lo digo porque estoy con el mismo tema y he tenido que instslar la versión 10 de las Indy, porque según la autentificación del servidor, no te va a servir con la versión 9, que es la que viene por defecto en Delphi/BCB 6/7.

Revisa este link: http://www.indyproject.org/kb/index....ststarttls.htm
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 04-05-2016 a las 14:41:19.
Responder Con Cita
  #7  
Antiguo 04-05-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Revisa porque hay diferentes versiones según el sistema (32/64 bits).

Revisa los parámetros que necesitas para conectarte. Te lo digo porque estoy con el mismo tema y he tenido que instslar la versión 10 de las Indy, porque según la autentificación del servidor, no te va a servir con la versión 9, que es la que viene por defecto en Delphi/BCB 6/7.

Revisa este link: http://www.indyproject.org/kb/index....ststarttls.htm
Gracias por contestar Neftalí. Me estoy volviendo loco porque no sé, o no acabo de comprender, como obtener esas dos librerías. Tengo instalado W7 64 bits y he instalado Indy 10. He encontrado un montón de sitios donde teóricamente pueden descargarse ambos ficheros en la versión de 64 bits; incluso hay una dirección en indyproject (https://www.openssl.org/source/openssl-1.0.2h.tar.gz) desde la que deberían poderse bajar ambos. Según esa web la última versión estable es la 1.0.2 pero el fichero que hay para mi es un mundo desconocido y no sé como meterle mano. Os agardecería que me ayudarais.
Responder Con Cita
  #8  
Antiguo 04-05-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Las bibliotecas se descargan de http://indy.fulgan.com/SSL/ y, específicamente, debería servirte ésta, que es la de Windows 64bits.

LineComment Saludos
Responder Con Cita
  #9  
Antiguo 04-05-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Las bibliotecas se descargan de http://indy.fulgan.com/SSL/ y, específicamente, debería servirte ésta, que es la de Windows 64bits.

LineComment Saludos
Gracias roman. Efectivamente; mientras contestabas encontré esa dirección y descargué el enlace que me indicas. Las copié y al probar me indicó que faltaba otra dll (vsinit.dll); la busqué y la descargué pero me sigue dando el mismo error de antes. No obstante, en esa dirección está también la última versión estable en openssl-1.0.2h-x64_86-win64.zip.
Responder Con Cita
  #10  
Antiguo 04-05-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Qué raro! Esa biblioteca no parece tener nada que ver con Indy o SSL. De todas formas, si no mal recuerdo, en el visor de eventos de Windows puedes ver más detalles de porqué no se pudo cargar una DLL. Quizá te de alguna idea.

LineComment Saludos
Responder Con Cita
  #11  
Antiguo 05-05-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Unhappy

¡No hay manera! No soy capaz de que funcione. He eliminado las dll de la evsión 1.0.2h, la otra que comentaba ayer (vsinit.dll), he vuelto a descargar las que me indica roman, he vuelto a compilar el proyecto y sigue saliendo el mismo error de que no puede cargar. Estoy desesperado porque me urge darle solción a este problema; tengo una aplicación parada por no poder enviar correos.

Por si podéis ayudarme de alguna forma en el archivo adjunto está el proyecto. Está hecho en BCB 6 con Indy10 y usando las dll de openssl-0.9.8r-x64_86-win64-rev2.zip
Archivos Adjuntos
Tipo de Archivo: rar Projects.rar (3,7 KB, 2 visitas)
Responder Con Cita
  #12  
Antiguo 05-05-2016
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.082
Poder: 18
juanelo Va por buen camino
Mira y aunque no lo creas (bueno si lo creerás porque te esta pasando) me pasa exactamente lo mismo, aunque en mi caso no es siempre, y no he logrado detectar las circunstancias que ocasionan el error.
Pero como tu, ya me tenia loco y habia que dar una solucion al problema (al cliente), y esto es lo que hice, nada elegante ni soluciona el problema, pero si que funciona.
Código Delphi [-]
....
// Conectamos con el servidor SMTP
  while(Intento < 2)
  {

    try
    {
      try
      {
        Application->ProcessMessages();
        if(Barra != NULL)
          Barra->Panels->Items[0]->Text="Conectando ... ";

          if(UsaSTARTTLS)
            SMTP->Connect(IdTimeoutDefault);
          else
            SMTP->Connect();
            
          if(UsaSTARTTLS && SMTP->SendCmd("STARTTLS", 220) == 220)// se coloca PassThrough a false
            SSL->PassThrough = false;
            
          if(SMTP->Connected())
          {
            Application->ProcessMessages();

            if(UsaSTARTTLS)
              SMTP->Authenticate();
            if(Barra != NULL)
              Barra->Panels->Items[0]->Text="Enviando correo ... ";
                SMTP->Send(Mensaje);
            Application->ProcessMessages();
            if(Barra != NULL)
              Barra->Panels->Items[0]->Text="Desconectando ... ";
                SMTP->Disconnect();
            Application->ProcessMessages();
            if(Barra != NULL)
              Barra->Panels->Items[0]->Text="Correo Enviado ... ";

                if(EsFactura || EsCPRN)
                  MarcaFacturaEnviadaPorMail(CveDocto,EnviaXML,-1,TipoDoc);
          }
          Intento=2;
          PuedeCerrar=true;
      }
      catch(Exception &e)
      {
        Que=false;
        if(e.Message.AnsiPos("load") == 0)  // Por error de Indy
        {
          Intento=2;
          Application->ProcessMessages();
          Que=false;
          if(Barra != NULL)
           Barra->Panels->Items[0]->Text="Error en el envio";
          Application->MessageBox(e.Message.c_str(),"Error",MB_OK);
        }
        else
          Intento++;

        PuedeCerrar=false;
      }
    }
    __finally
    {
      if(SMTP->Connected())
        SMTP->Disconnect();       
      }   
    }
  }

Basicamente lo que se hace es cachar el error de "Load ..." e intentar nuevamente, lo que me di cuenta es que solo una vez lanza ese error, las siguientes no lo hace (si no cierras la aplicacion).
Espero te ayude al menos a darle solucion al cliente, ya luego veremos de que se trata.

NOTA: mi proyecto es tambien BCB6 pero con Indy 9.0.14
__________________
Ya tengo Firma!
Responder Con Cita
  #13  
Antiguo 06-05-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por juanelo Ver Mensaje
Mira y aunque no lo creas (bueno si lo creerás porque te esta pasando) me pasa exactamente lo mismo, aunque en mi caso no es siempre, y no he logrado detectar las circunstancias que ocasionan el error.
Pero como tu, ya me tenia loco y habia que dar una solucion al problema (al cliente), y esto es lo que hice, nada elegante ni soluciona el problema, pero si que funciona.
Gracias por la respuesta; lo de la elegancia, si funciona, como queda en segundo plano. Sólo una pregunta: Tienes en varios sitios supongo que una variable UsaSTARTTLS; ¿de dónde toma el valor?
Responder Con Cita
  #14  
Antiguo 06-05-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Bueno. Después de muchas idas y venidas, de estar a punto de mandar todo a hacer puñetas me ha funcionado. En una aplicación que tengo instalada en el PC vienen las dos librerías dichosas ssleay32.dll y libeay32.dll, que venían con el programa cuando se instaló.

Ya desesperado, por aquello que en el peor de los casos no iba a funcionar tampoco, las copié en la carpeta y ha salido arreando de maravilla. Según las fichas de propiedades de ambos ficheros se trata de la versión 1.0.0d.
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
?Envio de correos ? jasmad Lazarus, FreePascal, Kylix, etc. 16 02-10-2012 16:45:02
Error al enviar correos con TIdSMTP RaulChemical Internet 1 05-03-2008 18:15:46
Detener envío de e-mail con TIdSMTP gluglu Internet 1 18-05-2007 18:13:10
Envio de Correos Masivo Esau Internet 2 10-04-2007 02:46:11
Envio de archivos adjuntos con TIdSmtp murci Internet 3 14-02-2007 14:27:02


La franja horaria es GMT +2. Ahora son las 21:19: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
Copyright 1996-2007 Club Delphi