Gestión de buzón con Microsoft Graph
Además de trabajar con mensajes, carpetas y archivos adjuntos, Aspose.Email para Java también permite gestionar características a nivel de buzón como categorías, anulaciones de bandeja enfocada y reglas. También puedes trabajar con múltiples buzones cambiando el contexto del recurso. Estas operaciones están disponibles a través de la integración con la API Graph.
Cómo trabajar con categorías de Outlook
Las categorías en Outlook te permiten agrupar y etiquetar mensajes para una organización más fácil. Con Aspose.Email, puedes crear, obtener, actualizar, listar y eliminar categorías programáticamente.
String categoryName = "Test Category";
int preset = CategoryPreset.Preset10;
// create a new category
OutlookCategory category = client.createCategory(categoryName, preset);
// fetch a category
OutlookCategory fetchedCategory = client.fetchCategory(category.getId());
// list categories
List<OutlookCategory> categories = client.listCategories();
// update a category
fetchedCategory.setDisplayName("Update Category");
fetchedCategory.setPreset(CategoryPreset.Preset11);
OutlookCategory updatedCategory = client.updateCategory(fetchedCategory);
// delete a category
client.delete(category.getId());
Cómo trabajar con anulaciones
Las anulaciones controlan cómo se tratan los mensajes de ciertos remitentes en la Bandeja enfocada. Por ejemplo, puedes obligar a que los mensajes de un remitente específico siempre aparezcan en la vista enfocada.
int focusedType = ClassificationType.Focused;
// create or update an override for a sender
ClassificationOverride override = client.createOrUpdateOverride(
new MailAddress("testUser@host.com", "testUser"), focusedType
);
// list overrides
List<ClassificationOverride> list = client.listOverrides();
for (ClassificationOverride item : list)
System.out.println(item.getSender().getAddress());
// update override classification
ClassificationOverride fetchedOverride = list.get(0);
fetchedOverride.setClassifyAs(ClassificationType.Other);
fetchedOverride.getSender().setDisplayName("testUser_1");
ClassificationOverride updatedOverride = client.createOrUpdateOverride(fetchedOverride);
// reset classification
fetchedOverride.setClassifyAs(ClassificationType.Focused);
updatedOverride = client.updateOverride(fetchedOverride);
// delete override
client.delete(updatedOverride.getId());
Cómo trabajar con reglas de Outlook
Las reglas del buzón te permiten automatizar acciones como reenviar mensajes o filtrarlos según condiciones. La API de Graph permite crear, obtener, actualizar, listar y eliminar reglas de bandeja de entrada.
// create a new rule
InboxRule rule = new InboxRule();
rule.setDisplayName("Test rule");
rule.setPriority(1);
rule.setEnabled(true);
rule.setConditions(new RulePredicates());
rule.getConditions().containsSenderStrings(new StringCollection());
rule.getConditions().containsSenderStrings().addItem("testUser");
// define actions
rule.setActions(new RuleActions());
rule.getActions().setForwardToRecipients(new MailAddressCollection());
rule.getActions().getForwardToRecipients()
.addMailAddress(new MailAddress("testUser@host.com", "testUser", true));
rule.getActions().setStopProcessingRules(true);
InboxRule createdRule = client.createRule(rule);
// list rules
List<InboxRule> listedRules = client.listRules();
for (InboxRule item : listedRules)
System.out.println(item.getDisplayName());
// fetch and update a rule
InboxRule fetchedRule = client.fetchRule(createdRule.getRuleId());
createdRule.setDisplayName("Test rule 1");
createdRule.setEnabled(false);
InboxRule updatedRule = client.updateRule(createdRule);
// delete rule
client.delete(createdRule.getRuleId());
Trabajar con múltiples buzones - Cambiar el contexto del buzón
Por defecto, las operaciones se realizan contra el buzón del usuario actual. Puedes cambiar el contexto a otro buzón (por ejemplo, para listar mensajes de un buzón compartido) estableciendo el tipo de recurso y el ID del recurso.
// switch to another mailbox
client.setResource(ResourceType.Users);
client.setResourceId("mailbox");
client.listMessages("mailfolder");
// switch back to the current user mailbox
client.setResource(ResourceType.Me);
Consultas OData con Microsoft Graph
Aspose.Email para Java brinda soporte para consultas OData al trabajar con Microsoft Graph. Permite realizar filtrado avanzado, ordenación, selección, paginación y expansión al recuperar recursos como carpetas, mensajes, contactos y elementos de calendario. El ODataQueryBuilder la clase permite construir parámetros de consulta OData de forma estructurada y reutilizable en lugar de crear manualmente cadenas de consulta. Los siguientes métodos pueden aplicarse para contar y buscar en grandes conjuntos de datos:
Selectpara recuperar solo las propiedades que necesitas.Filterpara aplicar filtros.OrderBypara ordenar resultados.TopySkippara paginación.Expandpara expandir entidades relacionadas en una sola consulta.
Varios GraphClient los métodos aceptan un opcional ODataQueryBuilder parámetro para aplicar consultas OData, incluyendo:
- listFolders
- listMessages
- listContacts
- listCalendarItems
- listAttachments
- listCategories
- listOverrides
- listRules
- listTaskLists
- listTasks
- listNotebooks
El siguiente ejemplo de código muestra cómo usar ODataQueryBuilder para consultar carpetas y recuperar mensajes con filtros avanzados y paginación:
IGraphClient client = GraphClient.GetClient();
client.setResource(ResourceType.Users);
client.setResourceId(username);
client.setEndpoint("https://graph.microsoft.com");
// Example 1: List folders ordered by name
ODataQueryBuilder builder = new ODataQueryBuilder();
builder.setOrderBy("name asc");
GraphFolderInfoCollection folders = client.listFolders(builder);
for (GraphFolderInfo folder : folders) {
System.out.println(folder.getDisplayName());
}
String folderId = folders.get(0).getItemId();
// Example 2: Retrieve filtered and paged messages
builder = new ODataQueryBuilder();
{
builder.setFilter("startswith(name,'A')");
builder.setOrderBy("name asc");
builder.setTop(10);
builder.setSkip(5);
builder.setSelect(new String[]{"name", "age"});
builder.setExpand(new String[]{"children", "parents"});
builder.setCount(true);
builder.setSearch("\"John Doe\"");
builder.setFormat("json");
};
GraphMessageInfoCollection msgs = client.listMessages(folderId, builder);
for (GraphMessageInfo msg : msgs) {
System.out.println(msg.getSubject());
}