Ir al contenido

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.

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 indicasCómo se consultaOrden del resultado
subject y/o searchBú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 filterFiltro OData ($filter).Más recientes primero (receivedDateTime descendente).
NadaTodos 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.

Ninguno.

ParámetroTipoPor defectoDescripción
sessionZoanOutlookMailSession—Sesión de Outlook 365 — Connect (se hereda dentro del body).
folderstring—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.
subjectstring—El asunto contiene este texto (p. ej. Factura). Se ejecuta como búsqueda ($search) sobre el asunto.
unreadOnlyboolfalseDevolver solo los correos no leídos.
searchstring—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.
filterstring—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.
maxResultsint25Número máximo de correos. Un valor vacío, no numérico o menor que 1 usa 25.
includeBodyboolfalseIncluir 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.

ClaveTipoContenido
idstringID del mensaje en Graph. Es la entrada de las demás actividades. Cambia si el correo se mueve de carpeta.
subjectstringAsunto.
fromstringDirección del remitente (ana@example.com).
fromNamestringNombre visible del remitente.
toList<string>Direcciones de los destinatarios.
ccList<string>Direcciones en copia (lista vacía si no hay).
receivedDateTimestringFecha y hora de recepción en ISO 8601 con zona, en UTC (2026-10-15T14:03:22.0000000+00:00).
previewstringPrimeros caracteres del cuerpo, en texto plano.
isReadbooltrue si ya está leído.
hasAttachmentsbooltrue si tiene adjuntos.
categoriesList<string>Categorías de Outlook asignadas.
webLinkstringEnlace para abrir el correo en Outlook en la web.
bodystringContenido del cuerpo (HTML o texto, según bodyType). null si includeBody es false.
bodyTypestringHtml 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"]).

MensajeCausa 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 carpetaEl valor de folder no es un nombre conocido ni un ID de carpeta válido.
Error de Graph BadRequest con el filtroLa 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.

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: conAdjuntos