Outlook 365 — Get emails
Outlook 365 — Get emails
Sección titulada «Outlook 365 — Get emails»Tipo: outlook365-get-emails · Paquete: Outlook 365 v1.0.4 · Salida: List<Dictionary<string,object>>
Busca correos en el buzón (o en una carpeta concreta) y devuelve la lista de mensajes que coinciden. Es la actividad con la que normalmente arranca un proceso de correo: localiza lo pendiente y luego recorres la lista.
Cómo funciona
Sección titulada «Cómo funciona»Opera sobre la sesión creada con Outlook 365 — Connect. Pásala en el parámetro session, o coloca esta actividad dentro del body de Outlook 365 — Connect para heredarla automáticamente.
Acota con folder (nombre conocido como inbox o ID de carpeta); sin folder busca en todas las carpetas del buzón, incluidas Enviados y Elementos eliminados. Para filtrar tienes tres caminos, que se combinan así:
| Lo que indicas | Cómo se consulta | Orden del resultado |
|---|---|---|
subject y/o search | Búsqueda de Graph ($search). Si das ambos, se combinan con AND. filter se ignora. | El que decide Graph (con búsqueda no se puede ordenar). |
Solo filter | Filtro OData ($filter). | Más recientes primero (receivedDateTime descendente). |
| Nada | Todos los correos del alcance. | Más recientes primero. |
unreadOnly se suma a cualquiera de los tres. Sin búsqueda se añade al filtro (isRead eq false) y lo resuelve Graph. Con búsqueda Graph no admite filtro a la vez, así que la actividad pide más correos de los que necesitas (maxResults × 4, hasta 200), descarta los leídos y se queda con los primeros maxResults. Si esa página llegó llena, deja un aviso en el log: puede haber más no leídos más allá; acota la búsqueda o quítala para que el filtro lo haga Graph.
subject busca el texto dentro del asunto (las comillas dobles que escribas se quitan). Es la forma de buscar parte de un asunto: el $filter de Graph no admite contains() para correos.
La actividad hace una sola consulta: no pide páginas siguientes. Para volúmenes grandes, procesa por lotes: marca, categoriza o mueve lo ya procesado y vuelve a consultar.
Parámetros requeridos
Sección titulada «Parámetros requeridos»Ninguno.
Parámetros opcionales
Sección titulada «Parámetros opcionales»| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
session | ZoanOutlookMailSession | — | Sesión de Outlook 365 — Connect (se hereda dentro del body). |
folder | string | — | Carpeta: nombre conocido (inbox, sentitems, drafts, deleteditems, archive, junkemail) o ID de carpeta. Vacío = todas las carpetas. Busca solo en esa carpeta, no en sus subcarpetas. |
subject | string | — | El asunto contiene este texto (p. ej. Factura). Se ejecuta como búsqueda ($search) sobre el asunto. |
unreadOnly | bool | false | Devolver solo los correos no leídos. |
search | string | — | Búsqueda de texto completo de Graph ($search, sintaxis KQL), p. ej. from:proveedor@example.com factura o hasAttachments:true. No escribas comillas dobles dentro. |
filter | string | — | Filtro OData ($filter), p. ej. isRead eq false, hasAttachments eq true, startswith(subject,'Factura'), receivedDateTime ge 2026-10-01T00:00:00Z. Admite eq, ne, startswith, comparaciones de fechas y and/or; no admite contains(). Se ignora si usas search o subject. |
maxResults | int | 25 | Número máximo de correos. Un valor vacío, no numérico o menor que 1 usa 25. |
includeBody | bool | false | Incluir el cuerpo de cada correo (claves body y bodyType). Hace la respuesta más pesada; actívalo solo si vas a leer el contenido. |
Devuelve un List<Dictionary<string,object>>: una lista en la que cada elemento es un correo con estas claves.
| Clave | Tipo | Contenido |
|---|---|---|
id | string | ID del mensaje en Graph. Es la entrada de las demás actividades. Cambia si el correo se mueve de carpeta. |
subject | string | Asunto. |
from | string | Dirección del remitente (ana@example.com). |
fromName | string | Nombre visible del remitente. |
to | List<string> | Direcciones de los destinatarios. |
cc | List<string> | Direcciones en copia (lista vacía si no hay). |
receivedDateTime | string | Fecha y hora de recepción en ISO 8601 con zona, en UTC (2026-10-15T14:03:22.0000000+00:00). |
preview | string | Primeros caracteres del cuerpo, en texto plano. |
isRead | bool | true si ya está leído. |
hasAttachments | bool | true si tiene adjuntos. |
categories | List<string> | Categorías de Outlook asignadas. |
webLink | string | Enlace para abrir el correo en Outlook en la web. |
body | string | Contenido del cuerpo (HTML o texto, según bodyType). null si includeBody es false. |
bodyType | string | Html o Text. null si includeBody es false. |
Si nada coincide, devuelve una lista vacía (no falla). Recórrela con un For each y accede por clave (correo["subject"]).
Errores comunes
Sección titulada «Errores comunes»| Mensaje | Causa y solución |
|---|---|
Microsoft Graph no admite contains() en $filter para mensajes; … | El filter usa contains(). Para buscar parte del asunto usa subject; para otras búsquedas, search. |
No hay una sesión de Outlook 365 disponible. … | No pasaste session y la actividad no está dentro del body de Connect. |
Error de Graph ErrorInvalidIdMalformed o ErrorItemNotFound al consultar la carpeta | El valor de folder no es un nombre conocido ni un ID de carpeta válido. |
Error de Graph BadRequest con el filtro | La expresión OData no es válida (comillas simples en textos, propiedades con su nombre de Graph: isRead, subject, receivedDateTime…). Prueba primero sin filter para aislar el problema. |
Ejemplo
Sección titulada «Ejemplo»Procesar las facturas no leídas de la bandeja de entrada, guardar sus adjuntos y archivarlas:
Outlook 365 — Connect credential = credential("m365-facturas") └─ body: Outlook 365 — Get emails folder = "inbox" subject = "Factura" unreadOnly = true maxResults = 50 → output: pendientes For each correo in pendientes └─ Outlook 365 — Download attachments id = correo["id"] folder = "C:\facturas\entrada" → output: archivos Log message = str(correo["fromName"]) + ": " + count(archivos) + " adjunto(s)" Outlook 365 — Move id = correo["id"] destination = "archive"Con un filtro OData (más recientes primero):
Outlook 365 — Get emails folder = "inbox" filter = "hasAttachments eq true and receivedDateTime ge 2026-10-01T00:00:00Z" → output: conAdjuntosActividades relacionadas
Sección titulada «Actividades relacionadas»- Outlook 365 — Get email by ID — traer un correo completo.
- Outlook 365 — Download attachments — guardar los adjuntos.
- Outlook 365 — Move — archivar el correo procesado.
- Todas las actividades de Outlook 365