Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/04/2016, 05:05
isaac26lopez
 
Fecha de Ingreso: abril-2016
Ubicación: C:\Usuarios\isaac
Mensajes: 33
Antigüedad: 8 años, 1 mes
Puntos: 1
Bucle para factura

buenas foreros!

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
  1. Imports System.Xml
  2. Imports MySql.Data.MySqlClient
  3.  
  4. Module Module1
  5.     Sub Main()
  6.         'Primero leemos el archivo config.xml
  7.        Dim lector As XmlTextReader = New XmlTextReader("config.xml")
  8.         Dim xml(5) As String
  9.         Dim i As Integer
  10.         i = 0
  11.         Do While (lector.Read())
  12.             Select Case lector.NodeType
  13.                 Case XmlNodeType.Text
  14.                     xml(i) = lector.Value
  15.                     i = i + 1
  16.             End Select
  17.         Loop
  18.         'Ahora la conexion a nuestro servidor
  19.        Dim consulta As New MySqlCommand("select email from usuarios;")
  20.         Dim conexion As New MySqlConnection("server=" & xml(0) & ";database=" & xml(1) & ";uid=" & xml(2) & ";password=" & xml(3) & ";")
  21.         Try
  22.             conexion.Open()
  23.         Catch ex As Exception
  24.             Console.WriteLine("No se puede conectar a la base de datos")
  25.         End Try
  26.         consulta.Connection = conexion
  27.         'Procedemos a ejecutar el select
  28.        Dim adaptador As New MySqlDataAdapter
  29.         adaptador.SelectCommand = consulta
  30.         Dim datos As New DataTable
  31.         adaptador.Fill(datos)
  32.         Dim adaptador2 As New MySqlDataAdapter
  33.         adaptador2.SelectCommand = consulta
  34.         Dim datos2 As New DataTable
  35.         adaptador2.Fill(datos2)
  36.         Dim filas = datos2.Rows.Count()
  37.         Dim columnas = datos.Columns.Count()
  38.         For i = 0 To filas - 1
  39.             Dim row As DataRow = datos2.Rows(i)
  40.             For j = 0 To columnas - 1
  41.                 'una vez tenemos el bucle que nos devuelve TODOS los resultados, ahora pondremos ese row(j) en el destinatario
  42.                'de los correos
  43.                Dim smtp As New System.Net.Mail.SmtpClient()
  44.                 Dim mensaje As New System.Net.Mail.MailMessage()
  45.                 'Configuramos el SMTP
  46.                smtp.Credentials = New System.Net.NetworkCredential(xml(4), xml(5))
  47.                 smtp.Host = "smtp.gmail.com"
  48.                 smtp.Port = "587"
  49.                 smtp.EnableSsl = True
  50.                 'Configuramos mensaje
  51.                mensaje.From = New System.Net.Mail.MailAddress("[email protected]", "prueba_nombre", System.Text.Encoding.UTF8)
  52.                 'mensaje.To.Add(row(j))
  53.                mensaje.To.Add("[email protected]")
  54.                 mensaje.Subject = "asunto"
  55.                 mensaje.SubjectEncoding = System.Text.Encoding.UTF8
  56.                 mensaje.IsBodyHtml = True
  57.                 'Preparamos otro select que recorra por cada correo este select y envíe el resultado
  58.                Dim conexionsql As New SqlClient.SqlConnection("server=localhost;database=bbdd;uid=root;password=pass;")
  59.                 Dim consultahtml As New SqlClient.SqlCommand("SELECT TCLIENTES2 AS NOMBRE, TPEDIDOS1 as NºPEDIDO, TVALORESPEDIDOS3 AS DESC_ART_PED, TVALORESPEDIDOS7 AS CANT_ART_PED
  60.                FROM TPEDIDOS INNER JOIN TVALORESPEDIDOS ON TVALORESPEDIDOS.TVALORESPEDIDOS19=TPEDIDOS.TPEDIDOS1
  61.                 INNER JOIN TCLIENTES ON TCLIENTES.TCLIENTES1 = TPEDIDOS.TPEDIDOS9 WHERE TPEDIDOS2='20160104 00:00:00.000' ORDER BY NOMBRE;")
  62.  
  63.                 Dim consultaCliente As New SqlClient.SqlCommand("")
  64.  
  65.                 consultahtml.Connection = conexionsql
  66.  
  67.                 Dim adaptadorhtml1 As New SqlClient.SqlDataAdapter
  68.                 adaptadorhtml1.SelectCommand = consultahtml
  69.                 Dim datoshtml1 As New DataTable
  70.                 adaptadorhtml1.Fill(datoshtml1)
  71.  
  72.                 Dim adaptadorhtml2 As New SqlClient.SqlDataAdapter
  73.                 adaptadorhtml2.SelectCommand = consultahtml
  74.                 Dim datoshtml2 As New DataTable
  75.                 adaptadorhtml2.Fill(datoshtml2)
  76.  
  77.                 Dim filashtml = datoshtml2.Rows.Count()
  78.                 Dim columnashtml = datoshtml1.Columns.Count()
  79.                 Console.WriteLine(filashtml)
  80.                 Console.WriteLine(columnashtml)
  81.  
  82.                 My.Computer.FileSystem.WriteAllText("prueba.txt", "<table border='1'>", True)
  83.  
  84. 'Aqui es donde anda el problema....              
  85.  
  86.                 For k = 0 To filashtml - 1
  87.                     Dim rowhtml As DataRow = datoshtml2.Rows(k)
  88.                     For l = 0 To columnashtml - 1
  89.                         Dim colhtml As DataColumn = datoshtml1.Columns(l)
  90.                         If Not rowhtml(0) Is Nothing Then
  91.                             My.Computer.FileSystem.WriteAllText("prueba.txt", "<tr><th>" & CStr(rowhtml(0)) & "</th>", True)
  92.                         End If
  93.                         If Not rowhtml(1) Is Nothing Then
  94.                             My.Computer.FileSystem.WriteAllText("prueba.txt", "<th>" & CStr(rowhtml(1)) & "</th></tr>", True)
  95.                         End If
  96.                         'ahora el bucle para los articulos
  97.                        If rowhtml(2) Then
  98.                             My.Computer.FileSystem.WriteAllText("prueba.txt", "<tr><td>" & CStr(rowhtml(2)) & "</td>", True)
  99.                         ElseIf rowhtml(3) Then
  100.                             My.Computer.FileSystem.WriteAllText("prueba.txt", "<td>" & CStr(rowhtml(3)) & "</td></tr>", True)
  101.                         End If
  102.                         Select Case rowhtml(l)
  103.                             Case rowhtml(0)
  104.  
  105.                         End Select
  106.                     Next
  107.                 Next
  108.                 My.Computer.FileSystem.WriteAllText("prueba.txt", "</table>", True)
  109.  
  110.                 Dim lectorhtml As String
  111.                 lectorhtml = My.Computer.FileSystem.ReadAllText("prueba.txt")
  112.                 mensaje.Body =
  113.                         "<html><body>" & lectorhtml & "</body></html>"
  114.                 mensaje.BodyEncoding = System.Text.Encoding.UTF8
  115.                 mensaje.Priority = System.Net.Mail.MailPriority.High
  116.                 'Configuramos el envio
  117.                Try
  118.                     smtp.Send(mensaje)
  119.                 Catch ex As Exception
  120.                     Console.WriteLine("No se ha podido enviar el mensaje")
  121.                 End Try
  122.                 My.Computer.FileSystem.DeleteFile("prueba.txt")
  123.             Next
  124.         Next
  125.     End Sub
  126. 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
__________________
"He intentado cambiar el mundo, pero no he encontrado el código fuente"