![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
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 Saludos! |
#3
|
|||
|
|||
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; // |
#4
|
||||
|
||||
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 ![]() Última edición por jachguate fecha: 25-02-2004 a las 03:48:19. Razón: resaltar el código |
#5
|
||||
|
||||
Menos mal, siempre estaís ahí, para corregirme...
![]() |
#6
|
||||
|
||||
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; Mensage.From.Address := fromAddress.Text; En la que yo asignaba el valor dado por el usuario.
__________________
Sitrico |
![]() |
|
|
![]() |
|