none
Como faço para enviar E-Mails com intervalo de tempo? RRS feed

  • 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

    sexta-feira, 12 de dezembro de 2014 19:52

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
    terça-feira, 16 de dezembro de 2014 11:49

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
    sexta-feira, 12 de dezembro de 2014 20:07
  • 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

    sexta-feira, 12 de dezembro de 2014 23:36
  • Isso funciona mais o problema é como você esta fazendo esse envio do email, posta seu codigo para eu poder te ajudar melhor eu tenho uma aplicação que funciona perfeitamente utilizando Thread com intervalo
    sábado, 13 de dezembro de 2014 11:35
  • 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

    sábado, 13 de dezembro de 2014 22:54
  • 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

    segunda-feira, 15 de dezembro de 2014 23:04
  • 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.

    Timer


    Klayton Gomes MCP /MCTS/ MCAD / MCPD / MCSD Software Architecture / System Analyst

    terça-feira, 16 de dezembro de 2014 01:26
  • 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
    terça-feira, 16 de dezembro de 2014 11:49
  • Boa tarde GMSOFT!

    Assim funcionou legal, muito obrigado pela atenção a mim dispensada, outra coisa eu estou igual a você só correria para poder entregar tudo no prazo, rsrsrsrs!

    Valeu

    Att.


    Dilson J. Hasselmann Desenvolvedor VB.NET

    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
    terça-feira, 16 de dezembro de 2014 14:10