Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problemas de vez en cuando con IdSMTP

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problemas de vez en cuando con IdSMTP Responder citando

Hola a todos,

Tengo una aplicación que envía un fichero zip adjunto a través de IdSMTP, el 90% de la veces va bien y no da problemas, pero de vez en cuando peta, se queda al 80% de envió o al 50% y da un error, otras veces al conectar da otro error diferente, no se la razón pero la cuestión es que no va perfecto y algunas veces falla.

Suele pasar más cuando el fichero es muy grande, cuando pasa de 8 o 10 megas, pero a veces también pasa sin que sea tan grande y otras veces el fichero es grande y lo envía sin problemas.

Tengo el Builder 6, sabéis a que se puede deber? puede ser el timeout?, el tamaño del buffer? no se, se os ocurre algo? o que esta versión tenga algún fallo o algo así?

Os a pasado a vosotros?

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Tiene toda la pinta de ser más un problema de la conexión que del propio IdSmtp. ¿Has probado a trocear el fichero en variso?
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Trocearlo en varios???

Como??? Habria forma de hacerlo en trozos y que luego se junten o algo asi? o te refieres simplemente a hacer 2 o 3 ZIP normales en vez de uno?

Eso ayudaría, pero ten en cuanta que no siempre depende del tamaño del fichero a veces falla teniendo un fichero no demasiado grande, aunque si debe de influir la verdad.

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

No sé como estarás generando el fichero comprimido, pero normalmente los compresores te permiten decirles que el fichero de salida no sobrepase determinado tamaño y se generen tantos ficheros como haga falta. Cuando yo tengo que comprimir, lo hago desde programa con ZipUtils y me funciona bastante bien.

Por otra parte, ¿cómo estás usando el componente? Al prinicipio de usarlo yo para enviar una documentación conectaba y desconectaba para CADA UNO de los envíos dentro del bucle y muchas veces me daba problemas porque no le daba tiempo a ejecutar los cambios; ahora lo conecto ANTES de empezar a enviar y lo desconecto DESPUÉS de leer todos los registros.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Esto ultimo que dices creo que es lo mejor.

Conecto y desconecto para cada cosa que hago, voy a probar lo que dices, seguro que así funciona mucho mejor.

Ya te contare.

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Angel,

Estoy haciendo pruebas, a ver que te parece.

Que seria mejor, al entrar en la aplicación conectar y hasta que no salga de ella no desconectar, o conectar y desconectar a cada mensaje que envío.

Por que luego están las opciones de comprobar correo, descargar correo y borrar correo, esas las podría poner en una sola conexión y el envío en otra, o paso de todo y hago una sola conexión al entrar??

El problema es que esa cuenta de correo para envío la utiliza mucha gente, el que ya la tenga alguien abierta uno de los usuarios afectaría si una segunda o tercera persona quiere abrirla?

Para el POP no hay problema por que cada uno tiene la suya, el problema es para el SMTP que esa si la tienen todos igual.

Vaya charla jajaja un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Te explico como lo hago yo. Te he puesto el código que uso para mandar una serie de avisos a gente de una lista. Enviar es un TIdSmtp, Correo es un TIdMessage y el texto del mensaje está guardado en una tabla para poder personalizarlo.
Código:
try
{
     Enviar->Connect(5000);
}
catch(...)
{
     ShowMessage("No está disponible la conexión a\r\n" + AnsiString(cServidor));
     Enviar->Disconnect();
     return;
}

lError = false;

for (nItem = 0; nItem <fSelSoc>Listado->Items->Count; nItem ++)
{
     if (!fSelSoc->Listado->Items->Item[nItem]->Checked)
          continue;

     Query->Close();
     Query->ParamByName("Usuario")->AsString = fSelSoc->Listado->Items->Item[nItem]->Caption;
     Query->Open();

     nCuota  = 0;
     dIniPer = Query->FieldByName("F_renov")->AsDateTime;
     dFinPer = dIniPer + 1;
     while (dFinPer < Date())
          dFinPer = IncMonth(dFinPer, 12);

     while (dIniPer.FormatString("yyyy") <dFinPer>ClearBody();
     Correo->MessageParts->Clear();
     Correo->Recipients->Clear();

     Correo->Subject = "Socio núm. " + FormatFloat("###,##0", Query->FieldByName("Socio")->AsInteger) + " - " + qAviso->FieldByName("Concepto")->AsString;

     Correo->Recipients->Add();
     Correo->Recipients->EMailAddresses = Trim(Query->FieldByName("Usuario")->AsString) + "@internautas.org";
     if (!Query->FieldByName("Email")->AsString.IsEmpty())
          Correo->CCList->EMailAddresses = Trim(Query->FieldByName("Email")->AsString);

     Correo->Body->Text = qAviso->FieldByName("Mensaje")->Value;
     Correo->Body->Text = StringReplace(Correo->Body->Text, "[SX]"        , iif(Query->FieldByName("Sexo")->AsInteger == 1, "a", "o"), oReplace);
     Correo->Body->Text = StringReplace(Correo->Body->Text, "[FECHADIA]"  , Date().FormatString("dd/mm/yyy"), oReplace);
     Correo->Body->Text = StringReplace(Correo->Body->Text, "[FECHARENOV]", Query->FieldByName("F_renov")->AsDateTime.FormatString("dd/mm/yyyy"), oReplace);
     Correo->Body->Text = StringReplace(Correo->Body->Text, "[IMPORTE]"   , FormatFloat("##0.00' EUR'", nCuota), oReplace);
     Correo->Body->Text = StringReplace(Correo->Body->Text, "[EMAIL]"     , cEmail, oReplace);
     Correo->Body->Text = StringReplace(Correo->Body->Text, "[AI ADMON]"  , cNombre, oReplace);
     Correo->Body->Text = StringReplace(Correo->Body->Text, "[AI WEB]"    , cWeb, oReplace);
     try
     {
          Enviar->Send(Correo);
     }
     catch (Exception *Exc)
     {
          lError = true;
     }
}
Enviar->Disconnect();

Antes lo que hacía era cada vez que iba a ejecutar Enviar->Send conectaba y desconectaba el servidor, pero eso era muy lento ya demás hacía que se perdieran mensajes. Ahora lo que hago es conectar el servidor ANTES de empezar a enviar y lo desconecto DESPUÉS del último envío; no lo dejo permanentemente conectada precisamente para evitar choques entre usuarios.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Vale,

Voy a probar y te cuento, seguro que el estar conectando y desconectando todo el rato es lo que me da errores de vez en cuando.

A ver que tal me sale.

Gracias por todo.

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Angel cual version de Indy usas? la que esta con Builder 2006 ?

Llevo semas con eso del correo y no le doy
la automatizacion con oputlook nome sirve debido a la molesta pregunta del usuario
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Estoy usando la versión 9 sobre Builder 5. Lo que yo hago es al arrancar la aplicación declarar el usuario y la password, si hace falta, en el TIdSMTP:
Código:
IdMessage1->From->Address = cEmail;
IdMessage1->From->Name    = cTitular;
IdMessage1->Organization  = cTitular;
IdSMTP1->Host           = cServidor;
IdSMTP1->Username       = cUsuCor;
if (!AnsiString(cClave).IsEmpty())
{
     IdSMTP1->AuthenticationType = atLogin;
     IdSMTP1->Password           = AnsiString(cClave);
}

Las variables que uso (cTitular, cServidor, etc.) las guardo en un fichero ini, pero al enviar mensjes no me pide ni usuario ni password.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Me refiero a que servidor smtp usas?

Con godaddy (secureserver.net)
con yahoo.com.mx
con gmail.com

no funciona pr que tiene autentificacion, conoces alguno gratuito que no lo tenga ..o aun que sea de paga..no importa

Me urge que mi sistemas envien emails
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Touchsoftwares escribió:
Me refiero a que servidor smtp usas?

Con godaddy (secureserver.net)
con yahoo.com.mx
con gmail.com

no funciona pr que tiene autentificacion, conoces alguno gratuito que no lo tenga ..o aun que sea de paga..no importa

Me urge que mi sistemas envien emails

Hola Gabriel. Vamos a ver: en cada instalaciónse define el servidor. Por ejemplo, si usas Gmail quedaría así:
Código:
IdMessage1->From->Address = <midreccion>;
IdMessage1->From->Name    = "Ángel Matilla Candás";
IdMessage1->Organization  = "Ángel Matilla Candás";
IdSMTP1->Host           = "smtp.googlemail.com";
IdSMTP1->Username       = <miusuario>;
IdSMTP1->Port           = 465;   // Esta línea se me había olvidado
if (!AnsiString(cClave).IsEmpty())
{
     IdSMTP1->AuthenticationType = atLogin;
     IdSMTP1->Password           = <miclave>;
}

Los valores que van en Address, Name, UserName y demás los tengo guardados en un fichero ini que cargo al arrancar el programa. A mi me funciona, y Gmail precisa autentificación.

Espero que te sirva.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Me dice

"530 SMTP authentication is required"
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

¿Le has puesto el método de autentificación?
Código:
IdSMTP1->AuthenticationType = atLogin;
IdSMTP1->Password           = <miclave>;

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Touchsoftwares escribió:

no funciona pr que tiene autentificacion, conoces alguno gratuito que no lo tenga ..o aun que sea de paga..no importa

Me urge que mi sistemas envien emails


si no quieres complicarte mucho igual te sirve montar un smtp en local.

de vez en cuando uso el "Easy SMTP Server".

creo que el autor lo tiene un poco abandonado, pero es este:

http://www.softfolder.com/easy_smtp_server.html
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.