HelpStackDocs

Integraciones

Canal de email

Conecte un buzón de correo como canal de HelpStack: el correo entrante se sondea mediante IMAP y las respuestas se envían mediante SMTP.

Datos rápidos#

Tipo de canalEMAIL
EntranteWorker de sondeo IMAP (npm run email:poll)
SalienteSMTP mediante nodemailer (credenciales del canal)
CredencialesAlmacenadas cifradas (AES-256-GCM) por canal
Seguridad del transporteIMAP sobre TLS
Intervalo de sondeo~10s (desarrollo) / ~60s (producción)

Entrante: sondeo IMAP#

Un worker en segundo plano se conecta al servidor IMAP de cada canal EMAIL activo (TLS) y, en cada ciclo:

  1. Obtiene el correo reciente no procesado.
  2. Parsea texto, HTML y adjuntos.
  3. Deduplica por message-id + preview (para que el mismo correo no se ingiera dos veces).
  4. Crea una conversación identificada por la dirección de email del remitente.
  5. Sube los adjuntos al almacenamiento.
  6. Marca el correo como procesado.

Cómo se rastrea el estado "procesado"

El poller prefiere una palabra clave IMAP personalizada $HelpStackProcessed, que deja el indicador \Seen intacto (de modo que el mensaje sigue pareciendo no leído en otros clientes). Si el servidor no admite palabras clave personalizadas, recurre al indicador \Seen.

Recomendación: use un buzón dedicado para el canal. Si el servidor no admite palabras clave personalizadas, HelpStack depende de \Seen para evitar reingerir correo — compartir el buzón con un lector humano (que marca cosas como leídas/no leídas) puede causar ingestión omitida o duplicada.

Hilos de conversación

La información de hilos se almacena en los metadatos de la conversación para que las respuestas se encadenen correctamente:

Campo de metadatosOrigen
emailSubjectAsunto del correo entrante
emailMessageIdCabecera Message-ID
emailReferencesCadena References / In-Reply-To

Ejecutar el poller

npm run email:poll

Ejecute este worker junto con la aplicación (y el worker de la cola de mensajes) para que el email entrante sea ingerido. En producción sondea aproximadamente cada 60s; en desarrollo aproximadamente cada 10s.

Variables de entorno ajustables#

VariablePor defectoPropósito
EMAIL_MAX_BODY_BYTES~100 KBTamaño máximo del cuerpo ingerido; los cuerpos más largos se truncan
EMAIL_MIN_ATTACHMENT_BYTES~1 KBLos adjuntos menores a esto se omiten (filtra píxeles de seguimiento)
EMAIL_MAX_AGE_DAYS5Ignorar correo más antiguo que este número de días
IMAP_ALLOW_SELF_SIGNEDSolo desarrollo — aceptar certificados TLS IMAP autofirmados

Cifrado#

Las credenciales IMAP/SMTP de cada canal se almacenan cifradas con AES-256-GCM. El panel de control proporciona un botón Test que valida las credenciales configuradas (se conecta y autentifica) antes de que las guarde/utilice.

Campos de credenciales verificados para un canal de email (credentials):

host, port, username, password, from,
secure?, imapHost?, imapPort?, imapSecure?, imapAllowSelfSigned?

Saliente: SMTP mediante nodemailer#

Las respuestas se envían mediante SMTP usando nodemailer con las propias credenciales SMTP del canal: host, port, secure, user, pass y from. El envío saliente lo gestionan los senders de la cola de mensajes.

SMTP del canal vs. SMTP de notificaciones del sistema

Estas son dos rutas de correo separadas — no las confunda:

SMTP del canalSMTP de notificaciones del sistema
PropósitoRespuestas a clientes en un canal EMAILEmails de notificación de la plataforma/sistema
CredencialesPor canal, cifradasVariables de entorno
Configurado medianteConfiguración del canalSMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, SMTP_SECURE, SMTP_FROM
Remitente por defectoEl from del canalnoreply@helpstack.eu

Los emails de notificación del sistema (p. ej. mensajes de cuenta/sistema) siempre usan el SMTP configurado mediante variables de entorno y el remitente por defecto noreply@helpstack.eu, independientemente de cualquier canal.

Relacionado#