Añadir barra de progreso a smtpclient enviando asincronamente

03/11/2006 - 12:02 por Daniel | Informe spam
He creado una aplicación para mandar email asincronamente mediante
smtpclient de System.Net.Mail. Al llamar al método SendAsync(objmail,objeto)
obtengo el evento SendCompleted por lo que sé cuando se ha terminado de
enviar el email.

Ahora bien, ¿como se podría añadir una barra de progreso al programa para
que me indique el progreso del envio?, no he logrado ver ningun evento que
me de valores para rellenarla.

Gracias

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion [MVP]
03/11/2006 - 16:36 | Informe spam
"Daniel" wrote in message
news:%23lf$Tez$
He creado una aplicación para mandar email asincronamente mediante
smtpclient de System.Net.Mail. Al llamar al método
SendAsync(objmail,objeto) obtengo el evento SendCompleted por lo que sé
cuando se ha terminado de enviar el email.

Ahora bien, ¿como se podría añadir una barra de progreso al programa para
que me indique el progreso del envio?, no he logrado ver ningun evento que
me de valores para rellenarla.



No, el SendAsync no da ninguna indicación de progreso. Si quisieras dar
una indicación "real" de cómo va progresando el envío del mensaje, tendrías
que implementar tú mismo el protocolo SMTP usando sockets e ir haciendo
avanzar el indicador de progreso mientras se van transmitiendo los bytes. No
es algo simple de hacer.

Como alternativa, si lo único que quieres es mostrar "algo" para que el
usuario no se ponga nervioso, podrías simular el progreso con una técnica
parecida a la del Internet Explorer, que lo que hace cuando no sabe cuánto
mide una página es hacer una estimación arbitraria de lo que va a tardar y
cada equis tiempo hacer avanzar la barra. Si sigue pasando el tiempo y la
página no ha llegado, va haciendo avanzar la barra cada vez más despacio de
forma que nunca llega al final, hasta que por fin se terminan de recibir los
datos y entonces completa de golpe la barra de progreso.
Respuesta Responder a este mensaje
#2 Jose Luis Manners
03/11/2006 - 20:30 | Informe spam
Esto no lo he tratado, pero por si te sirve. Si usaras el servicio de SMTP
de IIS para enviar email, IIS almacena los mensajes que estan siendo
enviados en la carpeta "C:\inetpub\mailroot\queue\". Si puedes acceder a la
carpeta tal vez puedas determinar el status y/o tamaño de tu mensaje y asi
poder hacer los calculos para la barra de progreso. No es muy elegante,
pero como dicen por ahi "a falta de pan, galletas" :-)

-
Coopera con el foro. Dinos si te sirvió la respuesta aquí planteada.
-

Saludos,

Jose Luis Manners
MCP, MCAD.NET
Microsoft MVP Visual C#
http://www.josemanners.com/
http://www.josemanners.com/mvp

"What we do for ourselves dies with us. What we do for others and the world
remains and is immortal."


"Daniel" wrote in message
news:%23lf$Tez$
He creado una aplicación para mandar email asincronamente mediante
smtpclient de System.Net.Mail. Al llamar al método
SendAsync(objmail,objeto) obtengo el evento SendCompleted por lo que sé
cuando se ha terminado de enviar el email.

Ahora bien, ¿como se podría añadir una barra de progreso al programa para
que me indique el progreso del envio?, no he logrado ver ningun evento que
me de valores para rellenarla.

Gracias

Respuesta Responder a este mensaje
#3 Daniel
04/11/2006 - 10:54 | Informe spam
Gracias, utilizaré tu método para engañar al usuario ya que no utilizo IIS
para enviar los mensajes.

"Alberto Poblacion [MVP]"
escribió en el mensaje news:OfMQ041$
"Daniel" wrote in message
news:%23lf$Tez$
He creado una aplicación para mandar email asincronamente mediante
smtpclient de System.Net.Mail. Al llamar al método
SendAsync(objmail,objeto) obtengo el evento SendCompleted por lo que sé
cuando se ha terminado de enviar el email.

Ahora bien, ¿como se podría añadir una barra de progreso al programa para
que me indique el progreso del envio?, no he logrado ver ningun evento
que me de valores para rellenarla.



No, el SendAsync no da ninguna indicación de progreso. Si quisieras dar
una indicación "real" de cómo va progresando el envío del mensaje,
tendrías que implementar tú mismo el protocolo SMTP usando sockets e ir
haciendo avanzar el indicador de progreso mientras se van transmitiendo
los bytes. No es algo simple de hacer.

Como alternativa, si lo único que quieres es mostrar "algo" para que el
usuario no se ponga nervioso, podrías simular el progreso con una técnica
parecida a la del Internet Explorer, que lo que hace cuando no sabe cuánto
mide una página es hacer una estimación arbitraria de lo que va a tardar y
cada equis tiempo hacer avanzar la barra. Si sigue pasando el tiempo y la
página no ha llegado, va haciendo avanzar la barra cada vez más despacio
de forma que nunca llega al final, hasta que por fin se terminan de
recibir los datos y entonces completa de golpe la barra de progreso.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida