Instalación
Uso
threading: 'thread'(por defecto, un chat por hilo) o'sender'(un chat por dirección); persiste los hilos conthreadStore: cursorThreadStore(store). Ese store guarda también el cursor de UID del buzón, así que tras un reinicio el bot sigue después del último mensaje que procesó y no vuelve a entregar correo (ni siquiera conmarkSeen: false).- Protección contra bucles de respuestas automáticas y listas de correo,
gestión de rebotes (eventos
status: 'failed', supresión de direcciones con rebote permanente). - El email no autentica
Frompor sí mismo: usarequireAuthentication: { authservId }para aceptar solo correo que tu MTA haya autenticado. Las cabeceras hostiles quedan contenidas: se descartan las direcciones con caracteres de control, se ignoran los Message-ID enormes y se acota la cadena deReferences. securees TLS implícito (por defecto salvo en el puerto IMAP 143, y solo en el puerto SMTP 465); contra un puerto en texto plano o con STARTTLS,start()/send()rechazan con un mensajeTLS handshake failedque dice qué opción cambiar.- Sin IMAP,
ingest(rawMime)acepta el MIME crudo de un webhook de correo entrante y resuelve{ status, accepted, reason? }. - El transporte creado desde
smtpse cierra enstop()y se reconstruye en el siguiente envío (también con pool); unsmtpTransportinyectado es tuyo ystop()nunca lo cierra.
Siguientes pasos
- Canales: elegir un canal, la matriz de capacidades y el contrato común de los canales.
- Store persistente: conserva hilos y el cursor del buzón entre reinicios.
- README del paquete