PROGRESSBAR ENVIO DE EMAIL

SUMAEMY 16/02/2016 12:16:10
#457712
Galera, possuo um codigo para envio de e-mail e gostaria de colocar um progressbar em tempo de execução
exemplo:ao clicar em enviar a progressbar começar a correr e termina após terminar enviar o e-mail
abaixo o codigo de envio:

Try
Dim mail As New MailMessage()
mail.From = New MailAddress(Email_contaTextBox.Text)

mail.To.Add(TextBox6.Text)
mail.To.Add(TextBox7.Text)
mail.CC.Add(TextBox8.Text)

mail.Subject = EMAIL_ASSUNTOTextBox.Text
mail.Body = [Ô]Data da Abertura:[Ô] + [Ô] [Ô] + data_ChamadoLabel1.Text + [Ô] [Ô] + hora_chamadoLabel1.Text & vbCrLf & [Ô]Setor:[Ô] + [Ô] [Ô] + setorComboBox.Text & vbCrLf & [Ô]Motivo:[Ô] + [Ô] [Ô] + motivoTextBox.Text

Dim smtp As New SmtpClient
smtp.Port = Email_portTextBox.Text
smtp.Host = Email_smtpTextBox.Text
smtp.Credentials = New Net.NetworkCredential(Email_contaTextBox.Text, Senha.txt_senha_email.Text)
smtp.EnableSsl = chkSSL.CheckState

smtp.Send(mail)

[ô]progressbar

Call SALVAR_chamado()

codigo_chamadoTextBox.Text = [Ô]0[Ô]
setorComboBox.Text = [Ô][Ô]
motivoTextBox.Text = [Ô][Ô]
observacoesTextBox.Text = [Ô][Ô]
btn_novo.Enabled = True
button1.Enabled = False
Label1.Text = [Ô]Realizado a abertura de chamado com sucesso![Ô]

Catch ex As Exception
MessageBox.Show([Ô]Erro : [Ô] + ex.Message, [Ô]Chamado[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
Label1.Text = [Ô]Senha informada esta icorreta![Ô]
End Try
NILSONTRES 16/02/2016 15:05:15
#457720
Isso eu nunca consegui, sei não se é possível.
OCELOT 16/02/2016 17:20:06
#457728
Não existe nenhuma forma de pegar o progresso do envio de emails pelo SmtpClient, logo não é possível fazer o que você quer.

Outro detalhe é que a chamada ao SmtpClient.Send(MailMessage) bloqueia a execução, então o lugar onde você indicou que queria colocar o progresso só vai executar depois do email ser enviado.
F001E 16/02/2016 17:52:35
#457729
Citação:

Outro detalhe é que a chamada ao SmtpClient.Send(MailMessage) bloqueia a execução, então o lugar onde você indicou que queria colocar o progresso só vai executar depois do email ser enviado.



Com o uso de Threading você libera a execução. Faça uma pesquisa sobre Threading
OCELOT 16/02/2016 18:04:19
#457731
Citação:

Com o uso de Threading você libera a execução. Faça uma pesquisa sobre Threading


O uso de Threads não é tão simples assim, como eu disse a chamada do SmtpClient.Send bloqueia a execução, e com isso eu quis dizer que ele bloqueia a execução do Thread em que ele foi chamado, então todo código que estiver no mesmo Thread vai ser executado só depois.

Usar multi-threading para isso só adicionaria complexidade desnecessária, o próprio SmtpClient possui métodos assíncronos, e na versão 4.5 do framework possui inclusive suporte ao async/await, só o uso deles é suficiente para não travar a execução mas também adicionam uma certa complexidade no código, e como isso não vinha ao caso eu não citei isso na resposta já que mesmo assim ainda não tem como criar uma barra de progresso do envio do email.
MESTRE 17/02/2016 07:17:01
#457751
Concordo com os colegas, parece uma funcionalidade pouco trabalhada por todos nos colegas desenvolvedores . Porém seria bem útil

Encontrei um topico veja se ajuda em algo:
http://stackoverflow.com/questions/27075748/show-progressbar-on-sending-email
SINCLAIR 17/02/2016 10:03:49
#457763
Colegas,

Na época do VB6, eu fiz assim, usando a CDO (que bloqueia o código até terminar).

1) Coloquei um form com traço horizontal, um desenho feito no InkScape, formato png, usando controle AlphaBlend para inserir este tipo de imagem. O traço tinha as pontas afinaladas, para ficar mais bonitinho.

2) Colquei um shape (do próprio VB) em formato circular no início do traço.

3) Coloquei um timer no form que tem o traço e o círculo, para ser executado a cada 1 segundo.

4) No evento do Timer eu fazia o círculo deslocar-se alguns pixels para direita (propriedade .left)

5) Se o timer tivesse 60 passadas (controlado por uma variável integer) siginificava que tinha passado 1 minuto e nada de ter terminado o envio, então o form era descarregado e matava o evento CDO, dando também mensagem ao usuário, sobre erro no envio.

6) Antes de chamar a CDO, uma linha antes, eu exibia o form citado acima, que por sua vez controlava o tempo.

7) Logo após o CDO encerrar (se conseguiu antes de 1 minuto, senão o item 5 seria executado), então descarregava o form e dava a mensagem ao usuário, de envio com sucesso.

Na época foi o que me ocorreu fazer e funcionava uma beleza.

O código não serve, porque era de VB6, mas a lógica do funcionamento pode ser aproveitada.

Tudo de bom.
SINCLAIR 22/02/2016 18:38:44
#458050
Colegas,

5 pessoas distintas e 6 respostas ao cidadão, que não se deu ao trabalho de voltar ao tópico que criou.

Pior: há casos semelhantes com usuários antigos, que fazem o mesmo.

Será que teria como excluir os usuários que fazem tal traquinagem?

Quem sabe futuramente possa existir uma forma melhor de identificação, de tal sorte que mesmo usando outro cadastro, um novo, o solicitante fique identificado como alguém que abusa da boa vontade alheia e tenha suas questões impedidas de serem postadas. Talvez quando certificado digital for tão barato que todos possam ter um. Ou algo que o valha.

Saudações.
JORGESALES 23/02/2016 22:33:10
#458128
SINCLAIR,
acho que é por isso que todos me ajudam aqui pois tenho
um respeito muito grande com todos vocês e leio e respondo
todos comentários e tentativas de ajuda.
Entendo a sua atitude pois sei que muitos de vocês costumam
parar suas atividades apenas para ajudar aqueles que estão em um
lugar que um dia vocês também já estiveram.
PERCIFILHO 24/02/2016 07:40:11
#458139
Isso mesmo, Sinclair.
Por isso que eu digo que deveria haver um tempo para os tópicos ficarem abertos, aí se a pessoa que enviou não respondesse nesse tempo, o tópico seria encerrado automaticamente. Isso porque se a pessoa não respondeu, fica caracterizado que: não deu importância às respostas? Não teve tempo de responder? Ficou doente? Morreu?
Sei lá, qualquer coisa. Mas se a pessoa postou a dúvida, é porque precisa resolver o problema, não é? Então, já que postou a dúvida, precisa entrar no Fórum de vez em quando para ver se alguém respondeu, certo? Vamos esperar para ver se ele volta aqui ou é só mais um que se aventurou por aqui.
SINCLAIR 24/02/2016 08:14:55
#458141
Colega JORGESALES

Obrigado por sua compreensão. Realmente um dia estive [Ô]no outro lado do balcão[Ô] e, na justificativa para trocar meu nick name, aproveitei para agradecer a todos que me ajudaram na jornada que me trouxe até o ponto onde estou. Você é uma pessoa educada e tem um bom histórico de vida. Lhe agradeço em nome de todos pelo respeito com que trata aqueles com quem interages nos posts e, por consequência, com todos que mantém o fórum ativo.

Colega PERCIFILHO,

Exatamente, é a isto que me refiro. O cidadão cria um post com objetivo de alcançar respostas, mas não volta sequer para ver que houveram respostas (dá para saber clicando no perfil do usuário) ou volta e não abre o post, ou ainda abre, pega os anexos que por ventura se tenham deixado para ele/ela e depois some, deixando o tópico abandonado. O pior é que tem usuários cadastrados desde 2004/2005 que fazem a mesma coisa, sem qualquer justificativa. é abusar da ajuda alheia. Eu, sinceramente, não gosto de pessoas que abusam e não as desejo perto de mim, nem mesmo virtualmente, através do VBMANIA.

Tudo de bom, meus colegas.

Faça seu login para responder