PDA

Ver la Versión Completa : Enviar Mail con Indy + mostrar avance progressbar


amadis
14-11-2006, 13:43:58
Como andan Gente!

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


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
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
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