Os traigo una gran duda que por mas que lo intento, no consigo sacar una respuesta en claro.
quiero hacer que me muestre en el correo, un html con una tabla que me ponga lo siguiente:
nombre_cliente id_pedido
________________________________________
articulo1 cantidad1
articulo2 cantidad2
articulo3 cantidad3
. .
. .
Bien, pues mi código es el siguiente (os paso el trozo de fragmento para que divagareis):
Código vb:
Ver original
Imports System.Xml Imports MySql.Data.MySqlClient Module Module1 Sub Main() 'Primero leemos el archivo config.xml Dim lector As XmlTextReader = New XmlTextReader("config.xml") Dim xml(5) As String Dim i As Integer i = 0 Do While (lector.Read()) Select Case lector.NodeType Case XmlNodeType.Text xml(i) = lector.Value i = i + 1 End Select Loop 'Ahora la conexion a nuestro servidor Dim consulta As New MySqlCommand("select email from usuarios;") Dim conexion As New MySqlConnection("server=" & xml(0) & ";database=" & xml(1) & ";uid=" & xml(2) & ";password=" & xml(3) & ";") Try conexion.Open() Catch ex As Exception Console.WriteLine("No se puede conectar a la base de datos") End Try consulta.Connection = conexion 'Procedemos a ejecutar el select Dim adaptador As New MySqlDataAdapter adaptador.SelectCommand = consulta Dim datos As New DataTable adaptador.Fill(datos) Dim adaptador2 As New MySqlDataAdapter adaptador2.SelectCommand = consulta Dim datos2 As New DataTable adaptador2.Fill(datos2) Dim filas = datos2.Rows.Count() Dim columnas = datos.Columns.Count() For i = 0 To filas - 1 Dim row As DataRow = datos2.Rows(i) For j = 0 To columnas - 1 'una vez tenemos el bucle que nos devuelve TODOS los resultados, ahora pondremos ese row(j) en el destinatario 'de los correos Dim smtp As New System.Net.Mail.SmtpClient() Dim mensaje As New System.Net.Mail.MailMessage() 'Configuramos el SMTP smtp.Credentials = New System.Net.NetworkCredential(xml(4), xml(5)) smtp.Host = "smtp.gmail.com" smtp.Port = "587" smtp.EnableSsl = True 'Configuramos mensaje mensaje.From = New System.Net.Mail.MailAddress("[email protected]", "prueba_nombre", System.Text.Encoding.UTF8) 'mensaje.To.Add(row(j)) mensaje.To.Add("[email protected]") mensaje.Subject = "asunto" mensaje.SubjectEncoding = System.Text.Encoding.UTF8 mensaje.IsBodyHtml = True 'Preparamos otro select que recorra por cada correo este select y envíe el resultado Dim conexionsql As New SqlClient.SqlConnection("server=localhost;database=bbdd;uid=root;password=pass;") Dim consultahtml As New SqlClient.SqlCommand("SELECT TCLIENTES2 AS NOMBRE, TPEDIDOS1 as NºPEDIDO, TVALORESPEDIDOS3 AS DESC_ART_PED, TVALORESPEDIDOS7 AS CANT_ART_PED FROM TPEDIDOS INNER JOIN TVALORESPEDIDOS ON TVALORESPEDIDOS.TVALORESPEDIDOS19=TPEDIDOS.TPEDIDOS1 INNER JOIN TCLIENTES ON TCLIENTES.TCLIENTES1 = TPEDIDOS.TPEDIDOS9 WHERE TPEDIDOS2='20160104 00:00:00.000' ORDER BY NOMBRE;") Dim consultaCliente As New SqlClient.SqlCommand("") consultahtml.Connection = conexionsql Dim adaptadorhtml1 As New SqlClient.SqlDataAdapter adaptadorhtml1.SelectCommand = consultahtml Dim datoshtml1 As New DataTable adaptadorhtml1.Fill(datoshtml1) Dim adaptadorhtml2 As New SqlClient.SqlDataAdapter adaptadorhtml2.SelectCommand = consultahtml Dim datoshtml2 As New DataTable adaptadorhtml2.Fill(datoshtml2) Dim filashtml = datoshtml2.Rows.Count() Dim columnashtml = datoshtml1.Columns.Count() Console.WriteLine(filashtml) Console.WriteLine(columnashtml) My.Computer.FileSystem.WriteAllText("prueba.txt", "<table border='1'>", True) 'Aqui es donde anda el problema.... For k = 0 To filashtml - 1 Dim rowhtml As DataRow = datoshtml2.Rows(k) For l = 0 To columnashtml - 1 Dim colhtml As DataColumn = datoshtml1.Columns(l) If Not rowhtml(0) Is Nothing Then My.Computer.FileSystem.WriteAllText("prueba.txt", "<tr><th>" & CStr(rowhtml(0)) & "</th>", True) End If If Not rowhtml(1) Is Nothing Then My.Computer.FileSystem.WriteAllText("prueba.txt", "<th>" & CStr(rowhtml(1)) & "</th></tr>", True) End If 'ahora el bucle para los articulos If rowhtml(2) Then My.Computer.FileSystem.WriteAllText("prueba.txt", "<tr><td>" & CStr(rowhtml(2)) & "</td>", True) ElseIf rowhtml(3) Then My.Computer.FileSystem.WriteAllText("prueba.txt", "<td>" & CStr(rowhtml(3)) & "</td></tr>", True) End If Select Case rowhtml(l) Case rowhtml(0) End Select Next Next My.Computer.FileSystem.WriteAllText("prueba.txt", "</table>", True) Dim lectorhtml As String lectorhtml = My.Computer.FileSystem.ReadAllText("prueba.txt") mensaje.Body = "<html><body>" & lectorhtml & "</body></html>" mensaje.BodyEncoding = System.Text.Encoding.UTF8 mensaje.Priority = System.Net.Mail.MailPriority.High 'Configuramos el envio Try smtp.Send(mensaje) Catch ex As Exception Console.WriteLine("No se ha podido enviar el mensaje") End Try My.Computer.FileSystem.DeleteFile("prueba.txt") Next Next End Sub End Module
Reitero que el problema lo tengo en la zona donde escribo los <tr> y los <td> en el fichero prueba.txt. Si veis burradas, pido disculpas, pero estoy aprendiendo este lenguaje y mi unico profesor es google y sus ejemplos.
Un saludo y espero vuestra ayuda