PROGRESSBAR ENVIO DE EMAIL
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
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
Isso eu nunca consegui, sei não se é possÃvel.
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.
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.
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
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.
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
Encontrei um topico veja se ajuda em algo:
http://stackoverflow.com/questions/27075748/show-progressbar-on-sending-email
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.
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.
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.
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.
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.
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.
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.
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.
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.
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