Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   smtp (https://www.clubdelphi.com/foros/showthread.php?t=7709)

Ester 24-02-2004 18:23:48

smtp
 
Muy buenas,

estoy utilizando los componentes indy para enviar mails via smtp, concretamente utilizo el idsmtp y el idmessage tal y como leí en algunos foros. Pues bien, mi problema es el siguiente: en algunas ocasiones los mails no se envian y no se por que motivo. Cuando lo pruebo yo misma des de el codigo fuente no tengo ningun problema, pero cuando son los usuarios que ejecutan algun proceso que envia un mail automaticamente, en ocasiones este mail no se envia. Justo despues del connect he puesto un mensaje de error por si no se puede conectar, pero los usuarios me comentan que nunca les ha salido el mensaje, por lo tanto parece que conectar si que conecta. Adjunto el codigo que utilizo por si a alguien se le ocurre algo para provar:

{lleno el mensaje (msg)}
smtp.Disconnect;
smtp.AuthenticationType:=atNone;
smtp.port:=25;
smtp.Host:='mi host';
smtp.Connect();
if not smtp.Connected then
frmrutinas1.mostrar_error(9,'ACC')
else
smtp.Send(msg);
smtp.Disconnect;

Grácias,

Ester

Nuria 24-02-2004 18:36:00

Hola ester!

Porque no intentas capturar el error cuando vas a conectar de esta manera :

Código:

  try
    smtp.Connect();
    smtp.Send(msg);
    smtp.Disconnect;
  except
    /// Aqui capturas las excepciones, osea los errores que te da,
    por ejemplo:
    on E: EIdSocketError do begin
      Showmessage('No se ha podido enviar el email.'+ #13 +
                          'Host desconocido o incorrecto.');
    end

Espero que te sirva de ayuda.

Saludos!

Julià T. 25-02-2004 02:49:45

sólo una pequeña correción
Código:

 
  try
    smtp.Connect();
    smtp.Send(msg);
    // smtp.Disconnect; si se produciera un error no podrias volver a conectar
  except
    /// Aqui capturas las excepciones, osea los errores que te da,
    por ejemplo:
    on E: EIdSocketError do begin
      Showmessage('No se ha podido enviar el email.'+ #13 +
                          'Host desconocido o incorrecto.');
    end
  if smtp.connected then smtp.Disconnect; //


jachguate 25-02-2004 03:45:22

Para ser exactos... si ocurre un error distinto de EIdSocketError tampoco se desconectaría... puesto que la excepción sigue saltantose el stack...

lo correcto, sería:

Código:

try
  smtp.Connect();
  try
    smtp.Send(msg);
  finally
    smtp.Disconnect; // no es necesario chequear si está conectado... pues se ejecuta
                        // solo si fue posible conectarse (y siempre que se haya conectado)
  end;
except
  // Aqui capturas las excepciones, osea los errores que te da,
  // por ejemplo:
  // capturará todas las excepciones, ocurridas durante la conexión, el envio del
  // mensaje y la desconección.
  on E: EIdSocketError do begin
    Showmessage('No se ha podido enviar el email.'+ #13 +
                        'Ha ocurrido el error de socket No. ' + IntToStr(e.LastError));
    // esto debido a que el error de sockets no puede darse solo porque
    // el host sea desconocido o incorrecto.
    // mas info siguiendo este enlace
end

Hasta luego.

;)

Nuria 25-02-2004 10:17:16

Menos mal, siempre estaís ahí, para corregirme... ;)

sitrico 25-02-2004 18:52:55

Bueno, he tenido el mismo problema (el email no se envía) y no aparece el error.

Uso el código:

Código:

Try
  If not(SMTP.Connected) then
      SMTP.Connect;
  SMTP.Send(Mensage);
  SMTP.Disconnect;
  Application.MessageBox('El Registro se Completo con exito','Atención',MB_Ok);
  ModalResult := mrOk;
Except
  Application.MessageBox('El Registro no pudo ser completado','Atención',MB_Ok);
  End;

Que no anida los dos Try como en el código de jachguate (cosa que voy a arreglar) pero lo que si descubri que el error se genera cuando se una una dirección de email invalida en la propiedad :

Mensage.From.Address := fromAddress.Text;

En la que yo asignaba el valor dado por el usuario.

VolaRe 20-03-2004 19:01:29

Strico como se si un mail es invalido.

Yo tengo un problema parecido, no me envia el mail y no se porque, ya eh provado capturando los errores incluso lo que dice jachgate lo de capturar el error en el socket, y na de na, te paso mi codigo haber si....

Código:

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    IdSmtp1.Connect;
    try
      // Envio el mensaje.
      IdSmtp1.Send(idMessage1);
    finally
      IdSmtp1.Disconnect;
    end;
    ShowMessage('Enviado Correctamente');
  except
    // Capturo algunas excepciones que pueden ocurrir
    ON E: EIdProtocolReplyError do begin
      ShowMessage('No se ha podido enviar el email.' + #13 +
          'Incorrecto el email o el usuario o la password.');
    end;
    on E: EFOpenError do begin
      ShowMessage('No se ha podido enviar el email.' + #13 +
          'Fichero Adjunto desconocido o erróneo.');
    end;
    on E: EIdSocketError do begin
      ShowMessage('No se ha podido enviar el email.'+ #13 +
          'Host desconocido o incorrecto. Ha ocurrido el error en el sochet nº ' + IntToStr(e.LastError));
    end
    else begin
      ShowMessage('Fallo en el envio de email');
      Raise;
    end;
  end;
  if IdSmtp1.Connected then IdSmtp1.Disconnect;
end;

El fallo que me indica es el ultimo, fallo en el envio de mail, y cuando pasa a raise me indica "Connection Closed Gracefully".

Haber si de una vez consigo hacer funcionar este componente, gracias.

Julià T. 21-03-2004 03:37:09

Hola Volare:

te falla la conexión

Código:

  try
    IdSmtp1.Connect;//falla aquí
    try
      // Envio el mensaje.
      IdSmtp1.Send(idMessage1);
    finally
      IdSmtp1.Disconnect;
    end;
    ShowMessage('Enviado Correctamente');
  except
    ...
  end;

para poderte conectar, necesitas:
Host: la dirección o el nombre de tu servidor de correo. ej tu_servidor.com
User: la cuenta de usuario. ej tu_cuenta_de_correo
Password: el pàssword del usuario. ej tu_password_de_correo

VolaRe 21-03-2004 11:45:07

Coño Juliá T. muchas gracias, casi me habeis tenido que dar un tiron de orejas para que me diera cuenta, yo pensaba que el host era la ip, por eso nunca lo ponia, y no la direccion del smtp.

Al leer este mensaje me ha entrado vergüenza y to, de lo burrico que he sido con esto.

Bueno gracias por vuestro tiempo.

DarkByte 21-03-2004 18:59:28

Suele pasar :) , hasta los grandes programadores se equivocan en las cosas mas tontas... Yo estube a punto de tirar un monitor hasta que me dí cuenta que estaba desenchufado xD


La franja horaria es GMT +2. Ahora son las 20:25:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi