Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-06-2012
Avatar de kapcomx
kapcomx kapcomx is offline
Miembro
 
Registrado: jun 2007
Ubicación: Puebla México
Posts: 350
Poder: 17
kapcomx Va por buen camino
como capturar una excepcion al enviar mail smtp indy gmail

Que tal Compañeros, Un saludo a todos los que forman parte de este gran Foro, Pues nuevamente acudo a ustedes con un problema, pues resulta que donde trabajo tenia un programa que enviaba archivos de pedido a los clientes usaba idsmtp y idmessage y funcionaba todo muy bien lo tenia configurado para que se enviara de un servidor muy especifico de la empresa, pero me pidieron que lo cmabiara para que se pudiera enviar desde cualquier cuenta de gmail.

buscando en el Foro encontre un excelente ejemplo de el compañero Roman, el cual me funciona muy bien, el único detalle que tengo es que si al momento de enviar el correo me pide una contraseña, si la escribo correctamente no hay problema, pero si es erronea me salta un mensaje de error (el cual si estuviera en español seria perfecto).

project my_proyecto raised exception class EidSMTPReply error with message 'Username and password not accepted' . learn more at

y me da una liga de ayuda de gmail.

me gustaria saber como cachar esa excepcion para en lugar de ese mensaje pudiera poner uno propio.
lo he intentado asi pero no me funciona como quiero por que primero sale el mensaje mencionado y luego el mio.

Código Delphi [-]
procedure Tfrmenviaproveedor2.btnEnviarCorreoClick(Sender: TObject); 
var 
  Password: String; 
  filename: String; 
begin 
  filename:= ed_archivo.Text; 
  idMessage.Clear; 
  idMessage.FromList.EMailAddresses := 'lacuentadegmail@gmail.com'; 
  idMessage.Recipients.EMailAddresses := ed_mail.Text; 
  idMessage.Subject := 'Confirmar Existencias'; 
  idMessage.AttachmentTempDirectory := filename; 
  TIdAttachmentfile.create(idMessage.MessageParts,filename); 
  mmobserva.Lines.Add('Mensaje de Correo enviado desde Sistema Informatico XXXXXXX.'); 
  idMessage.Body.AddStrings(mmobserva.Lines); 
  if InputQuery('Comercializadora XXXXXX', 'Contraseña del servidor', Password) then 
  begin 
    idSMTP.Username := 'lacuentadegmail@gmail.com'; 
    idSMTP.Password := Password; 
    btnEnviarCorreo.Enabled := false; 
    try 
      if not idSMTP.Connected then 
        idSMTP.Connect; 
      idSMTP.Send(IdMessage); 
    except 
      showmessage('Ocurrio un error al Intentar enviar el Correo, Verifique el password indicado'); 
      rebote:=true; 
      btnEnviarCorreo.Enabled := true; 
    end;
  end; 
end;

De antemano les agradezco a quienes puedan ayudarme

Saludos...
__________________
un tipo al cual la sociedad no le tiene el mas mínimo respeto no puede ser presidente....

Última edición por Casimiro Notevi fecha: 29-06-2012 a las 00:09:06.
Responder Con Cita
  #2  
Antiguo 29-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por kapcomx Ver Mensaje
lo he intentado asi pero no me funciona como quiero por que primero sale el mensaje mencionado y luego el mio.
Eso será si lo ejecutas desde delphi, porque si lo haces desde fuera entonces sólo saldrá tu mensaje
Responder Con Cita
  #3  
Antiguo 29-06-2012
Avatar de kapcomx
kapcomx kapcomx is offline
Miembro
 
Registrado: jun 2007
Ubicación: Puebla México
Posts: 350
Poder: 17
kapcomx Va por buen camino
Genio

Mi buen Casimiro, eres un Genio...
Ya me habia pasado algo así una vez. jejejejeje que cosas....
a veces haces lo más dificil y te atoras en lo mas facil....

Saludos...

P.D. Para la proxima prometo agotar esa posibilidad antes de preguntar jejejeje....
__________________
un tipo al cual la sociedad no le tiene el mas mínimo respeto no puede ser presidente....
Responder Con Cita
  #4  
Antiguo 29-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por kapcomx Ver Mensaje
Mi buen Casimiro, eres un Genio...
Qué más quisiera yo, me pediría 3 deseos
Responder Con Cita
  #5  
Antiguo 04-08-2013
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Hola muchachos, vine a revivir este fantasma, esto mismo me pasa a mi,
y eso mismo que el amigo kapcomx queria hacer tambien me gustaria hacerlo,
capturar la excepcion y en vez que salga ese error en ingles, aparezca algo que yo coloque

ejemplo mi codigo de envio:

Código Delphi [-]
procedure TPantallaPrincipal.EnviarMensaje(host:string;nombre:string;password:string;port:integer;desde:string  ;hasta:string;asunto:string;cuerpo:string;adjunto:string);
Var
  Adjuntar:TIdAttachmentFile;
begin
  Adjuntar:= nil;
  IdMessage1.Clear;
  idMessage1.FromList.EMailAddresses := Desde;
  idMessage1.Recipients.EMailAddresses := Hasta;
    idMessage1.Subject := Asunto;
  idMessage1.Body.Add(Cuerpo);
     idSMTP1.Username := Nombre;
  idSMTP1.Password := Password;
  if Adjunto <> '' then
    begin
      if FileExists(Adjunto) then
        Adjuntar:=TIdAttachmentFile.Create(idMessage1.MessageParts, Adjunto);
        Adjuntar.DisplayName := Adjunto;
        Adjuntar.FileName := Adjunto;
    end;
  if idSMTP1.Connected then
    begin
      idSMTP1.Disconnect;
      idSMTP1.Connect;
    end
  else
    begin
      idSMTP1.Connect;
    end;

  try
    idSMTP1.Send(IdMessage1);
    ShowMessage('Mensaje enviado exitosamente!');
  except
    ShowMessage('Error al enviar mensaje!');//Esto nunca se muestra
  end;

  if Assigned(Adjuntar) then
    begin
      Adjuntar.Free;
      Adjuntar:= nil;
    end;
ENd;


Mas especificamente aqui:

Código Delphi [-]
  try
    idSMTP1.Send(IdMessage1);
    ShowMessage('Mensaje enviado exitosamente!');
  except
    ShowMessage('Error al enviar mensaje!');//Esto nunca se muestra cuando salta la excepcion de timeout por ejemplo
  end;

que creen que pueda ser?
Saludos
__________________
El Conocimiento se puede compartir, pero la Experiencia es totalmente Intransferible.
Responder Con Cita
  #6  
Antiguo 04-08-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola martini002, este tema no tiene nada que ver con el tratado en este hilo.
De todas formas, no has explicado realmente el problema que tienes

O sea, cuando envía el email te sale el mensaje "mensaje enviado exitosamente" y cuando salte una exception saldrá "error al enviar el mensaje".

El problema es que tienes que tratarlo de otra forma, idSMTP1.Send(idmessage1) debe devolver un valor que indica si ha sido enviado el mensaje o si ha habido algún error. Es ese valor el que debes tratar.
Ya que tal y como lo tienes ahora mismo, el mensaje se envía (mejor dicho, se ejecuta idsmtp.send sin error) y nunca saltará la exception. Incluso aunque no se haya podido enviar el mensaje.

Última edición por Casimiro Notevi fecha: 04-08-2013 a las 10:34:19.
Responder Con Cita
  #7  
Antiguo 05-08-2013
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Hola Casimiro,

Entiendo lo que dices, la cuestion es que no se como hacer para que devuelva un valor el idSMTP1.Send(IdMessage1);
El correo se envia exitosamente, solo que cuando no hay conexion salta la excepcion de timeout
no quiero que salte esa excepcion sino que siga intentando hasta que se conecte, o por lo menos hasta un numero determinado
de intentos, probe colocar algo mas en el except pero realmente desconozco mucho el uso correcto del try
y por mas que he leido no he comprendido exactamente.


Código Delphi [-]
try
    idSMTP1.Send(IdMessage1);
    ShowMessage('Mensaje enviado exitosamente!');
  except
     on E: Exception do
        ShowMessage('Error al enviar mensaje!');//Esto nunca se muestra cuando salta la excepcion de timeout por ejemplo    
  end;
__________________
El Conocimiento se puede compartir, pero la Experiencia es totalmente Intransferible.
Responder Con Cita
  #8  
Antiguo 05-08-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ahora no tengo un delphi a mano, pero haz una búsqueda por los foros, encontrarás código que puede servirte, ejemplo:
http://www.clubdelphi.com/foros/show...t=idSMTP1.Send
Responder Con Cita
  #9  
Antiguo 05-08-2013
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Gracias amigo Casimiro, pero con el envio de email va bien todo,
la cuestion es capturar la excepcion, eso es lo que intento hacer
por eso respondi a este hilo
__________________
El Conocimiento se puede compartir, pero la Experiencia es totalmente Intransferible.
Responder Con Cita
  #10  
Antiguo 05-08-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pero si el envio va bien entonces no salta ninguna excepción.
Responder Con Cita
  #11  
Antiguo 06-08-2013
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Salta la excepcion cuando no hay conexion,
y eso es lo que me gustaria capturar
para ejecutar un par de acciones
__________________
El Conocimiento se puede compartir, pero la Experiencia es totalmente Intransferible.
Responder Con Cita
  #12  
Antiguo 06-08-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Entonces, si salta la excepción, ¿cuál es el problema?
Responder Con Cita
  #13  
Antiguo 07-08-2013
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
LOL, no me entiendes

Código Delphi [-]
try
    idSMTP1.Send(IdMessage1);
    ShowMessage('Mensaje enviado exitosamente!');
    
    //hasta aqui perfecto, pero cuando no exista conexion a internet
    //saltara la excepcion, entonces quiero que siga intentando hasta que halla conexion a internet
    //y entonces pueda enviar el correo
    //pero no quiero que cuando no exista conexion a internet salte un mensaje
    //porque estas son tareas de mantenimiento y no deber interrumpir la interfaz

  except
     on E: Exception do

        //la cuestion es que cuando salta la excepcion no toca esta linea,
        //por eso escribo aqui, a ver como saben ustedes capturar esto :/

        ShowMessage('Error al enviar mensaje!');//Esto nunca se muestra cuando salta la excepcion de timeout por ejemplo    
  end;
__________________
El Conocimiento se puede compartir, pero la Experiencia es totalmente Intransferible.
Responder Con Cita
  #14  
Antiguo 07-08-2013
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola,

Podrías hacer una función que se encargue de enviar el correo y manejar la excepción y cada vez que falle reintentar el envío.

algo así:
Código Delphi [-]
const
  MaxIntentos = 5;

..

function EnviarCorreo(var CanIntentos : Byte) : Boolean;
begin
  try
    //Codigo para envio
    result := true;
  except
    if CanIntentos < MaxIntentos then
      result := false
    else
      raise exception.create('Mensaje de error');
  end;
end;

..

//y dentro de tu función de envío cambiar el simple send por algo asi...

procedure TuFuncionDeCorreo;
  var
    CanIntentos : Byte;
begin
  
  ..
  
  CanIntentos := 0;
  while not EnviarCorreo(CanIntentos) do
    Inc(CanIntentos);

  ..

end;
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #15  
Antiguo 07-08-2013
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Gracias Movorack,

me parece una solución buena,
dejame intentar hacer algo con eso y te cuento
como me va.

Saludos
__________________
El Conocimiento se puede compartir, pero la Experiencia es totalmente Intransferible.
Responder Con Cita
Respuesta



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
Enviar Email con Indy 10 y GMail ssl camino Internet 7 01-10-2012 21:58:25
Enviar mensaje desde gmail con Indy 10 axelafonso Internet 3 13-01-2012 18:11:39
Enviar correo con SMTP de GMAIL via INDY 10 (idSMTP) lpedrazzi Internet 4 31-12-2006 22:30:26
Enviar mail usando SMTP pero no OUTLOOK brandolin Internet 2 31-01-2006 03:32:30
Enviar mail con Gmail Sotrono Internet 2 17-04-2005 21:19:05


La franja horaria es GMT +2. Ahora son las 22:10:10.


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