Usuário com melhor resposta
Como faço para enviar E-Mails com intervalo de tempo?

Pergunta
-
Boa tarde a todos!
Preciso da ajuda de vocês deste fórum, seguinte, fiz uma aplicação para enviar E-Mails mas estou com dificuldades para fazer com intervalo de tempo ou seja o cliente escolhe de quanto em quanto tempo o E-Mail deve ser enviado, pois criei no form um campo onde ele deverá estipular o tempo desejado em segundos, exemplo: 00:01:30 = 090 Segundos, só que ao invés de aguardar o um minuto e trinta para enviar o próximo ele envia todos os Emails que por enquanto são 7 (para Testes) neste intervalo ou seja no 1:30 ele esta enviado os 7 e não só um.
Alguém pode ajudar-me?
Att.
Dilson J. Hasselmann Desenvolvedor VB.NET
Respostas
-
Oi desculpe a demora (muitos projetos para entregar), bom pelo que li no seu codigo você tem que colocar o temporizador na sua função de envio de email que seria essa em negrito abaixo e receber o tempo como parametro e caso não informe o tempo você pode determinar um valor padrão:
For Each Row As DataGridViewRow In dgvEmails.Rows If IsNothing(Row.Cells(1).Value) Then Exit For End If MsgBox(Row.Cells(1).Value) Emails.Add(Row.Cells(1).Value) Assunto.Add(txtAssunto.Text & Row.Cells(0).Value.ToString) 'Você tem que colocar o temporizador dentro do enviaMensagemEmail e receber como parametro o tempo na funcao Email.enviaMensagemEmail(Meu_eMail, Emails(I), Assunto(I), txtMensagem.Text, lSMTP, lUsuario, Minha_Senha, lPorta, lSSL, Filename,tempo) 'Thread.Sleep(TimeSpan.FromSeconds(tempo)) I += 1 Me.stbStatus.Text = "Enviando e-Mail(s)... Aguarde por Favor! Enviados: " & Format(I, "000000") Next
- Editado Mr. GMSOFT terça-feira, 16 de dezembro de 2014 11:50
- Marcado como Resposta DJHasselmann terça-feira, 16 de dezembro de 2014 14:06
Todas as Respostas
-
Pega o valor do campo onde o cliente informa o tempo e coloca em uma Thread
Dim qtdEmail As Integer = 0 While qtdEmail <= 7 Thread.Sleep(TimeSpam.FromSeconds(txtTempo.txt)) enviarEmail() qtdEmail += 1 End While
- Editado Mr. GMSOFT sexta-feira, 12 de dezembro de 2014 20:08
-
Oi Mr. GMSOFT
Infelizmente não funcionou, continua enviando todos os E-Mails neste intervalo, explico o tempo total de envio deveria ser 00:09:10 (Nove minutos e dez segundos, 7 x 00:01:30) ou seja 00:01:30 (Hum minuto e trinta segundos) cada envio, mas esta enviando todos neste intervalo 00:01:30.
Se caso tiver outra maneira, agradeço!
Att.
Dilson J. Hasselmann Desenvolvedor VB.NET
-
-
Boa noite GMSOFT
Conforme solicitação segue meu código de envio;
Imports System Imports System.Data.OleDb Imports System.Drawing.Drawing2D Imports System.Drawing.Text Imports System.Drawing Imports System.Windows.Forms Imports System.Math Imports System.Net Imports System.Net.Mail Public Class frmEnviarEmail Dim Resultado As String Dim tempo As Integer Dim Meu_eMail As String, lSMTP As String, Minha_Senha As String, lUsuario As String, lPorta As String, lSSL As Boolean Dim Emails As New List(Of String), Assunto As New List(Of String) Dim Z As Integer = 0, I As Integer = 0 Dim Filename As New Collection Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) If (m.Msg = WM_SYSCOMMAND AndAlso m.WParam.ToInt32() = SC_MOVE) OrElse (m.Msg = WM_NCLBUTTONDOWN AndAlso m.WParam.ToInt32() = HTCAPTION) Then Return Else MyBase.WndProc(m) End If End Sub Private Sub frmFuncao_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint Dim oRAngle As Rectangle = New Rectangle(0, 0, Me.Width, Me.Height) Dim oGradientBrush As Brush = New Drawing.Drawing2D.LinearGradientBrush(oRAngle, Color.LightGreen, Color.DarkGreen, Drawing.Drawing2D.LinearGradientMode.Vertical) e.Graphics.FillRectangle(oGradientBrush, oRAngle) End Sub Private Sub frmEnviarEmail_Load(sender As Object, e As System.EventArgs) Handles Me.Load dgvEmails.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill tempo = 0 Try gMensagem = "Preenchendo Lista de Cadastrados" PreencherLista(cboDE, "tbMeusEmails", "Código", "Meus_Emails") carregar_Grids() Me.stbStatus.Text = String.Empty Exit Sub Catch ex As Exception MsgBox(ex.Message & vbNewLine & gMensagem, MsgBoxStyle.Critical, "ERRO no Load do Form") End Try End Sub Private Sub bntAnexar_Click(sender As System.Object, e As System.EventArgs) Handles bntAnexar.Click Dim Response As DialogResult Response = Me.OFD.ShowDialog() If Response = Windows.Forms.DialogResult.OK Then For Each Name As String In Me.OFD.FileNames Me.lstAnexos.Items.Add(Name) Next End If End Sub Private Sub btnExcluiAnexos_Click(sender As System.Object, e As System.EventArgs) Handles btnExcluiAnexos.Click If lstAnexos.SelectedIndex > -1 Then lstAnexos.Items.RemoveAt(lstAnexos.SelectedIndex) End If End Sub Private Sub btnAdicionar_Click(sender As System.Object, e As System.EventArgs) Handles btnAdicionar.Click If Not txtPara.Text = String.Empty.Trim Then If Not EmailAddressCheck(txtPara.Text) Then MsgBox("E-Mail inválido!", MsgBoxStyle.Critical, "ERRO") txtPara.Enabled = True txtPara.ReadOnly = False txtPara.Focus() Exit Sub End If With dgvEmails.Rows .Add(txtPara.Text) End With dgvEmails.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill dgvEmails.Refresh() txtPara.Clear() txtPara.Focus() End If End Sub Private Sub btnLimpar_Click(sender As System.Object, e As System.EventArgs) If tabEmails.SelectedIndex = 0 Then With dgvEmails.Rows .Clear() End With dgvEmails.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill dgvEmails.Refresh() ElseIf tabEmails.SelectedIndex = 1 Then With dgvEnviados.Rows .Clear() End With dgvEnviados.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill dgvEnviados.Refresh() End If End Sub Private Sub cboDE_GotFocus(sender As Object, e As System.EventArgs) Handles cboDE.GotFocus cboDE.SelectAll() End Sub Private Sub cboDE_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles cboDE.KeyDown If e.KeyCode = Keys.Enter Then If cboDE.SelectedIndex = -1 Then MsgBox("Você deve selecionar um item da Lista!", MsgBoxStyle.Exclamation, "ATENÇÃO") cboDE.Focus() Exit Sub End If SendKeys.Send("{TAB}") : Exit Sub End If End Sub Private Sub cboDE_LostFocus(sender As Object, e As System.EventArgs) Handles cboDE.LostFocus If cboDE.SelectedIndex <> -1 Then EmailAddressCheck(cboDE.Text) End If End Sub Private Sub txtPara_GotFocus(sender As Object, e As System.EventArgs) Handles txtPara.GotFocus txtPara.SelectAll() End Sub Private Sub txtPara_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtPara.KeyDown If e.KeyCode = Keys.Enter Then If dgvEmails.RowCount = 0 Then If txtPara.Text.Trim = String.Empty Then MsgBox("Campo " & "'PARA'" & " com preenchimento obrigatório!", MsgBoxStyle.Exclamation, "ATENÇÃO") txtPara.Focus() Exit Sub End If Else If txtPara.Text.Trim <> String.Empty Then If EmailAddressCheck(txtPara.Text) = True Then btnAdicionar.Focus() : Exit Sub Else MsgBox("E-Mail digitado inválido!", MsgBoxStyle.Exclamation, "ATENÇÃO") txtPara.Focus() Exit Sub End If Else SendKeys.Send("{TAB}") Exit Sub End If End If End If 'If e.KeyCode = Keys.Escape Then ' e.Handled = True : txtPara.Enabled = False : txtPara.ReadOnly = True : Exit Sub 'End If End Sub Private Sub mskIntervalo_GotFocus(sender As Object, e As System.EventArgs) Handles mskIntervalo.GotFocus mskIntervalo.SelectAll() End Sub Private Sub mskIntervalo_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles mskIntervalo.KeyDown If e.KeyCode = Keys.Enter Then If Val(mskIntervalo.Text) > 0 Then tempo = (Val(mskIntervalo.Text) * 1000) Else tempo = 1000 End If txtAssunto.Focus() Exit Sub End If End Sub Private Sub btnConfrma_Click(sender As System.Object, e As System.EventArgs) Handles btnConfrma.Click Dim lContador As Integer = 0 Try gMensagem = "Consitência de Dados para Envio" If cboDE.SelectedIndex = -1 Then '.Text = String.Empty.Trim Then MsgBox("Você deve selecionar um item da Lista!", MsgBoxStyle.Exclamation, "e-Mail") cboDE.Focus() Exit Sub End If If mskIntervalo.Text = "000" Then MsgBox("Você deve inserir o intervalo desejado!", MsgBoxStyle.Exclamation, "Intervalo dos E-Mails") mskIntervalo.Focus() Exit Sub End If For Each Row As DataGridViewRow In dgvEmails.Rows If Not IsNothing(Row.Cells(1).Value) Then lContador += 1 End If Next If lContador = 0 Then MsgBox("A Tabela de e-Mail(s) está vazia!", MsgBoxStyle.Exclamation, "e-Mail") txtPara.Focus() Exit Sub End If If txtAssunto.Text = String.Empty.Trim Then MsgBox("Campo com preenchimento Obrigatório!", MsgBoxStyle.Exclamation, "e-Mail") txtAssunto.Focus() Exit Sub End If If txtMensagem.Text = String.Empty.Trim Then MsgBox("Campo com preenchimento Obrigatório!", MsgBoxStyle.Exclamation, "e-Mail") txtMensagem.Focus() Exit Sub End If Me.stbStatus.Text = "Enviando e-Mail(s)... Aguarde por Favor!" If gCN.State = ConnectionState.Open Then gCN.Close() gCN.Open() gMensagem = "Selecionando e-Mail" gSQL = "Select * From tbMEUSEMAILS Where Código = " & cboDE.SelectedItem.valor gCMD = New OleDbCommand(gSQL, gCN) gDtR = gCMD.ExecuteReader gDtR.Read() If Not IsDBNull(gDtR.Item("MEUS_EMAILS")) Then Meu_eMail = gDtR.Item("Meus_eMails") If Not IsDBNull(gDtR.Item("MEUS_SMTPs")) Then lSMTP = gDtR.Item("Meus_SMTPs") If Not IsDBNull(gDtR.Item("Usuarios")) Then lUsuario = gDtR.Item("Usuarios") If Not IsDBNull(gDtR.Item("Minhas_Senhas")) Then Minha_Senha = gDtR.Item("Minhas_Senhas") If Not IsDBNull(gDtR.Item("Porta_EMails")) Then lPorta = gDtR.Item("Porta_eMails") lSSL = gDtR.Item("SSL_Hab_Desab") gDtR.Close() If Me.lstAnexos.Items.Count > 0 Then For Each TheItem As String In lstAnexos.Items Filename.Add(TheItem) Next End If Me.stbStatus.Text = "Enviando e-Mail(s)... Aguarde por Favor!" I = 0 For Each Row As DataGridViewRow In dgvEmails.Rows If IsNothing(Row.Cells(1).Value) Then Exit For End If MsgBox(Row.Cells(1).Value) Emails.Add(Row.Cells(1).Value) Assunto.Add(txtAssunto.Text & Row.Cells(0).Value.ToString) Email.enviaMensagemEmail(Meu_eMail, Emails(I), Assunto(I), txtMensagem.Text, lSMTP, lUsuario, Minha_Senha, lPorta, lSSL, Filename) Thread.Sleep(TimeSpan.FromSeconds(tempo)) I += 1 Me.stbStatus.Text = "Enviando e-Mail(s)... Aguarde por Favor! Enviados: " & Format(I, "000000") Next MsgBox("e-Mails enviado(s) com sucesso!", MsgBoxStyle.Information, "ENVIO DE E-Mail(s)") Me.stbStatus.Text = Nothing 'Timer1.Enabled = True 'Timer1.Interval = tempo Exit Sub Catch ex As Exception MsgBox(ex.Message & vbNewLine & gMensagem, MsgBoxStyle.Critical, "ERRO de ENVIO") End Try End Sub Private Sub txtAssunto_GotFocus(sender As Object, e As System.EventArgs) Handles txtAssunto.GotFocus txtAssunto.SelectAll() End Sub Private Sub txtAssunto_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtAssunto.KeyDown If e.KeyCode = Keys.Enter Then If txtAssunto.Text = String.Empty.Trim Then MsgBox("Campo com preenchimento obrigatório!", MsgBoxStyle.Exclamation, "ATENÇÃO") txtAssunto.Focus() Exit Sub End If SendKeys.Send("{TAB}") : Exit Sub End If If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}") : Exit Sub End Sub 'Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick ' If I < Z Then ' Email.enviaMensagemEmail(Meu_eMail, Emails(I), Assunto(I), txtMensagem.Text, lSMTP, lUsuario, Minha_Senha, lPorta, lSSL, Filename) ' I += 1 ' Me.stbStatus.Text = "Enviando e-Mail(s)... Aguarde por Favor! Enviados: " & Format(I, "000000") ' Else ' Me.stbPrincipal.Text = "" ' Timer1.Enabled = False ' MsgBox("e-Mails enviado(s) com sucesso!", MsgBoxStyle.Information, "ENVIO DE E-Mail(s)") ' End ' Exit Sub ' End If 'End Sub Private Sub btnEncerrar_Click(sender As System.Object, e As System.EventArgs) Handles btnEncerrar.Click Encerrar() End Sub Private Sub menMinimizar_Click(sender As System.Object, e As System.EventArgs) Handles menMinimizar.Click Me.WindowState = FormWindowState.Minimized End Sub Private Sub menSubSobre_Click(sender As System.Object, e As System.EventArgs) Handles menSubSobre.Click frmSobre.ShowDialog() End Sub Private Sub menConfiguracoes_Click(sender As System.Object, e As System.EventArgs) Handles menConfiguracoes.Click frmConfiguracoes.ShowDialog() End Sub Private Sub Carregar_Grids() If gCN.State = ConnectionState.Open Then gCN.Close() gCN.Open() gMensagem = "Selecionando e-Mail à enviar" gSQL = "Select * From tbEnviar order by Enviar_Emails" gCMD = New OleDbCommand(gSQL, gCN) gDtR = gCMD.ExecuteReader gMensagem = "Carregando Grid à enviar" With dgvEmails.Rows .Clear() Me.stbStatus.Text = "Aguarde... Carregando Grid à Enviar" Do While gDtR.Read .Add(Format(gDtR.Item("Código"), "000000"), gDtR.Item("Enviar_Emails")) Loop End With dgvEmails.Columns(0).AutoSizeMode = 6 dgvEmails.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill dgvEmails.Refresh() gDtR.Close() '----------------------------------------------------------------------- Enviados If gCN.State = ConnectionState.Open Then gCN.Close() gCN.Open() gMensagem = "Selecionando e-Mails enviados" gSQL = "Select * From tbEnviados" gDA = New OleDbDataAdapter(gSQL, gCN) gCMD = New OleDbCommand(gSQL, gCN) gDtR = gCMD.ExecuteReader gMensagem = "Carregando Grid enviados" If gDtR.HasRows Then With dgvEnviados.Rows .Clear() Me.stbStatus.Text = "Aguarde... Carregando Grid Enviados" Do While gDtR.Read .Add(Format(gDtR.Item("Código"), "000000"), gDtR.Item("Enviados_Emails")) Loop End With dgvEnviados.Columns(0).AutoSizeMode = 6 dgvEnviados.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill dgvEnviados.Refresh() gDtR.Close() End If Exit Sub End Sub End Class
Esta é a Classe responsavel pelo envio
Imports System.Net
Imports System.Net.Mail
Public Class Email
' </summary>
' <param name="from">Endereco do Remetente</param>
' <param name="recepient">Destinatario</param>
' <param name="bcc">recipiente Bcc</param>
' <param name="cc">recipiente Cc</param>
' <param name="subject">Assunto do email</param>
' <param name="body">Corpo da mensagem de email</param>
Public Shared Sub enviaMensagemEmail(ByVal from As String, ByVal recepient As String, ByVal subject As String, ByVal body As String, ByVal servidorSMTP As String, ByVal pUsuario As String, ByVal pSenha As String, _
ByVal Porta As String, ByVal SSL As Boolean, Optional ByVal FileName As Collection = Nothing)
' cria uma instância do objeto MailMessage
Dim mMailMessage As New MailMessage()
' Cria uma instância de SmtpClient - Nota - Define qual o host a ser usado para envio
' de mensagens, no local de smtp.server.com use o nome do SEU servidor
Dim mSmtpClient As New SmtpClient
' Define o endereço do remetente
mMailMessage.From = New MailAddress(from)
' Define o destinario da mensagem
mMailMessage.To.Add(New MailAddress(recepient))
' Define o assunto
mMailMessage.Subject = subject
' Define o corpo da mensagem
mMailMessage.Body = body
' Define o formato do email como HTML
mMailMessage.IsBodyHtml = True
' Inclui os Anexos
If Not FileName Is Nothing Then
For Each Name As String In FileName
Dim attach As New Net.Mail.Attachment(Name) 'Includes Path
mMailMessage.Attachments.Add(attach)
Next
For Each At As Attachment In mMailMessage.Attachments
At.TransferEncoding() = Net.Mime.TransferEncoding.Base64
Next
End If
' Define a prioridade da mensagem como normal
mMailMessage.Priority = MailPriority.Normal
mMailMessage.SubjectEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1")
mMailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1")
mSmtpClient.Timeout = 1000000
mSmtpClient.Host = servidorSMTP
mSmtpClient.Credentials = New Net.NetworkCredential(pUsuario, pSenha)
mSmtpClient.Port = Porta
mSmtpClient.EnableSsl = SSL
' Envia o email
mSmtpClient.Send(mMailMessage)
End Sub
End Class
Por favor indique´me onde está falha, para eu poder arrumar!
Obrigado!
Att.
Dilson J. Hasselmann Desenvolvedor VB.NET
-
Boa noite GMSOFT
Conforme solicitação segue meu código de envio;
Imports System Imports System.Data.OleDb Imports System.Drawing.Drawing2D Imports System.Drawing.Text Imports System.Drawing Imports System.Windows.Forms Imports System.Math Imports System.Net Imports System.Net.Mail Public Class frmEnviarEmail Dim Resultado As String Dim tempo As Integer Dim Meu_eMail As String, lSMTP As String, Minha_Senha As String, lUsuario As String, lPorta As String, lSSL As Boolean Dim Emails As New List(Of String), Assunto As New List(Of String) Dim Z As Integer = 0, I As Integer = 0 Dim Filename As New Collection Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) If (m.Msg = WM_SYSCOMMAND AndAlso m.WParam.ToInt32() = SC_MOVE) OrElse (m.Msg = WM_NCLBUTTONDOWN AndAlso m.WParam.ToInt32() = HTCAPTION) Then Return Else MyBase.WndProc(m) End If End Sub Private Sub frmFuncao_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint Dim oRAngle As Rectangle = New Rectangle(0, 0, Me.Width, Me.Height) Dim oGradientBrush As Brush = New Drawing.Drawing2D.LinearGradientBrush(oRAngle, Color.LightGreen, Color.DarkGreen, Drawing.Drawing2D.LinearGradientMode.Vertical) e.Graphics.FillRectangle(oGradientBrush, oRAngle) End Sub Private Sub frmEnviarEmail_Load(sender As Object, e As System.EventArgs) Handles Me.Load dgvEmails.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill tempo = 0 Try gMensagem = "Preenchendo Lista de Cadastrados" PreencherLista(cboDE, "tbMeusEmails", "Código", "Meus_Emails") carregar_Grids() Me.stbStatus.Text = String.Empty Exit Sub Catch ex As Exception MsgBox(ex.Message & vbNewLine & gMensagem, MsgBoxStyle.Critical, "ERRO no Load do Form") End Try End Sub Private Sub bntAnexar_Click(sender As System.Object, e As System.EventArgs) Handles bntAnexar.Click Dim Response As DialogResult Response = Me.OFD.ShowDialog() If Response = Windows.Forms.DialogResult.OK Then For Each Name As String In Me.OFD.FileNames Me.lstAnexos.Items.Add(Name) Next End If End Sub Private Sub btnExcluiAnexos_Click(sender As System.Object, e As System.EventArgs) Handles btnExcluiAnexos.Click If lstAnexos.SelectedIndex > -1 Then lstAnexos.Items.RemoveAt(lstAnexos.SelectedIndex) End If End Sub Private Sub btnAdicionar_Click(sender As System.Object, e As System.EventArgs) Handles btnAdicionar.Click If Not txtPara.Text = String.Empty.Trim Then If Not EmailAddressCheck(txtPara.Text) Then MsgBox("E-Mail inválido!", MsgBoxStyle.Critical, "ERRO") txtPara.Enabled = True txtPara.ReadOnly = False txtPara.Focus() Exit Sub End If With dgvEmails.Rows .Add(txtPara.Text) End With dgvEmails.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill dgvEmails.Refresh() txtPara.Clear() txtPara.Focus() End If End Sub Private Sub btnLimpar_Click(sender As System.Object, e As System.EventArgs) If tabEmails.SelectedIndex = 0 Then With dgvEmails.Rows .Clear() End With dgvEmails.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill dgvEmails.Refresh() ElseIf tabEmails.SelectedIndex = 1 Then With dgvEnviados.Rows .Clear() End With dgvEnviados.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill dgvEnviados.Refresh() End If End Sub Private Sub cboDE_GotFocus(sender As Object, e As System.EventArgs) Handles cboDE.GotFocus cboDE.SelectAll() End Sub Private Sub cboDE_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles cboDE.KeyDown If e.KeyCode = Keys.Enter Then If cboDE.SelectedIndex = -1 Then MsgBox("Você deve selecionar um item da Lista!", MsgBoxStyle.Exclamation, "ATENÇÃO") cboDE.Focus() Exit Sub End If SendKeys.Send("{TAB}") : Exit Sub End If End Sub Private Sub cboDE_LostFocus(sender As Object, e As System.EventArgs) Handles cboDE.LostFocus If cboDE.SelectedIndex <> -1 Then EmailAddressCheck(cboDE.Text) End If End Sub Private Sub txtPara_GotFocus(sender As Object, e As System.EventArgs) Handles txtPara.GotFocus txtPara.SelectAll() End Sub Private Sub txtPara_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtPara.KeyDown If e.KeyCode = Keys.Enter Then If dgvEmails.RowCount = 0 Then If txtPara.Text.Trim = String.Empty Then MsgBox("Campo " & "'PARA'" & " com preenchimento obrigatório!", MsgBoxStyle.Exclamation, "ATENÇÃO") txtPara.Focus() Exit Sub End If Else If txtPara.Text.Trim <> String.Empty Then If EmailAddressCheck(txtPara.Text) = True Then btnAdicionar.Focus() : Exit Sub Else MsgBox("E-Mail digitado inválido!", MsgBoxStyle.Exclamation, "ATENÇÃO") txtPara.Focus() Exit Sub End If Else SendKeys.Send("{TAB}") Exit Sub End If End If End If 'If e.KeyCode = Keys.Escape Then ' e.Handled = True : txtPara.Enabled = False : txtPara.ReadOnly = True : Exit Sub 'End If End Sub Private Sub mskIntervalo_GotFocus(sender As Object, e As System.EventArgs) Handles mskIntervalo.GotFocus mskIntervalo.SelectAll() End Sub Private Sub mskIntervalo_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles mskIntervalo.KeyDown If e.KeyCode = Keys.Enter Then If Val(mskIntervalo.Text) > 0 Then tempo = (Val(mskIntervalo.Text) * 1000) Else tempo = 1000 End If txtAssunto.Focus() Exit Sub End If End Sub Private Sub btnConfrma_Click(sender As System.Object, e As System.EventArgs) Handles btnConfrma.Click Dim lContador As Integer = 0 Try gMensagem = "Consitência de Dados para Envio" If cboDE.SelectedIndex = -1 Then '.Text = String.Empty.Trim Then MsgBox("Você deve selecionar um item da Lista!", MsgBoxStyle.Exclamation, "e-Mail") cboDE.Focus() Exit Sub End If If mskIntervalo.Text = "000" Then MsgBox("Você deve inserir o intervalo desejado!", MsgBoxStyle.Exclamation, "Intervalo dos E-Mails") mskIntervalo.Focus() Exit Sub End If For Each Row As DataGridViewRow In dgvEmails.Rows If Not IsNothing(Row.Cells(1).Value) Then lContador += 1 End If Next If lContador = 0 Then MsgBox("A Tabela de e-Mail(s) está vazia!", MsgBoxStyle.Exclamation, "e-Mail") txtPara.Focus() Exit Sub End If If txtAssunto.Text = String.Empty.Trim Then MsgBox("Campo com preenchimento Obrigatório!", MsgBoxStyle.Exclamation, "e-Mail") txtAssunto.Focus() Exit Sub End If If txtMensagem.Text = String.Empty.Trim Then MsgBox("Campo com preenchimento Obrigatório!", MsgBoxStyle.Exclamation, "e-Mail") txtMensagem.Focus() Exit Sub End If Me.stbStatus.Text = "Enviando e-Mail(s)... Aguarde por Favor!" If gCN.State = ConnectionState.Open Then gCN.Close() gCN.Open() gMensagem = "Selecionando e-Mail" gSQL = "Select * From tbMEUSEMAILS Where Código = " & cboDE.SelectedItem.valor gCMD = New OleDbCommand(gSQL, gCN) gDtR = gCMD.ExecuteReader gDtR.Read() If Not IsDBNull(gDtR.Item("MEUS_EMAILS")) Then Meu_eMail = gDtR.Item("Meus_eMails") If Not IsDBNull(gDtR.Item("MEUS_SMTPs")) Then lSMTP = gDtR.Item("Meus_SMTPs") If Not IsDBNull(gDtR.Item("Usuarios")) Then lUsuario = gDtR.Item("Usuarios") If Not IsDBNull(gDtR.Item("Minhas_Senhas")) Then Minha_Senha = gDtR.Item("Minhas_Senhas") If Not IsDBNull(gDtR.Item("Porta_EMails")) Then lPorta = gDtR.Item("Porta_eMails") lSSL = gDtR.Item("SSL_Hab_Desab") gDtR.Close() If Me.lstAnexos.Items.Count > 0 Then For Each TheItem As String In lstAnexos.Items Filename.Add(TheItem) Next End If Me.stbStatus.Text = "Enviando e-Mail(s)... Aguarde por Favor!" I = 0 For Each Row As DataGridViewRow In dgvEmails.Rows If IsNothing(Row.Cells(1).Value) Then Exit For End If MsgBox(Row.Cells(1).Value) Emails.Add(Row.Cells(1).Value) Assunto.Add(txtAssunto.Text & Row.Cells(0).Value.ToString) Email.enviaMensagemEmail(Meu_eMail, Emails(I), Assunto(I), txtMensagem.Text, lSMTP, lUsuario, Minha_Senha, lPorta, lSSL, Filename) Thread.Sleep(TimeSpan.FromSeconds(tempo)) I += 1 Me.stbStatus.Text = "Enviando e-Mail(s)... Aguarde por Favor! Enviados: " & Format(I, "000000") Next MsgBox("e-Mails enviado(s) com sucesso!", MsgBoxStyle.Information, "ENVIO DE E-Mail(s)") Me.stbStatus.Text = Nothing 'Timer1.Enabled = True 'Timer1.Interval = tempo Exit Sub Catch ex As Exception MsgBox(ex.Message & vbNewLine & gMensagem, MsgBoxStyle.Critical, "ERRO de ENVIO") End Try End Sub Private Sub txtAssunto_GotFocus(sender As Object, e As System.EventArgs) Handles txtAssunto.GotFocus txtAssunto.SelectAll() End Sub Private Sub txtAssunto_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtAssunto.KeyDown If e.KeyCode = Keys.Enter Then If txtAssunto.Text = String.Empty.Trim Then MsgBox("Campo com preenchimento obrigatório!", MsgBoxStyle.Exclamation, "ATENÇÃO") txtAssunto.Focus() Exit Sub End If SendKeys.Send("{TAB}") : Exit Sub End If If e.KeyCode = Keys.Up Then SendKeys.Send("+{TAB}") : Exit Sub End Sub 'Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick ' If I < Z Then ' Email.enviaMensagemEmail(Meu_eMail, Emails(I), Assunto(I), txtMensagem.Text, lSMTP, lUsuario, Minha_Senha, lPorta, lSSL, Filename) ' I += 1 ' Me.stbStatus.Text = "Enviando e-Mail(s)... Aguarde por Favor! Enviados: " & Format(I, "000000") ' Else ' Me.stbPrincipal.Text = "" ' Timer1.Enabled = False ' MsgBox("e-Mails enviado(s) com sucesso!", MsgBoxStyle.Information, "ENVIO DE E-Mail(s)") ' End ' Exit Sub ' End If 'End Sub Private Sub btnEncerrar_Click(sender As System.Object, e As System.EventArgs) Handles btnEncerrar.Click Encerrar() End Sub Private Sub menMinimizar_Click(sender As System.Object, e As System.EventArgs) Handles menMinimizar.Click Me.WindowState = FormWindowState.Minimized End Sub Private Sub menSubSobre_Click(sender As System.Object, e As System.EventArgs) Handles menSubSobre.Click frmSobre.ShowDialog() End Sub Private Sub menConfiguracoes_Click(sender As System.Object, e As System.EventArgs) Handles menConfiguracoes.Click frmConfiguracoes.ShowDialog() End Sub Private Sub Carregar_Grids() If gCN.State = ConnectionState.Open Then gCN.Close() gCN.Open() gMensagem = "Selecionando e-Mail à enviar" gSQL = "Select * From tbEnviar order by Enviar_Emails" gCMD = New OleDbCommand(gSQL, gCN) gDtR = gCMD.ExecuteReader gMensagem = "Carregando Grid à enviar" With dgvEmails.Rows .Clear() Me.stbStatus.Text = "Aguarde... Carregando Grid à Enviar" Do While gDtR.Read .Add(Format(gDtR.Item("Código"), "000000"), gDtR.Item("Enviar_Emails")) Loop End With dgvEmails.Columns(0).AutoSizeMode = 6 dgvEmails.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill dgvEmails.Refresh() gDtR.Close() '----------------------------------------------------------------------- Enviados If gCN.State = ConnectionState.Open Then gCN.Close() gCN.Open() gMensagem = "Selecionando e-Mails enviados" gSQL = "Select * From tbEnviados" gDA = New OleDbDataAdapter(gSQL, gCN) gCMD = New OleDbCommand(gSQL, gCN) gDtR = gCMD.ExecuteReader gMensagem = "Carregando Grid enviados" If gDtR.HasRows Then With dgvEnviados.Rows .Clear() Me.stbStatus.Text = "Aguarde... Carregando Grid Enviados" Do While gDtR.Read .Add(Format(gDtR.Item("Código"), "000000"), gDtR.Item("Enviados_Emails")) Loop End With dgvEnviados.Columns(0).AutoSizeMode = 6 dgvEnviados.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill dgvEnviados.Refresh() gDtR.Close() End If Exit Sub End Sub End Class
Esta é a Classe responsavel pelo envio
Imports System.Net
Imports System.Net.Mail
Public Class Email
' </summary>
' <param name="from">Endereco do Remetente</param>
' <param name="recepient">Destinatario</param>
' <param name="bcc">recipiente Bcc</param>
' <param name="cc">recipiente Cc</param>
' <param name="subject">Assunto do email</param>
' <param name="body">Corpo da mensagem de email</param>
Public Shared Sub enviaMensagemEmail(ByVal from As String, ByVal recepient As String, ByVal subject As String, ByVal body As String, ByVal servidorSMTP As String, ByVal pUsuario As String, ByVal pSenha As String, _
ByVal Porta As String, ByVal SSL As Boolean, Optional ByVal FileName As Collection = Nothing)
' cria uma instância do objeto MailMessage
Dim mMailMessage As New MailMessage()
' Cria uma instância de SmtpClient - Nota - Define qual o host a ser usado para envio
' de mensagens, no local de smtp.server.com use o nome do SEU servidor
Dim mSmtpClient As New SmtpClient
' Define o endereço do remetente
mMailMessage.From = New MailAddress(from)
' Define o destinario da mensagem
mMailMessage.To.Add(New MailAddress(recepient))
' Define o assunto
mMailMessage.Subject = subject
' Define o corpo da mensagem
mMailMessage.Body = body
' Define o formato do email como HTML
mMailMessage.IsBodyHtml = True
' Inclui os Anexos
If Not FileName Is Nothing Then
For Each Name As String In FileName
Dim attach As New Net.Mail.Attachment(Name) 'Includes Path
mMailMessage.Attachments.Add(attach)
Next
For Each At As Attachment In mMailMessage.Attachments
At.TransferEncoding() = Net.Mime.TransferEncoding.Base64
Next
End If
' Define a prioridade da mensagem como normal
mMailMessage.Priority = MailPriority.Normal
mMailMessage.SubjectEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1")
mMailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1")
mSmtpClient.Timeout = 1000000
mSmtpClient.Host = servidorSMTP
mSmtpClient.Credentials = New Net.NetworkCredential(pUsuario, pSenha)
mSmtpClient.Port = Porta
mSmtpClient.EnableSsl = SSL
' Envia o email
mSmtpClient.Send(mMailMessage)
End Sub
End Class
Por favor indique´me onde está falha, para eu poder arrumar!
Obrigado!
Att.
Dilson J. Hasselmann Desenvolvedor VB.NET
BOA NOITE GMSOFT!
Estou no aguardo de sua ajuda! Obrigado!
Att.
Dilson J. Hasselmann Desenvolvedor VB.NET
-
Olá,
Dá uma olhada no link abaixo, modifica a forma que você está setando as informações no componente Timer, depois é só você fazer com que o evento Timer_Tick chame o seu método de envio de email.
Klayton Gomes MCP /MCTS/ MCAD / MCPD / MCSD Software Architecture / System Analyst
-
Oi desculpe a demora (muitos projetos para entregar), bom pelo que li no seu codigo você tem que colocar o temporizador na sua função de envio de email que seria essa em negrito abaixo e receber o tempo como parametro e caso não informe o tempo você pode determinar um valor padrão:
For Each Row As DataGridViewRow In dgvEmails.Rows If IsNothing(Row.Cells(1).Value) Then Exit For End If MsgBox(Row.Cells(1).Value) Emails.Add(Row.Cells(1).Value) Assunto.Add(txtAssunto.Text & Row.Cells(0).Value.ToString) 'Você tem que colocar o temporizador dentro do enviaMensagemEmail e receber como parametro o tempo na funcao Email.enviaMensagemEmail(Meu_eMail, Emails(I), Assunto(I), txtMensagem.Text, lSMTP, lUsuario, Minha_Senha, lPorta, lSSL, Filename,tempo) 'Thread.Sleep(TimeSpan.FromSeconds(tempo)) I += 1 Me.stbStatus.Text = "Enviando e-Mail(s)... Aguarde por Favor! Enviados: " & Format(I, "000000") Next
- Editado Mr. GMSOFT terça-feira, 16 de dezembro de 2014 11:50
- Marcado como Resposta DJHasselmann terça-feira, 16 de dezembro de 2014 14:06
-
-
KKK por nada, vida de Analista/programador é assim mesmo, sempre correndo e o tempo não ajuda kkkk
- Editado Mr. GMSOFT terça-feira, 16 de dezembro de 2014 14:10