Управление на пощенска кутия с Microsoft Graph

В допълнение към работа с съобщения, папки и прикачени файлове, Aspose.Email for Java също така позволява да управлявате функции на ниво пощенска кутия, като категории, overrides за фокусирана пощенска кутия и правила. Можете също да работите с множество пощенски кутии, като превключвате контекста на ресурса. Тези операции са достъпни чрез интеграцията с Graph API.

Как да работим с категории в Outlook

Категориите в Outlook ви позволяват да групирате и маркирате съобщения за по-лесна организация. С Aspose.Email можете програмено да създавате, извличате, актуализирате, изброявате и изтривате категории.

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());

Как да работим с Overrides

Overrides определя как съобщенията от определени податели се третират в Фокусираната пощенска кутия. Например, можете да принудите съобщения от конкретен подател да се появяват винаги в фокусиран изглед.

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());

Как да работим с правила в Outlook

Правилата за пощенска кутия ви позволяват да автоматизирате действия като препращане на съобщения или филтриране въз основа на условия. Graph API позволява създаване, извличане, актуализиране, изброяване и изтриване на правила за входящи съобщения.

// 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());

Работа с множество пощенски кутии – Превключване на контекст на кутия

По подразбиране операциите се изпълняват върху пощенската кутия на текущия потребител. Можете да превключите контекста към друга пощенска кутия (например, за да изброите съобщения от споделена кутия), като зададете типа на ресурса и неговото ID.

// 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);

OData заявки с Microsoft Graph

Aspose.Email for Java предоставя поддръжка за OData заявки при работа с Microsoft Graph. Това ви позволява да извършвате разширено филтриране, сортиране, избиране, странициране и разширяване при извличане на ресурси като папки, съобщения, контакти и календарни елементи. ODataQueryBuilder класът ви позволява да конструирате параметри за OData заявки по структуриран и многократен начин вместо ръчно създаване на низове за заявки. Следните методи могат да се приложат за броене и търсене в големи набори от данни:

  • Select за извличане само на необходимите свойства.
  • Filter за прилагане на филтри.
  • OrderBy за сортиране на резултатите.
  • Top и Skip за странициране.
  • Expand за разширяване на свързани обекти в една заявка.

Няколко GraphClient методите приемат незадължителен ODataQueryBuilder параметър за прилагане на OData заявки, включително:

  • listFolders
  • listMessages
  • listContacts
  • listCalendarItems
  • listAttachments
  • listCategories
  • listOverrides
  • listRules
  • listTaskLists
  • listTasks
  • listNotebooks

Следният пример с код показва как да се използва ODataQueryBuilder за заявка към папки и извличане на съобщения с разширени филтри и странициране:

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());
}