Guía completa: Personalizar Correos con HTML
Esta guía explica a fondo cómo funcionan los Formatos de Envío de Correos de AdmCloud: la diferencia entre el editor Visual y el editor HTML/Razor, qué ocurre internamente cuando se envía un correo, cómo crear y configurar un formato, cómo usar las variables del documento con ejemplos, dónde consultar las variables disponibles, cómo probar el resultado y cómo dejar el formato activo. Es la contraparte, para correos, de la Guía de Formatos de Impresión; comparte el mismo motor y el mismo modelo de datos.
¿Qué es y cómo funciona por dentro?
Cuando AdmCloud envía por correo una factura, una cotización, una orden de compra, un estado de cuenta, etc., usa un cuerpo de correo por defecto. Un Formato de Envío de Correo te permite reemplazar ese cuerpo estándar por uno propio: diseñas el correo (con tu logo, tus colores, tus textos) e insertas los datos reales del documento (número, cliente, total, etc.).
El ciclo completo es:
- Asocias el formato a un tipo de documento (el campo Objeto). Ese tipo determina qué datos estarán disponibles: cada tipo de documento tiene su propio "modelo" de datos, exactamente igual que en los formatos de impresión.
- Escribes el cuerpo del correo, ya sea con el editor Visual (arrastrar y escribir) o con el editor HTML/Razor (código).
- Lo activas como formato por defecto de ese tipo de documento (en Formatos de Envío de Correos por Defecto).
- Al enviar el documento, AdmCloud carga el documento real, construye su modelo de datos, compila tu formato reemplazando cada expresión por el valor real y usa el resultado como cuerpo del correo.
No confundas esta pantalla con otras dos parecidas: Redacción y Envío de Correos es la ventana desde la que envías un correo puntual (y puedes cargar un formato para prellenarlo), y Formatos de Envío de Correos por Defecto es donde asignas qué formato se usa por defecto en cada tipo de documento. Aquí, en Formatos de Envío de Correos, es donde diseñas y guardas los formatos.
Los dos tipos de editor
Al crear un formato eliges entre dos editores, y esta decisión determina qué puedes hacer y cómo se usa el formato:
| Editor | Para qué sirve |
|---|---|
| Visual | Un editor de texto enriquecido (tipo procesador de texto): escribes, das formato, insertas imágenes y tablas sin tocar código. Ideal para correos sencillos. Es el tipo de formato que puedes elegir y cargar manualmente desde la ventana de Redacción y Envío de Correos. |
| HTML |
Un editor de código donde escribes HTML combinado con Razor (@Model.Propiedad),
con control total del diseño y de los datos que se insertan. Es el tipo pensado para
asignarse como formato por defecto de un documento,
donde AdmCloud lo compila con Razor al enviar.
|
Diferencia importante: los formatos HTML asignados por defecto se procesan con Razor completo (condicionales, ciclos, formato de valores). Los formatos Visual cargados manualmente en la ventana de envío hacen solo una sustitución simple de variables (por eso no admiten ciclos ni condicionales). Si necesitas lógica —por ejemplo recorrer las líneas de una factura— usa el editor HTML y asígnalo por defecto.
Lenguaje que soportan los formatos HTML
Los formatos de tipo HTML se escriben en HTML para la estructura y el estilo, combinado con Razor (la sintaxis de las vistas de ASP.NET, basada en C#) para insertar datos y aplicar lógica. Puedes usar:
- Cualquier HTML y CSS: tablas, imágenes, estilos en línea o en una etiqueta
<style>, colores, tipografías, etc. (procura HTML compatible con clientes de correo). - Expresiones de datos con
@Model.Propiedad(por ejemplo@Model.Relationship.Name). - Condicionales con
@if (...) { ... }. - Ciclos con
@foreach (var linea in Model.Header.Items) { ... }. - Formato de valores con métodos de .NET, por ejemplo
@Model.Header.DocDate.ToString("dd/MM/yyyy")o@Model.Header.TotalAmount.ToString("#,##0.00").
Como el cuerpo es un correo con estilos CSS, recuerda que en CSS un @ literal
(por ejemplo en @media) se escribe duplicado (@@media) para que
Razor no lo confunda con una expresión de datos.
Por seguridad, el código de un formato solo puede leer y mostrar los datos del
documento. El sistema bloquea el guardado si detecta instrucciones consideradas
peligrosas (acceso a la base de datos, cadenas de conexión, configuración del sistema, etc.).
El código solo puede usar lo permitido en los formatos: no puede leer archivos, variables del sistema ni
usar reflection (GetType(), typeof); si lo intenta, el sistema rechaza el
guardado (y la vista previa) indicando qué elemento y en qué línea. Además, un formato que tarda más de
30 segundos (por ejemplo, por un ciclo que nunca termina) o una función que se llama a sí misma sin fin se
detienen con un error en lugar de imprimirse.
Cómo crear un formato, paso a paso
- Entra a Formatos de Envío de Correos y usa el menú Nuevo. Puedes elegir Correo Vacío (Editor Visual), Correo Vacío (Editor HTML), o partir de un formato de ejemplo ya armado para un documento concreto (la lista solo muestra los documentos habilitados en tu plan).
- En Nombre, escribe un nombre único y descriptivo. Ten en cuenta que el Nombre hace también de asunto sugerido: al cargar el formato en la ventana de envío, su Nombre se coloca en el campo Asunto del correo. Por eso conviene un nombre que funcione como asunto (por ejemplo, "Su factura de [Empresa]").
- En Objeto, selecciona el tipo de documento al que aplica. Define qué variables tendrás disponibles.
- Escribe el cuerpo en la pestaña correspondiente: Cuerpo (editor Visual) o HTML Cuerpo (editor HTML). Apóyate en la plantilla de ejemplo y en el Diccionario de Datos.
- Pulsa Guardar.
- Actívalo en Formatos de Envío de Correos por Defecto para el tipo de documento correspondiente. Hasta que no lo asignes ahí, el formato guardado no cambia el cuerpo de los correos.
Cómo se configura
| Campo | Para qué sirve |
|---|---|
| Nombre | Identifica el formato en la lista y al asignarlo por defecto. Obligatorio y único. Además se usa como asunto sugerido al cargar el formato en la ventana de envío. |
| Objeto | Tipo de documento al que aplica. Determina las variables disponibles. |
| Tipo (Visual / HTML) | Editor y modo de procesamiento del cuerpo (ver arriba). |
| Cuerpo / HTML Cuerpo | El contenido del correo: texto enriquecido (Visual) o código HTML + Razor (HTML). |
| Propietario | Usuario responsable del formato. |
| Solo permitir acceso a la estructura al propietario | Si está activo, solo el Propietario puede ver o editar el código; los demás solo pueden usar el formato si está asignado por defecto. |
Las variables del Model: cómo funcionan
El objeto Model representa el documento del correo. Accedes a sus datos con
@Model. seguido del nombre de la propiedad, encadenando con puntos:
@Model.Relationship.Name (el cliente), @Model.CompanyInfo.CompanyName (tu
empresa), @Model.Header.DocID (el número del documento). Es el mismo modelo de
datos que usan los formatos de impresión, con algunas
variables propias del correo:
| Variable | Qué contiene |
|---|---|
Model.CompanyInfo | Los datos de tu empresa: razón social, RNC/RFC, dirección, teléfonos, correo. |
Model.Relationship | El cliente, proveedor o contacto del documento (por ejemplo Model.Relationship.Name o Model.Relationship.EMail). |
Model.Header | El encabezado de la transacción: número (DocID), fecha (DocDate), total (TotalAmount), etc. |
Model.Header.Items | Las líneas del documento, para recorrerlas con un ciclo (solo en formatos HTML). |
Model.Logo | El logo configurado de tu empresa. |
Model.Message | El mensaje personalizado que el usuario escribe al momento de enviar el correo. |
Model.Host / Model.HostName | La dirección del sistema, útil para armar enlaces de vuelta a AdmCloud. |
Model.CreditCardPaymentLink | Enlace de pago con tarjeta (en documentos que lo admiten), para que el cliente pague desde el correo. |
Los nombres de las variables distinguen mayúsculas y minúsculas y siempre van
precedidos de Model.. Un nombre mal escrito o inexistente para el Objeto seleccionado
produce un error al enviar.
Ejemplo de formato HTML
Este es un cuerpo de correo sencillo para el envío de una factura a crédito. Muestra el logo (o el nombre de la empresa), un saludo con el mensaje personalizado del usuario, y los datos del comprobante:
<div style="font-family:Arial,sans-serif; color:#333;">
@if (Model.Logo != null)
{
<img src="@Model.Logo.URI" alt="Logo" style="max-height:60px;" />
}
else
{
<h2>@Model.CompanyInfo.CompanyName</h2>
}
<p>Estimado(a) @Model.Relationship.Name,</p>
@if (!string.IsNullOrEmpty(Model.Message))
{
<p>@Model.Message</p>
}
<p>
Le adjuntamos la factura <strong>@Model.Header.DocID</strong>,
de fecha @Model.Header.DocDate.ToString("dd/MM/yyyy"),
por un total de @Model.Header.TotalAmount.ToString("#,##0.00").
</p>
@if (!string.IsNullOrEmpty(Model.CreditCardPaymentLink))
{
<p><a href="@Model.CreditCardPaymentLink">Pagar en línea</a></p>
}
<p>Saludos cordiales,<br />@Model.CompanyInfo.CompanyName</p>
</div>
Los nombres exactos de las propiedades varían según el documento. Confírmalos siempre en el Diccionario de Datos del tipo de documento antes de darlos por hechos.
Dónde consultar las variables disponibles
Los Formatos de Envío de Correos no tienen su propio diccionario de datos ni vista previa; comparten el modelo de datos con los formatos de impresión, así que consultas las variables ahí:
- Abre el mismo tipo de documento en Formatos de Impresión con HTML y usa su pestaña Diccionario de Datos para ver el nombre y el tipo de cada propiedad.
-
O consulta la pantalla Variables HTML para Formatos de Impresión
(dirección
/PFDocumentation), que documenta, documento por documento, cada campo y su tipo. -
Recuerda además las variables propias del correo listadas arriba (
Model.Message,Model.Host,Model.CreditCardPaymentLink,Model.Logo).
Cómo probar el resultado
A diferencia de los formatos de impresión, la pantalla de Formatos de Envío de Correos no tiene vista previa en vivo. La forma recomendada de probar un formato es:
- Guarda el formato.
- Ve a un documento real de ese tipo y envíalo por correo eligiendo manualmente tu formato en la ventana de Redacción y Envío de Correos (idealmente a tu propia dirección).
- Revisa el correo recibido y ajusta el formato si es necesario, antes de asignarlo como predeterminado.
En la ventana de envío, cuando cargas un formato de tipo HTML, el editor se pone en solo lectura para no dañar su diseño; los formatos Visual sí se pueden editar ahí antes de enviar.
Activar el formato y otras opciones
- Activarlo por documento: asígnalo en Formatos de Envío de Correos por Defecto, que tiene un espacio por cada tipo de documento (factura a crédito, factura de contado, notas, cotización, pedido, orden de compra, estado de cuenta, comprobante de pago, solicitudes de servicio, permisos, etc.).
- Notificaciones por cambio de estado: un formato puede adjuntarse a la notificación por correo de un cambio de estado de documento (por ejemplo, en solicitudes de servicio).
- Plugins: un formato puede empaquetarse dentro de un Plugin publicado.
- Control de acceso por Propietario, con la opción de restringir la edición y consulta del código solo a esa persona.
- Transferir a otra empresa que administras (requiere edición Enterprise con la función "Crear Plugins").
La asignación por defecto es a nivel de empresa (no hay una asignación por sucursal como sí ocurre con los formatos de impresión). Si un documento no tiene formato asignado, AdmCloud usa el cuerpo de correo estándar del sistema.
Consejos y errores comunes
Empieza siempre desde un formato de ejemplo del documento que necesitas (menú "Nuevo") en lugar de partir de cero: ya trae una estructura de correo probada y las variables más comunes ya usadas.
¿El correo llega con un error o con texto tipo @Model... sin reemplazar?
Revisa que cada @Model.Propiedad exista para el Objeto seleccionado (consúltalo en el
Diccionario de Datos), que el @ de tu CSS esté duplicado (@@media) y que
el formato sea de tipo HTML si usas ciclos o condicionales.
¿Guardaste el formato pero los correos siguen saliendo con el cuerpo anterior? Falta asignarlo en Formatos de Envío de Correos por Defecto para el tipo de documento; guardar el formato por sí solo no lo activa.