Spanish Enviar un Mail definiendo el cuerpo con HTML

fchirico

Member
Estimados,

Desde una App estoy enviando un mail, en el cuerpo envío el detalle del pedido de ventas cargado.
Quiero constuir el cuerpo del mail utilizando HTML para que quede más estético (así lo hago en otros lenguajes) pero en B4A me pega el contenido "literal" de la variable en vez de interpretar el código HTML correspondiente.

Adjunto la rutina de envío del mail:

B4X:
Sub EnviarCorreoDeConfirmacion
    Dim cEncab As String
    Dim cBody  = " " As String
    Dim i As Int
    Dim cMsg As String


    cEncab = $"
    <!DOCTYPE html Public "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
    
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Arimex Importadora S.A.</title>
    </head>
    
    <body>

    <h1>Su pedido: ${cNumPed} Sucursal: ${Main.cSucursal} </h1>
    <h1>Fecha: ${Main.cFecha} </h1>
    <h1>Cliente: ${lbl_NomCli.text}  -  ${lbl_CodCli.text}/${lbl_LojaCli.text}  </h1>
    <h1>Vendedor:  ${lbl_CodVen.text} - Usuario GA.MA Tools:  ${Main.cUSR_usuario} </h1>
    <h1>Canal: ${cCanal}  Condición de Pago:  ${edt_CondPa.text} Dto.Global: ${lbl_DtoG01.text}</h1>
    <h1>Dirección de Entrega: ${edt_DirEntre.text} </h1>
    <h1>Mensaje para Factura: ${edt_MensajeFac.text} </h1>
    <table>
      <tr>
        <th scope="col">Producto</th>
        <th scope="col">Nombre producto</th>
        <th scope="col">Precio unitario</th>
        <th scope="col">Unidades</th>
        <th scope="col">Dto.de Linea</th>
      </tr>"$

    For i = 0 To nIndiceLineaPedido - 1
        If User4(i).LinPed_Cantidad > 0 Then
            cBody = cBody & $"<tr>
            <td>${User4(i).LinPed_CodProd}</td>
            <td>${User4(i).LinPed_DescriPro}</td>
            <td>${User4(i).LinPed_Precio}</td>
            <td>${User4(i).LinPed_Cantidad}</td>
            <td>${User4(i).LinPed_DtoLin} </td>
            </tr>"$
        End If
    Next

    cEncab = cEncab & cBody & $"</table>     </body>     </html>"$

'    cBody = $"Felicitaciones!
'   
'    Se ha generado el pedido ${cNumPed} en la sucursal: ${Main.cSucursal} existosamente.
'
'    Fecha: ${Main.cFecha}
'   
'    Cliente: ${lbl_NomCli.text}
'             ${lbl_CodCli.text}/${lbl_LojaCli.text}
'             
'    Vendedor: ${lbl_CodVen.text}    Usuario GA.MA Tools: ${Main.cUSR_usuario}
'    Canal: ${cCanal}  Condición de Pago:  ${edt_CondPa.text} Dto.Global: ${lbl_DtoG01.text}
'   
'    Dirección de Entrega: ${edt_DirEntre.text}
'    Mensaje para Factura: ${edt_MensajeFac.text}
'   
'     "$
'
'    For i = 0 To nIndiceLineaPedido - 1
'        If User4(i).LinPed_Cantidad > 0 Then
'            cBody2 = cBody2 & $"
'            Prod.: ${User4(i).LinPed_CodProd} / ${User4(i).LinPed_DescriPro}  Cant.: ${User4(i).LinPed_Cantidad} Precio s/dto.: ${User4(i).LinPed_Precio}  Dto.de Linea: ${User4(i).LinPed_DtoLin}
'            "$
'        End If
'    Next
'
'    cBody = cBody & cBody2
    
    Main.sendmail.Send(Main.cUSR_email,File.DirInternal, cEncab, "GA.MA Tools - Pedido generado: " & cNumPed & " (" & Main.cEntorno & ")", "")
End Sub

Por favor me podrían decir qué estoy haciendo mal o qué me falta?

Muchas gracias!
 

IdasI4A

Active Member
Licensed User
Longtime User
Yo utilizo SMTP incluido en la libreria NET
B4X:
Sub Process_Globals
    Dim SMTP As SMTP
End Sub
Sub Globals

End Sub

Sub Activity_Create(FirstTime As Boolean)
    If FirstTime Then
        SMTP.Initialize("smtp.gmail.com", 587, "[email protected]", "mypassword", "SMTP")
        SMTP.StartTLSMode = True
    End If
    SMTP.To.Add("[email protected]")
    SMTP.Subject = "This is the subject"
    SMTP.Body = TextoHTML
    SMTP.HtmlBody=True
    SMTP.AddAttachment(File.DirRootExternal, "somefile")
    SMTP.Send
End Sub
Sub SMTP_MessageSent(Success As Boolean)
    Log(Success)
    If Success Then
        ToastMessageShow("Message sent successfully", True)
    Else
        ToastMessageShow("Error sending message", True)
        Log(LastException.Message)
    End If
End Sub
 

fchirico

Member
Gracias,

Intenté usar pero me dá error de autenticación.
Estuve probando pero no lo pude resolver, es extraño porque con la misma cuenta envió con la clase clsSendMail.

De todas formas no es exactamente lo que necesito, ya que la clase clsSendMail lo que hace es abrir el mail, lo llena automáticamente con los datos que se le pasa por la función, pero además te dá la posibilidad de escribir lo que quieras y agregar destinatarios, es decir te presenta en pantalla los datos y si quieres lo puedes modificar.

Gracias, de todas formas seguro seguiré intentando otro día.
 

josejad

Expert
Licensed User
Longtime User
¿Has probado a intentar depurar el html empezando con lo más básico a ver si hay algún problema?

Por ejemplo:
B4X:
cEncab = $"
<b>Prueba HTML</b>
"$
 

fchirico

Member
¿Has probado a intentar depurar el html empezando con lo más básico a ver si hay algún problema?

Por ejemplo:
B4X:
cEncab = $"
<b>Prueba HTML</b>
"$

He probado y no funciona, esto es lo que hace exactamente, pega el TEXTO DE FORMA LITERAL
 

Attachments

  • Captura.JPG
    Captura.JPG
    33.2 KB · Views: 174

josejad

Expert
Licensed User
Longtime User
Veo en la clase que utilizas, que en la sub SendEmail tiene:
B4X:
EmailIntent.SetType("text/plain") 'it is not related to the file itself.

Prueba a cambiarla por "text/html"
 

fchirico

Member
Veo en la clase que utilizas, que en la sub SendEmail tiene:
B4X:
EmailIntent.SetType("text/plain") 'it is not related to the file itself.

Prueba a cambiarla por "text/html"

Sí, eso lo he cambiado y de hecho lo tengo como "text/html" y tampoco funciona.

Gracias.
 
Top