Principales respuestas
enviar datagrid por correo desde visual basic 2010

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 SubQuiero 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!
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>")
NextSaludos!!!!
- Propuesto como respuesta Christian AmadoMVP jueves, 4 de septiembre de 2014 12:47
- Marcado como respuesta Miguel.Vazquez.MSDNModerator viernes, 12 de septiembre de 2014 20:00
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
-
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
-
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
-
-
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!
-
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>")
NextSaludos!!!!
- Propuesto como respuesta Christian AmadoMVP jueves, 4 de septiembre de 2014 12:47
- Marcado como respuesta Miguel.Vazquez.MSDNModerator viernes, 12 de septiembre de 2014 20:00
-
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
-
-
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
-
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 -
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 -