none
enviar datagrid por correo desde visual basic 2010 RRS feed

  • Pregunta

  • Hola tengo el siguiente codigo de un form:

     Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
            Dim _Message As New System.Net.Mail.MailMessage()
            Dim _SMTP As New System.Net.Mail.SmtpClient
            Dim strB As New StringBuilder()
            'CONFIGURACIÓN DEL STMP
            '_SMTP.Credentials = New System.Net.NetworkCredential("cuenta de correo", "contraseña")
            _SMTP.Credentials = New System.Net.NetworkCredential("mauriciohamak@gmail.com", "3aaaaa")
            _SMTP.Host = "smtp.gmail.com"
            _SMTP.Port = 587
            _SMTP.EnableSsl = True

            ' CONFIGURACION DEL MENSAJE
            _Message.[To].Add(Me.txtPara.Text.ToString) 'Cuenta de Correo al que se le quiere enviar el e-mail
            _Message.From = New System.Net.Mail.MailAddress("mauriciohamak@gmail.com", "mauriciohamak@gmail.com", System.Text.Encoding.UTF8) 'Quien lo envía
            _Message.Subject = Me.txtAsunto.Text.ToString 'Sujeto del e-mail
            _Message.SubjectEncoding = System.Text.Encoding.UTF8 'Codificacion
            _Message.Body = strB.ToString() 'contenido del mail
            _Message.BodyEncoding = System.Text.Encoding.UTF8
            _Message.Priority = System.Net.Mail.MailPriority.Normal
            _Message.IsBodyHtml = True



            Dim i As Integer

            'create html & table
            strB.AppendLine("<html><body><center><" & "table border='1' cellpadding='0' cellspacing='0'>")
            strB.AppendLine("<tr>")
            'cteate table header
            For value As Integer = 0 To dg.Columns.Count
                strB.AppendLine("<td align='center' valign='middle'>" & dg.Columns(i).HeaderText + "</td>")
            Next

            'create table body
            strB.AppendLine("<tr>")
            For value As Integer = 0 To dg.Rows.Count
                strB.AppendLine("<tr>")
                For Each dgvc As DataGridViewCell In dg.Rows(i).Cells
                    strB.AppendLine("<td align='center' valign='middle'>" & dgvc.Value.ToString() & "</td>")
                Next
                strB.AppendLine("</tr>")
            Next

            'table footer & end of html file
            strB.AppendLine("</table></center></body></html>")

            'ENVIO
            _Message.Body = strB.ToString()
            Try
                _SMTP.Send(_Message)
                MessageBox.Show("Mensaje enviado correctamene", "Exito!", MessageBoxButtons.OK)
            Catch ex As System.Net.Mail.SmtpException
                MessageBox.Show(ex.ToString, "Error!", MessageBoxButtons.OK)
            End Try
        End Sub

    Quiero que me envie al mail el datagrid.

    pero el resultado que obtengo en el email es este:

    idCliente idCliente idCliente idCliente idCliente idCliente idCliente
    12216786 Ricardo Hamak Jose Gomez 770 421666 ricky@me.com
    12216786 Ricardo Hamak Jose Gomez 770 421666 ricky@me.com
    12216786 Ricardo Hamak Jose Gomez 770 421666 ricky@me.com
    12216786 Ricardo Hamak Jose Gomez 770 421666 ricky@me.com

    Alguien sabe que puede suceder? 

    Gracias!

    viernes, 21 de junio de 2013 20:18

Respuestas

  • Ahi lo pude solucionar, seria asi:

            'create table body
            strB.AppendLine("<tr>")
            For i As Integer = 1 To NRow
                strB.AppendLine("<tr>")
                For Each dgvc As DataGridViewCell In dg.Rows(i - 1).Cells
                    strB.AppendLine("<td align='center' valign='middle'>" & dgvc.Value.ToString() & "</td>")
                Next
                strB.AppendLine("</tr>")
            Next

    Saludos!!!!

    sábado, 22 de junio de 2013 21:33

Todas las respuestas

  • Cambia esto

    'create table body
            strB.AppendLine("<tr>")

    por su cierre

    'close table header

            strB.AppendLine("</tr>")

    'create table body

    No cerraste la fila de la cabecera


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos


    • Editado Sergio Parra sábado, 22 de junio de 2013 9:48 comentarios
    sábado, 22 de junio de 2013 9:47
  • Seria esto

    Dim i As Integer
     
            'create html & table
             strB.AppendLine("<html><body><center><" & "table border='1' cellpadding='0' cellspacing='0'>")
             strB.AppendLine("<tr>")
             'cteate table header
             For value As Integer = 0 To dg.Columns.Count
                 strB.AppendLine("<td align='center' valign='middle'>" & dg.Columns(i).HeaderText + "</td>")
             Next
     
            'close table header 
             strB.AppendLine("</tr>")
           'create table body
             For value As Integer = 0 To dg.Rows.Count
                 strB.AppendLine("<tr>")
                 For Each dgvc As DataGridViewCell In dg.Rows(i).Cells
                     strB.AppendLine("<td align='center' valign='middle'>" & dgvc.Value.ToString() & "</td>")
                 Next
                 strB.AppendLine("</tr>")
             Next
     
            'table footer & end of html file
             strB.AppendLine("</table></center></body></html>")


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta Mauricio Hamak sábado, 22 de junio de 2013 19:58
    • Desmarcado como respuesta Mauricio Hamak sábado, 22 de junio de 2013 20:55
    sábado, 22 de junio de 2013 9:51
  • Hola no se soluciono.

    Lo del encabezado ya lo solucione. 

    Ahora los datos dentro del datagrid no se como ubicarlos.

    El codigo me quedo asi:

     Dim NCol As Integer = dg.ColumnCount
            Dim NRow As Integer = dg.RowCount
            'cteate table header
            For i As Integer = 1 To NCol
                strB.AppendLine("<td align='center' valign='middle'>" & dg.Columns(i - 1).HeaderText() & "</td>")
            Next

            'close table header 
            strB.AppendLine("</tr>")
            'create table body
            strB.AppendLine("<tr>")
            For i As Integer = 1 To NRow
                strB.AppendLine("<tr>")
                For Each dgvc As DataGridViewRow In dg.Rows
                    strB.AppendLine("<td align='center' valign='middle'>" & dgvc.Value.ToString() & "</td>")
                Next
                strB.AppendLine("</tr>")
            Next

            'table footer & end of html file
            strB.AppendLine("</table></center></body></html>")

    El encabezado ya manda perfecto ahora el tema del las lineas dentro del datagrid no los puedo enviar.

    La linea resaltada con negrita me da error en el value.

    Saludos

    sábado, 22 de junio de 2013 20:57
  • Y que error te da?? puedes especificar un poco mas? gracias

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    sábado, 22 de junio de 2013 21:11
  • Mira con el codigo asi:

     'create html & table
            strB.AppendLine("<html><body><center><" & "table border='1' cellpadding='0' cellspacing='0'>")
            strB.AppendLine("<tr>")

            Dim NCol As Integer = dg.ColumnCount
            Dim NRow As Integer = dg.RowCount
            'cteate table header
            For i As Integer = 1 To NCol
                strB.AppendLine("<td align='center' valign='middle'>" & dg.Columns(i - 1).HeaderText() & "</td>")
            Next



            'create table body
            strB.AppendLine("<tr>")
            For i As Integer = 1 To NRow
                strB.AppendLine("<tr>")
                For Each dgvc As DataGridViewRow In dg.Rows
                    strB.AppendLine("<td align='center' valign='middle'>" & dgvc.Cells(i - 1).ToString() & "</td>")
                Next
                strB.AppendLine("</tr>")
            Next



            'table footer & end of html file
            strB.AppendLine("</table></center></body></html>")
            'ENVIO
            _Message.Body = strB.ToString()

    Recibo el email asi:

    idCliente Nombre Apellido Direccion Telefono Email
    DataGridViewTextBoxCell { ColumnIndex=0, RowIndex=0 } DataGridViewTextBoxCell { ColumnIndex=0, RowIndex=1 }
    DataGridViewTextBoxCell { ColumnIndex=1, RowIndex=0 } DataGridViewTextBoxCell { ColumnIndex=1, RowIndex=1 }

    Calculo que lo que resalte en negrita esta mal...

    Saludos y muchas Gracias!

    sábado, 22 de junio de 2013 21:31
  • Ahi lo pude solucionar, seria asi:

            'create table body
            strB.AppendLine("<tr>")
            For i As Integer = 1 To NRow
                strB.AppendLine("<tr>")
                For Each dgvc As DataGridViewCell In dg.Rows(i - 1).Cells
                    strB.AppendLine("<td align='center' valign='middle'>" & dgvc.Value.ToString() & "</td>")
                Next
                strB.AppendLine("</tr>")
            Next

    Saludos!!!!

    sábado, 22 de junio de 2013 21:33
  • Decirte que me alegro lo solucionaras. También te digo que todos los índices en .net empiezan en cero

    For i As Integer = 1 To NRow

    Seria

    For i As Integer = 0 To NRow - 1


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    sábado, 22 de junio de 2013 21:37
  • amigo estoy aplicando este codigo a mi proyecto pero me dice que dg no esta declarado.

    como deberia declararlo? 

    solo tengo una fila en el datagridview1 y es la que quiero que me llegue en un correo. 

    ayudenme pliss

    miércoles, 3 de septiembre de 2014 18:23
  • amigo estoy aplicando este codigo a mi proyecto pero me dice que dg no esta declarado.

    como deberia declararlo? 

    solo tengo una fila en el datagridview1 y es la que quiero que me llegue en un correo. 

    ayudenme pliss

    dg es el nombre del DataGridView. Tendrías que reemplazar dg por datagridview1.

    Saludos


    Christian Amado | Software Engineer | MCPD: Windows Phone Developer | MCTS: Silverlight Developer

    jueves, 4 de septiembre de 2014 12:48
  • amigo cambie el nombre del datagridview1 a dg

    tengo el código listo y recibo el correo pero sin el cuerpo del mensaje por favor ayudenme les dejo el codigo para el envío del mensaje.

    COMO NOTA ADICIONAL EL DATAGRID CONTIENE SOLO 1 FILA CON INFORMACION NO SE SI EL INDEX SEA LO QUE ME ESTA FALLANDO

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            
            Dim _Message As New System.Net.Mail.MailMessage()

            Dim _SMTP As New System.Net.Mail.SmtpClient

            Dim strB As New StringBuilder()

            'CONFIGURACIÓN DEL STMP

            _SMTP.Credentials = New System.Net.NetworkCredential(Login.TxtUsuario.Text, Login.MtxtClave.Text)

            _SMTP.Host = "*********"

            _SMTP.Port = 587

            _SMTP.EnableSsl = True



            ' CONFIGURACION DEL MENSAJE
            _Message.[To].Add("****.*****@***********.***") 'Cuenta de Correo al que se le quiere enviar el e-mail

            _Message.From = New System.Net.Mail.MailAddress(Label6.Text, Login.TxtUsuario.Text) 'Quien lo envía

            _Message.Subject = "Prueba de Correo" 'Sujeto del e-mail

            _Message.SubjectEncoding = System.Text.Encoding.UTF8 'Codificacion

            _Message.Body = strB.ToString() 'contenido del mail


            _Message.BodyEncoding = System.Text.Encoding.UTF8

            _Message.Priority = System.Net.Mail.MailPriority.Normal

            _Message.IsBodyHtml = True


            'create html & table
            strB.AppendLine("<html><body><center><" & "table border='1' cellpadding='0' cellspacing='0'>")
            strB.AppendLine("<tr>")

            Dim NCol As Integer = dg.ColumnCount
            Dim NRow As Integer = dg.RowCount
            'cteate table header
            For i As Integer = 1 To NCol
                strB.AppendLine("<td align='center' valign='middle'>" & dg.Columns(i - 1).HeaderText() & "</td>")
            Next
            'close table header 
            strB.AppendLine("</tr>")
            'create table body
            strB.AppendLine("<tr>")
            For i As Integer = 1 To NRow 
                strB.AppendLine("<tr>")
                For Each dgvc As DataGridViewCell In dg.Rows(i - 1).Cells
                    strB.AppendLine("<td align='center' valign='middle'>" & dg.ToString() & "</td>")
                Next
                strB.AppendLine("</tr>")
            Next

                'table footer & end of html file
                strB.AppendLine("</table></center></body></html>")

                'ENVIO
                ServicePointManager.ServerCertificateValidationCallback = Function(s As Object, certificate As X509Certificate, chain As X509Chain, sslPolicyErrors As SslPolicyErrors) True
                Try

                    _SMTP.Send(_Message)

                    MessageBox.Show("Mensaje enviado correctamene", "Exito!", MessageBoxButtons.OK)
                Catch ex As System.Net.Mail.SmtpException

                    MessageBox.Show(ex.ToString, "Error!", MessageBoxButtons.OK)

                End Try
        End Sub

    jueves, 18 de septiembre de 2014 16:02
  • QUE TAL UNA PREGUNTA  

    TENGO EL MISMO ERROR QUE TU TUVISTE EN ALGÚN MOMENTO  QUISE  INGRESAR  TU CÓDIGO   PARA ENTENDERLO MEJOR PERO ME APARESE    ERROR AL COMPILAR ME PODRÍAS AYUDAR  DE FAVOR YA QUE  TU CÓDIGO SE COMPILO CORRECTAMENTE 

            For i As Integer = 1 To NRow
                strB.AppendLine("<tr>")
                For Each dgvc As DataGridViewCell In dg.Rows(i - 1).Cells
                    strB.AppendLine("<td align='center' valign='middle'>" & dgvc.Value.ToString() & "</td>")



                Next
                strB.AppendLine("</tr>")
            Next

    jueves, 11 de diciembre de 2014 23:13
  • encontraste tu error amigo
    jueves, 11 de diciembre de 2014 23:24