Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Enviar Mail con Indy + mostrar avance progressbar (https://www.clubdelphi.com/foros/showthread.php?t=37461)

amadis 14-11-2006 13:43:58

Enviar Mail con Indy + mostrar avance progressbar
 
Como andan Gente!

Estoy intentando mandar mail desde un simple programa, con un codigo que saqué de un hilo

Código Delphi [-]
uses
   IdSMTP, IdMessage;
   
 procedure TForm1.Button1Click(Sender: TObject);
 var
   smtp: TIdSMTP;
   mail: TIdMessage;
 begin
   smtp := TIdSMTP.Create(Self);
   mail := TIdMessage.Create(Self);
   
   with smtp do
   begin
     Port := 25;
     Host := 'smtp.servidorcorreo.es';
     Username := '';
     Password := '';
   end;
   
   with mail do
   begin
     Recipients.Add;
     Recipients[0].Name := 'destinatario';
     Recipients[0].Address := 'correo@destinatario.com';
     From.Name := 'remitente';
     From.Address := 'correo@remitente.com';
     Subject := 'Asunto del correo';
     Body.Text := 'Cuerpo del correo';
   end;
   
   TIdAttachment.Create(mail.MessageParts, 'C:\adjunto.txt');
   
   smtp.Connect(30000);
   try
     try
       smtp.Send(mail);
     except
       on E: Exception do
         ShowMessage(E.Message);
     end;
   finally
     if smtp.Connected then
       smtp.Disconnect;
   end;
 
   mail.Free;
   smtp.Free;

Eso funciona bien pero cuando envio un adjunto de mas de 100kb
el programa tarda en enviarlo y si por ej enviara un archivo de 500kb
el programa deja de responder por unos 3 minutos y aparenta estar colgado.

Es posible anexar a ese codigo un PROGRESSBAR? que avance junto con el envio del mail?
Y que concida, porque yo no se cuanto va a tardar ese mail en enviarse.

Entonces de esa forma la persona que este enviando el mail sabría cuanto
debe esperar y tendria mejor aspecto el programa.
end;

oscarnoe 14-11-2006 13:57:23

Hola amadis,

Coloca un idantifreeze en el form, ademas deberias usar los eventos onStatus (para comprobar el tipo de accion realizada), onWork, onWorkBegin y onWorkEnd de TIdsmtp, para implementar la barra de progresos.
Lo ideal seria crear un form aparte que crees tu dinamicamente y que tenga ya los eventos preparados para el idSmtp, solo asignar el idSmtp y listos.

Espero que te sea de ayuda.

Oscar Noe

molinero1 18-04-2007 18:42:25

Hola, he intentado servir tus lineas de codigo, he comentado la linea de
TIdAttachment.Create(mail.MessageParts, 'C:\adjunto.txt');
y he cambiado --> Recipients[0].Address := <-- a la direccion de correo que queria enviar el mail y me dice que Socket Error # 11004. Alguien sabe como solucionar el error?

IVAND 23-11-2007 18:15:06

Hola a todos , estoy intentando lo mismo que ud. pero el error me sale socket error #11004 a que se debera este error sera un problema de configuracion o que , el error lo lanza el esta linea smtp.Connect(30000);

Es programa esta copiado igual , salvo que las configuraciones cambian

Gracias de antemano por sus ayudas

IVAND 23-11-2007 18:58:50

me respondo yo mismo , les cuento que el error era de configuracion en la linea el smt.xxx solo debia ponerse xxx

Gracias de antemano

fide 24-11-2007 20:29:40

Motrar progreso.
 
Bueno, eso de mostrar el progreso yo creo que si se puede hacer, pero yo no se como. Ahora bien, yo hasta ahora lo que hago es colocar un idAntiFreeze y ahi mismo, cuando presiono en boton "Enviar Mail", pues muestro una ventana que dice, por favor espere, y muestra una barra pero no que se llena, sino como la del buscar de Windows, que para de un lado para otro. y cuando se termina el trabajo, o ocurre un error, pues yo quito la ventana y notifico lo que ha sucedido. Por lo menos asi me esta funcionando bien...

Martinacho 06-01-2010 12:41:53

idAntifreeze
 
Cita:

Empezado por fide (Mensaje 248251)
Bueno, eso de mostrar el progreso yo creo que si se puede hacer, pero yo no se como. Ahora bien, yo hasta ahora lo que hago es colocar un idAntiFreeze y ahi mismo, cuando presiono en boton "Enviar Mail", pues muestro una ventana que dice, por favor espere, y muestra una barra pero no que se llena, sino como la del buscar de Windows, que para de un lado para otro. y cuando se termina el trabajo, o ocurre un error, pues yo quito la ventana y notifico lo que ha sucedido. Por lo menos asi me esta funcionando bien...

Hola, soy nuevo aquí y me gustaría saber como funciona un idAntiFreeze, y mucho mejor como lo has acoplado a tu barra tipo windows. Muchísimas gracias de antemano. Mi correo es : martinacho@orange.es

lbidi 03-02-2010 14:12:07

Hola, he utilizado este codigo y funciona muy bien.

Necesito mandar emails con adjuntos por lo tanto he probando con el

comando que esta en este codigo TIdAttachment, pero no me compila.

Que mas necesito agregar ??

Gracias


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

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