Ir al contenido

IMAP Read

Tipo: imap-read  ·  Paquete: SMTP / IMAP Email Activities v1.0.5  ·  Salida: List<ZoanMail>

Lee correos de un servidor IMAP y devuelve una lista de mensajes (ZoanMail). Es el punto de partida de los procesos que reaccionan al correo entrante, con filtros que se aplican en el propio servidor para traer solo lo que te interesa. Es la opción recomendada para leer correo (más completa que POP3).

  1. Se conecta al servidor (por defecto puerto 993 con ssl), inicia sesión y abre la carpeta folder (por defecto INBOX) en solo lectura: leer no marca los correos como leídos ni los cambia.
  2. Busca en el servidor los correos que cumplen todos los filtros indicados. Por defecto trae solo los no leídos (unreadOnly = true).
  3. Si hasAttachments = true, se queda con los que tienen adjuntos.
  4. Toma los limit más recientes (por defecto 10) y descarga cada mensaje completo; con includeAttachments = true también el contenido de los adjuntos.

Filtros de texto (subject, from): el servidor busca que el campo contenga el texto, normalmente sin distinguir mayúsculas. Filtros de fecha (since, before): se comparan por día (sin hora) con la fecha de llegada al servidor; since incluye ese día y before lo excluye.

Los nombres de carpeta son los del servidor, con su separador ("Procesados", "INBOX/Facturas" o "INBOX.Facturas" según el servidor). En Gmail las etiquetas son carpetas ("[Gmail]/Enviados", etc.).

ParámetroTipoPor defectoDescripción
hoststring—Servidor IMAP (ej. imap.gmail.com).
usernamestring—Usuario (normalmente el correo completo).
passwordcredential—Contraseña o App Password. Usa credential("nombre")["password"].
ParámetroTipoPor defectoDescripción
portint993Puerto IMAP.
folderstring"INBOX"Carpeta a leer, con el nombre que usa el servidor.
unreadOnlybooltrueSolo correos no leídos. Pon false para leer todos.
subjectstring—Filtro: el asunto contiene este texto.
fromstring—Filtro: el remitente (nombre o dirección) contiene este texto.
sincestring—Filtro: recibidos desde esta fecha, incluida. Formato YYYY-MM-DD (también acepta un DateTime). Una fecha que no se pueda interpretar se ignora.
beforestring—Filtro: recibidos antes de esta fecha, excluida. Mismo formato que since.
hasAttachmentsboolfalseFiltro: solo correos con adjuntos.
includeAttachmentsboolfalseDescarga el contenido de los adjuntos en .Attachments (nombre, tipo MIME y bytes). Aumenta el tiempo y la memoria con adjuntos grandes.
limitint10Máximo de correos a devolver (los más recientes que cumplen los filtros).
securitystring"ssl"Cifrado: auto, none, ssl o starttls. Ver Cifrado y puertos.

Devuelve una List<ZoanMail> con hasta limit correos, del más antiguo al más reciente dentro de ese grupo. Cada correo trae:

PropiedadContenido
.IdUID del mensaje en la carpeta (texto numérico). Úsalo como mailId en las demás actividades IMAP con la misma folder.
.Subject, .From, .To, .CcAsunto, dirección del remitente y direcciones de destinatarios.
.Body / .IsHtmlTexto plano del correo; si solo trae HTML, el HTML con .IsHtml = true.
.SentAtFecha del encabezado Date (fecha de envío).
.IsReadEstado leído en el servidor.
.AttachmentsAdjuntos con contenido si includeAttachments = true; si no, vacío.

Si ningún correo cumple los filtros, devuelve una lista vacía (no es un error) y lo indica en el log.

MensajeCausa y solución
'host' es obligatorio. / 'username' es obligatorio.Falta el parámetro o la expresión dio null.
Parameter 'password' is of type 'credential' but the value was null. Verify the credential exists in the configured store.La credencial no existe o no se pudo leer. Revisa el nombre y que el Agent esté conectado a Zoan Cloud.
Error de autenticación del servidorUsuario o contraseña incorrectos, la cuenta exige App Password o el acceso IMAP está deshabilitado en el buzón.
Error de carpeta no encontradafolder no existe en el servidor. Revisa el nombre exacto y el separador de subcarpetas.
Error de conexión o de TLSHost o puerto equivocados, o security no corresponde al puerto (993 + ssl, 143 + starttls).

Leer los correos no leídos con “Pedido” en el asunto y adjuntos, guardar los adjuntos y marcar cada uno como leído:

IMAP Read
host = "imap.gmail.com"
username = credential("correo-bot")["user"]
password = credential("correo-bot")["password"]
subject = "Pedido"
since = today().AddDays(-7).ToString("yyyy-MM-dd")
hasAttachments = true
limit = 25
→ output: correos
For Each items = correos itemVariable = correo
└─ activities:
IMAP Save Attachment host = "imap.gmail.com" username = credential("correo-bot")["user"] password = credential("correo-bot")["password"]
mailId = correo.Id outputPath = "C:/pedidos/" + correo.Id
IMAP Mark Read host = "imap.gmail.com" username = credential("correo-bot")["user"] password = credential("correo-bot")["password"] mailId = correo.Id