Addons estándar / Módulo de envío de mailings / Instalación y soporte
Registro de cambios
Qué cambió en cada versión del módulo y, sobre todo, qué hay que desplegar para llevarla a una instalación. En orden cronológico inverso: la versión más reciente arriba.
Antes de actualizar un cliente, busca aquí su versión actual y lee todas las entradas por encima de ella. Las tres reglas que gobiernan la línea de despliegue de cada entrada:
- El diccionario y la App viajan juntos. Los dos forman parte de la extensión de a3ERP, en
Extensiones\Sofitec\SIT_MAILER, y al actualizar la extensión se aplican a la vez. No hay nada que ordenar entre ellos. - El servicio de envío va aparte.
Sit.Mailer.Sender.exeno está en la extensión: se instala en el servidor, por convención bajoC:\SIT\, con su propio instalador, y lo lanza una tarea programada. Es la pieza que se olvida en una actualización. - Si cambia
Sit.Mailer.Entities, hacen falta las dos partes. Esa librería va dentro de los dos ejecutables y es donde se validan las longitudes de la tabla antes de hablar con SQL Server, así que una mitad sin actualizar rechaza filas que la otra sí acepta. Cuando una entrada lo indique, el Sender no puede quedarse atrás de la extensión.
28/09/2026 · App 2.3.3.1 · Sender 1.4.0.1 · Entities 1.1.0.1#
Los adjuntos vinculados los decide la consulta. La casilla de adjuntar los documentos ya no busca los ficheros por su cuenta: adjunta las rutas que la vista devuelva, separadas por |, en una columna nueva configurada en AttachmentsColumnName (por defecto Archivos vinculados). Hasta ahora la búsqueda partía del número de vencimiento de la columna de operación posterior, así que solo servía para vencimientos de factura, y de un único vencimiento por correo. Ahora vale para cualquier documento al que sepa llegar la consulta. Si la vista no devuelve la columna, se avisa al pie de la pantalla. Cómo escribirla está en Configuración.
Sin adaptar la configuración, la casilla deja de adjuntar
En las instalaciones que usen la casilla, al actualizar hay que añadir AttachmentsColumnName al appsettings.json de la extensión y la columna a cada vista que adjunte documentos. Si falta la clave, la casilla no adjunta nada y no hay ningún aviso. Si lo que falta es la columna en una vista, los correos salen solo con los adjuntos de la plantilla y el aviso del pie lo indica.
Un fichero de log por día, y el log ya no puede parar el módulo. Los dos componentes escriben en <nombre>_<fecha>.log, a partir de Logging:File:Path, y si no pueden abrir ese fichero escriben en uno propio de la cuenta, <nombre>_<usuario>_<fecha>.log. Antes el nombre era fijo, y si el fichero existente no se podía abrir —porque lo creó otra cuenta o lo tenía abierto otro proceso— el servicio de envío terminaba sin enviar ningún correo y sin escribir nada, con la tarea programada marcada como correcta, y la extensión se cerraba nada más abrirla si otro usuario ya la tenía abierta. Lo detalla Configuración.
Los logs antiguos no se borran solos
Cada día de uso deja un fichero por componente, vacío si no hubo nada que registrar con el nivel configurado, y el módulo no borra los de días anteriores. Sit.Mailer.App.log y Sit.Mailer.Sender.log, los de nombre fijo, dejan de escribirse y se pueden borrar.
Sit.Mailer.Entities deja de inicializar la base de datos desde Entity Framework. Si en la base quedaba una tabla __MigrationHistory de alguna prueba con Code First, cualquier cambio posterior en la entidad hacía fallar el acceso a la cola con el error The model backing the context has changed. La tabla de la cola la crea el diccionario, así que Entity Framework no tiene nada que comprobar.
Despliegue: actualizar las dos partes, la extensión de a3ERP y Sit.Mailer.Sender.exe en el servidor, porque cambian las dos y también Sit.Mailer.Entities, que va dentro de cada una. El diccionario no cambia. Si se usa la casilla de adjuntar, adaptar además el appsettings.json y las vistas de la extensión, como indica el aviso de arriba.
03/08/2026 · App 2.3.2.0#
El directorio de adjuntos solo se rellena si el correo lleva adjuntos. Desde la 2.2.0.0 se guardaba siempre una ruta temporal, aunque no hubiera ningún fichero que adjuntar, y en las instalaciones con nombres de plantilla largos eso desbordaba la columna de 150 caracteres y el proceso fallaba con un error de validación en todas las filas, sin encolar ni un correo. Ahora, en un envío sin adjuntos, la columna se queda vacía y la carpeta temporal ni se crea.
El error de validación de Entity Framework pasa además a registrarse indicando el campo y la regla que fallan. Antes, tanto el log como el aviso al usuario mostraban solo el texto genérico Validation failed for one or more entities, que no permite saber qué corregir.
El límite de 150 caracteres sigue ahí
Esta versión evita el fallo en los envíos sin adjuntos, que son la mayoría, pero no amplía la columna. Si el usuario marca la casilla de adjuntar los documentos y el nombre de la plantilla es largo, el error vuelve a aparecer, ahora sí diciendo cuál es el campo. La solución inmediata es acortar el nombre de la plantilla, teniendo en cuenta que ese nombre es el asunto del correo, así que la decisión no es solo técnica.
Despliegue: actualizar la extensión de a3ERP, que es donde vive la App. El diccionario no cambia y el servicio de envío tampoco.
31/07/2026 · App 2.3.1.0#
La columna de operación posterior pasa a ser opcional. Si la clave PostOperationColumnName no está en el appsettings.json, el módulo no la usa y la pantalla abre con normalidad; antes lanzaba un error de configuración y no se podía ni abrir. Y si la clave está configurada pero la vista elegida no devuelve esa columna, los correos se encolan igualmente sin operación posterior y se avisa en un mensaje al pie de la pantalla, al refrescar la vista; antes fallaban todas las filas al procesar y no se generaba ningún correo.
La consecuencia práctica es que las vistas que no tengan nada que registrar en a3ERP ya no necesitan arrastrar una columna de relleno.
Se muestra además el indicador de espera al pulsar Actualizar y Procesar. Antes la ventana se quedaba sin repintar y parecía colgada.
Limitación conocida: el indicador no se anima
El indicador aparece con su mensaje, pero se queda quieto, porque el trabajo se hace en el hilo de la interfaz. El módulo está trabajando igual. Si un usuario pregunta, es esto y no un cuelgue.
Despliegue: actualizar la extensión de a3ERP, que es donde vive la App. El diccionario no cambia y el servicio de envío tampoco.
31/07/2026 · App 2.3.0.0 · Sender 1.4.0.0 · Entities 1.1.0.0#
El diccionario DSIT_FEDMAILING cambia en esta versión. La columna SIT_FED_POST_OPERATION pasa de varchar(1000) a varchar(8000).
El JSON de operación posterior lleva un elemento por registro afectado, no uno por correo, así que las vistas que resumen mucha cartera desbordaban el límite y la fila se rechazaba al procesar con un error de validación. El techo pasa de unos 7 a unos 58 registros por correo.
No te dejes el servicio de envío
La longitud está declarada dos veces, en el diccionario y en Sit.Mailer.Entities, y manda la más corta. Actualizar la extensión de a3ERP y olvidar el Sender es el peor de los casos: la App ya encola filas largas, el Sender viejo envía el correo y luego se niega a sellar la fecha, y esa fila vuelve a la cola, con lo que el mismo correo se reenvía en cada pasada de la tarea programada. Si por lo que sea hay que hacerlo en dos momentos, el Sender primero: acepta sin problema las filas cortas que escribe una App antigua.
Despliegue: actualizar la extensión en a3ERP, que aplica a la vez el diccionario y Sit.Mailer.App.exe, y actualizar Sit.Mailer.Sender.exe en el servidor.
23/02/2026 · App 2.2.0.0#
Se pueden enviar los ficheros vinculados a los documentos de a3ERP, con una casilla en la pantalla de generación. Hasta entonces solo se adjuntaba lo que hubiera en la carpeta de la plantilla, lo mismo para todos los destinatarios.
Cómo los encuentra, que no es evidente: la App lee el número de vencimiento del JSON de la columna de operación posterior y con él sube al documento del que salió ese vencimiento, la factura de compra o de venta; de ahí busca en VINCULOS los documentos colgados de esa factura, y cada vínculo guarda una ruta de fichero. Esas rutas son los adjuntos. Dicho de otro modo, esa columna no solo registra el envío: es también por donde viaja el dato que localiza los adjuntos.
La casilla solo sirve para vencimientos de factura, y solo para uno
Como toda la búsqueda arranca de la cartera y solo contempla facturas de venta y de compra, un mailing de ofertas o de albaranes no adjuntará nada, ni tampoco un vencimiento de cartera de otro origen. Y cuando sí aplica, la App toma el primer número de vencimiento del JSON y deja de buscar, así que un cliente con varias facturas vencidas recibe solo los documentos de la más antigua. Ninguno de estos casos da error: el correo sale con los ficheros de la plantilla y nadie se entera.
A partir de esta versión el directorio de adjuntos que se guarda en la cola es una carpeta temporal por destinatario, no la carpeta de la plantilla. De ahí dos efectos que conviene conocer al dar soporte: los nombres de plantilla largos pueden desbordar la columna de 150 caracteres, y si la extensión y el servicio corren en máquinas o cuentas distintas, los correos salen sin adjuntos.
Despliegue: actualizar la extensión de a3ERP. El servicio de envío no cambia.
31/05/2024 · App 2.1.0.0 · Sender 1.3.0.0#
NReco.Logging.File pasa a consumirse como paquete NuGet y se elimina del repositorio el proyecto que lo incluía.
Despliegue: actualizar la extensión de a3ERP y el servicio de envío en el servidor.
31/05/2024 · Sender 1.2.2.0#
Corrección: cuando un correo daba error, el servicio se quedaba en bucle intentando enviar ese mismo correo una y otra vez. Desde esta versión, el envío que falla se descarta para el resto de esa ejecución y se reintenta en la siguiente pasada.
Despliegue: actualizar el servicio de envío en el servidor.
15/03/2024 · App 2.0.1.0#
El logger toma el nombre de la clase en la que está, para que el log diga de dónde viene cada línea. Se añade la dirección de notificaciones como copia oculta de todos los envíos, para que quede constancia en ese buzón.
Aquí la versión engaña
Solo se subió la versión de la App, pero la copia oculta se implementó en el Sender. Copiar solo la App deja el cambio a medias.
Despliegue: actualizar la extensión de a3ERP y el servicio de envío en el servidor.
14/03/2024 · App 2.0.0.0 · Sender 1.2.1.0#
Primera versión del módulo estandarizado, con su diccionario DSIT_FEDMAILING. Recoge el arranque del proyecto de los días anteriores: el servicio de envío, su validación de licencia y su instalador. La App arranca en 2.0.0.0 porque el módulo viene de un desarrollo a medida anterior.
Despliegue: instalación completa, la extensión en a3ERP y el servicio de envío en el servidor.