fix(soporte): aviso repetido en Telegram y el acuse al cliente que no salía

Telegram: los avisos se mandaban a todas las configuraciones activas sin mirar
a dónde apuntan. Con el mismo chat cargado en dos filas, cada aviso llegaba dos
veces. Ahora se manda una vez por destino (bot + chat); los chats distintos
siguen recibiendo todos.

Correo al remitente: el camino STARTTLS abría una conexión, hacía StartTLS,
autenticaba… y la descartaba para llamar a smtp.SendMail, que abre otra. La
primera quedaba colgada y el envío real salía por una conexión distinta, que
podía no estar autenticada. Reescrito: una sola conexión, asegurada según la
configuración, y cierre con QUIT.

Y como el acuse se manda en segundo plano, su error moría en el log. Ahora hay
un botón "Enviar correo de prueba" que usa exactamente el mismo camino y
devuelve el error del servidor en pantalla, y el último fallo del acuse real
aparece en el resultado de "Revisar buzón ahora".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-17 20:13:11 -05:00
co-authored by Claude Opus 5
parent 17ed57cb56
commit 5afbd9e375
5 changed files with 168 additions and 53 deletions
+32
View File
@@ -108,6 +108,21 @@
</div>
<p class="text-xs text-slate-400 mt-2">Si se deja vacío, se usará la configuración SMTP general del sistema.</p>
<div class="flex flex-wrap gap-2 mt-3 items-center">
<input x-model="emailPrueba" type="email" placeholder="tu@correo.com"
class="border border-slate-200 rounded-lg px-3 py-2 text-sm outline-none">
<button @click="probarEnvio()" :disabled="ocupado"
class="px-4 py-2 rounded-lg border border-slate-300 text-sm text-slate-700 disabled:opacity-50">
Enviar correo de prueba
</button>
<span x-show="mensajeEnvio" x-text="mensajeEnvio" class="text-sm"
:class="errorEnvio ? 'text-red-600' : 'text-green-600'"></span>
</div>
<p class="text-xs text-slate-400 mt-1">
Sale por el mismo camino que el acuse automático que recibe el cliente cuando se le crea un ticket.
Si esta prueba falla, ese acuse tampoco está llegando.
</p>
</div>
<!-- ─── IMAP entrante ────────────────────────────────────────── -->
@@ -291,6 +306,9 @@ function soporteWebhook() {
ocupado: false,
mensajeImap: '',
errorImap: false,
emailPrueba: '',
mensajeEnvio: '',
errorEnvio: false,
async init() {
try {
@@ -381,6 +399,20 @@ function soporteWebhook() {
this.ocupado = false;
},
async probarEnvio() {
this.ocupado = true;
this.mensajeEnvio = '';
try {
const r = await axios.post('/app/soporte/webhook/probar-envio', { email: this.emailPrueba });
this.errorEnvio = false;
this.mensajeEnvio = r.data?.message || 'Enviado';
} catch (e) {
this.errorEnvio = true;
this.mensajeEnvio = e.response?.data?.error || e.message;
}
this.ocupado = false;
},
probarImap() { return this.llamarImap('/app/soporte/webhook/probar-imap', 'Conexión correcta'); },
revisarAhora() { return this.llamarImap('/app/soporte/webhook/revisar-buzon', 'Buzón revisado'); },
};