Přístup k datům Microsoft 365 a správa pomocí Microsoft Graph
Optimalizujte přístup k datům a správu Microsoft 365 pomocí Aspose.Email Graph Client
Microsoft Graph je REST API pro přístup k datům Microsoft 365. Implementace Graph Client v knihovně Aspose.Email pro .NET umožňuje přístup k Microsoft Graph z našeho API. V níže uvedených příkladech vytvoříme instanci MS Graph Client a předáme token. Poté prozkoumáme hlavní metody pro správu složek, jejich aktualizaci, kopírování a mazání. Zprávy, jejich obsah a přílohy lze také přistupovat nebo měnit pomocí našeho MS Graph Client. Správa kategorií, pravidel, poznámkových bloků a přepsání je rozšířená funkce Microsoft Graph Client od Aspose.Email.
Autentizujte a požádejte pomocí IGraphClient s MSAL v .NET
Pro interakci se službami Microsoft Graph budete potřebovat vytvořit IGraphClient objekt. Po autentizaci vám tento klient umožní provádět různé požadavky na služby. GetClient metodu, která vytvoří IGraphClient, vyžaduje ITokenProvider implementaci jako jeho první parametr. Toto ITokenProvider je zodpovědná za poskytování potřebného autentizačního tokenu. K získání tokenu použijeme Knihovna Microsoft Authentication Library (MSAL) pro .NET.
Zde je návod, jak nastavit proces autentizace:
Krok 1: Nastavení autentizace
Následující kroky vás provedou, jak získat autorizační token:
-
Vytvořte třídu AccessParameters.
Definujte třídu AccessParameters pro uložení vašich přihlašovacích údajů.
public class AccessParameters
{
public string TenantId { get; init; }
public string ClientId { get; init; }
public string ClientSecret { get; init; }
public string UserId { get; init; }
public Uri Authority => new ($"https://login.microsoftonline.com/{TenantId}");
public string ApiUrl => "https://graph.microsoft.com/.default";
}
-
Přidejte Balíček MSAL.NET**.
Nainstalujte
Microsoft.Identity.ClientBalíček NuGet, který obsahuje binární soubory MSAL.NET potřebné pro autentizaci. -
Implementujte rozhraní ITokenProvider.
Vytvořte
GraphTokenProvidertřída, která implementuje ITokenProvider rozhraní. Tato třída použije knihovnu MSAL.NET k získání přístupového tokenu.
using Microsoft.Identity.Client;
using Microsoft.Identity.Web;
using Aspose.Email.Clients;
public class GraphTokenProvider : ITokenProvider
{
private readonly IConfidentialClientApplication _app;
private readonly string[] _scopes;
private string? _token;
public GraphTokenProvider(AccessParameters accessParams)
{
_app = ConfidentialClientApplicationBuilder.Create(accessParams.ClientId)
.WithClientSecret(accessParams.ClientSecret)
.WithAuthority(accessParams.Authority)
.Build();
_app.AddInMemoryTokenCache();
_scopes = new[] { accessParams.ApiUrl };
}
public void Dispose()
{
throw new NotImplementedException();
}
public OAuthToken GetAccessToken()
{
return GetAccessToken(false);
}
public OAuthToken GetAccessToken(bool ignoreExistingToken)
{
if (!ignoreExistingToken && _token != null)
{
return new OAuthToken(_token);
}
_token = GetAccessTokenAsync().GetAwaiter().GetResult();
return new OAuthToken(_token);
}
private async Task<string?> GetAccessTokenAsync()
{
AuthenticationResult? result;
try
{
result = await _app.AcquireTokenForClient(_scopes)
.ExecuteAsync();
Console.WriteLine("Token acquired");
}
catch (MsalServiceException ex) when (ex.Message.Contains("AADSTS70011"))
{
Console.WriteLine("Scope provided is not supported");
result = null;
}
if (result == null) return null;
_token = result.AccessToken;
return result.AccessToken;
}
Krok 2: Vytvořit instanci ITokenProvider
Po definování GraphTokenProvider třídy, můžete vytvořit instanci AccessParameters a použijte ho k vytvoření instance GraphTokenProvider.
var accessParams = new AccessParameters()
{
TenantId = "Your Tenant ID",
ClientId = "Your Client ID",
ClientSecret = "Your Client Secret",
UserId = "User's Object ID"
};
var tokenProvider = new GraphTokenProvider(accessParams);
Krok 3: Odesílat požadavky pomocí IGraphClient
Nakonec použijte GraphTokenProvider pro vytvoření autentizovaného IGraphClient a můžete začít odesílat požadavky na služby.
using var client = GraphClient.GetClient(tokenProvider, accessParams.TenantId);
client.Resource = ResourceType.Users;
client.ResourceId = accessParams.UserId;
Po dokončení těchto kroků je váš IGraphClient je nyní připraveno komunikovat se službami Microsoft Graph pomocí autentizovaných požadavků.
Připojení k endpointům GCC High
The GraphClient podporuje připojení k endpointům GCC High pomocí EndPoint vlastnost. Následující ukázkový kód ukazuje, jak nastavit GraphClient pro připojení k endpointu GCC High za účelem výpisu složek a načtení zpráv.
client.EndPoint = "https://graph.microsoft.us";
var folders = client.ListFolders();
string folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;
var msgs = client.ListMessages(folderId);
Spravovat složky pomocí IGraphClient
Vypsat složky
Voláním ListFolders metoda z MS Graph Client umožňuje získat seznam složek. Každá složka má sadu parametrů, jako je DisplayName, které lze číst v FolderInfo typ.
var folders = client.ListFolders();
foreach (var folder in folders)
{
Console.WriteLine(folder.DisplayName);
}
Aktualizovat složky
Pro vytvoření složky pomocí MS Graph Client použijte CreateFolder metoda. Získáte FolderInfo objekt a možnost přístupu k DisplayName, ItemId, HasSubFolders a dalším vlastnostem.
var folderInfo = client.CreateFolder("FolderName");
folderInfo.DisplayName = "FolderAnotherName";
client.UpdateFolder(folderInfo);
Kopírovat složky
CopyFolder metoda je klíčová pro kopírování objektu složky pomocí MS Graph.
var folderInfo1 = client.CreateFolder("Folder1");
var folderInfo2 = client.CreateFolder("Folder2");
// copy Folder2 to Folder1
client.CopyFolder(folderInfo1.ItemId, folderInfo2.ItemId);
Přesunout a odstranit složky
Použijte MoveFolder metoda se používá k přesunutí složky, přijímá newParentId a itemId. Smazat metoda se používá k odstranění metody podle id.
var folderInfo1 = client.CreateFolder("Folder1");
var folderInfo2 = client.CreateFolder("Folder2");
// move Folder2 to Folder1
client.MoveFolder(folderInfo1.ItemId, folderInfo2.ItemId);
// delete Folder1
client.Delete(folderInfo1.ItemId)
Spravovat zprávy pomocí IGraphClient
MS Graph Client, implementovaná v Aspose.Email pro .NET, poskytuje sadu metod pro správu zpráv a příloh:
- List zprávy
- Načíst zpráva
- Vytvořit zpráva
- Odeslat zpráva
- CopyMessage zpráva
- Přesunout zpráva
- CreateAttachment
- FetchAttachment
- DeleteAttachment
- ListAttachments
Vypsat zprávy
var folders = client.ListFolders();
foreach (var folder in folders)
{
if (folder.DisplayName.Equals("Inbox"))
{
// list messages in inbox
var inboxMessages = client.ListMessages(folder.ItemId);
foreach (var messageInfo in inboxMessages)
{
Console.WriteLine(messageInfo.Subject);
}
}
}
Filtrovat zprávy podle data odeslání
The OrderBy metoda ze sbírky knihovny umožňuje načíst zprávy s různým řazením (vzestupně i sestupně) podle data odeslání. Následující ukázkový kód ukazuje, jak seřadit zprávy podle data odeslání:
IGraphClient client = GraphClient.GetClient(provider, TenantId);
var builder = new GraphQueryBuilder();
// create orderby messages query 'DESC'
builder.SentDate.OrderBy(false);
var messagePageInfo = client.ListMessages(KnownFolders.Inbox, new PageInfo(10), builder.GetQuery());
var messages = messagePageInfo.Items;
builder.Clear();
// create orderby messages query 'ASC'
builder.SentDate.OrderBy(true);
messagePageInfo = client.ListMessages(KnownFolders.Inbox, new PageInfo(10), builder.GetQuery());
messages = messagePageInfo.Items;
Enumerovat zprávy s podporou stránkování
API umožňuje stránkování a filtrování zpráv při jejich výpisu. Je to zvláště užitečné pro poštovní schránky s velkým objemem zpráv, protože šetří čas načítáním jen nezbytných souhrnných informací.
Ukázkový kód a níže uvedené kroky ukazují, jak načíst zprávy ze složky Inbox pomocí stránkování a filtrování.
- Nejprve inicializujte klienta.
- Poté nastavte počet položek zobrazovaných na stránku, např. 10.
- Vytvořte filtr pro načtení pouze nepřečtených zpráv pomocí GraphQueryBuilder třída. builder.IsRead.Equals(false) nastavuje podmínku pro filtraci nepřečtených zpráv.
- Zavolejte ListMessages metoda na objektu klienta, která jako parametry určuje složku (Inbox) a počet položek na stránku (PageInfo(itemsPerPage)). Také předává objekt dotazu pro aplikaci filtru nepřečtených zpráv. Vrácený objekt PageInfo (pageInfo) obsahuje načtené zprávy pro aktuální stránku ve vlastnosti Items.
- Vytvořte smyčku, která běží až do dosažení poslední stránky (pageInfo.LastPage je false). Načtené zprávy se přidají do existujícího seznamu zpráv pomocí messages.AddRange(pageInfo.Items).
// reading unread messages with paging
using var client = GraphClient.GetClient(tokenProvider, config.Tenant);
// paging option
var itemsPerPage = 10;
// create unread messages filter
GraphQueryBuilder builder = new GraphQueryBuilder();
builder.IsRead.Equals(false);
var query = builder.GetQuery();
// list messages
var pageInfo = client.ListMessages(KnownFolders.Inbox, new PageInfo(itemsPerPage), query);
var messages = pageInfo.Items;
while (!pageInfo.LastPage)
{
pageInfo = client.ListMessages(KnownFolders.Inbox, pageInfo.NextPage, query);
messages.AddRange(pageInfo.Items);
}
// set messages state as read
foreach (var message in messages)
{
client.SetRead(message.ItemId);
}
Načíst zprávy
var folders = client.ListFolders();
foreach (var folder in folders)
{
if (folder.DisplayName.Equals("Inbox"))
{
// list messages in inbox
var inboxMessages = client.ListMessages(folder.ItemId);
if (inboxMessages.Count > 0)
{
// fetch the first message in inbox
var msg = client.FetchMessage(inboxMessages[0].ItemId);
Console.WriteLine(msg.BodyHtml);
}
}
}
Vytvořit zprávy
var msg = new MapiMessage(OutlookMessageFormat.Unicode)
{
Subject = "My message",
Body = "Hi, it is my message"
};
msg.Recipients.Add("sam@to.com", "Sam", MapiRecipientType.MAPI_TO);
// create message in inbox
client.CreateMessage(KnownFolders.Inbox, msg);
Odeslat zprávy
// prepare the message
var msg = new MapiMessage(OutlookMessageFormat.Unicode)
{
Subject = "My message",
Body = "Hi, it is my message"
};
msg.Recipients.Add("sam@to.com", "Sam", MapiRecipientType.MAPI_TO);
msg.SetProperty(KnownPropertyList.SenderName, "John");
msg.SetProperty(KnownPropertyList.SentRepresentingEmailAddress, "John@from.com");
// send message
client.Send(msg);
Odeslat koncepty zpráv
// prepare the message
var msg = new MapiMessage(OutlookMessageFormat.Unicode)
{
Subject = "My message",
Body = "Hi, it is my message"
};
msg.Recipients.Add("sam@to.com", "Sam", MapiRecipientType.MAPI_TO);
msg.SetProperty(KnownPropertyList.SenderName, "John");
msg.SetProperty(KnownPropertyList.SentRepresentingEmailAddress, "John@from.com");
// add message to Draft folder
var draftMessage = client.CreateMessage(KnownFolders.Drafts, msg);
// send a draft message
client.Send(draftMessage.ItemId);
Odeslat EML zprávy
Vytvoření a odeslání e‑mailu je jednoduché s objektem MailMessage. Následující ukázkový kód ukazuje, jak vytvořit a odeslat e‑mailovou zprávu pomocí Graph API:
// prepare the message
var eml = new MailMessage
{
From = "from@domain.com",
To = "to1@domain.com, to2@domain.com",
Subject = "New message",
HtmlBody = "<html><body>This is the HTML body</body></html>"
};
// send the message
graphClient.Send(eml);
graphClient.Create(KnownFolders.Inbox, eml);
Kopírovat zprávy
// copy message to Inbox folder
var copiedMsg = client.CopyMessage(KnownFolders.Inbox, msg.ItemId);
Přesunout zprávy
// move message to Inbox folder
var movedMsg = client.MoveMessage(KnownFolders.Inbox, msg.ItemId);
Správa příloh
// create an attachment
var attachment = new MapiAttachment();
attachment.SetProperty(KnownPropertyList.DisplayName, "My Attachment");
attachment.SetProperty(KnownPropertyList.AttachDataBinary, new byte[1024]);
// add an attachment to message
var createdAttachment = client.CreateAttachment(messageInfo.ItemId, attachment);
// fetch a message attachment
var fetchedAttachment = client.FetchAttachment(createdAttachment.ItemId);
// delete a message attachment
client.DeleteAttachment(createdAttachment.ItemId);
// list the message attachments
var attachments = client.ListAttachments(messageInfo.ItemId);
Spravovat Outlook položky pomocí Graph klienta
Spravovat kalendářní události
Aspose.Email poskytuje API pro přístup, správu a interakci s kalendářními událostmi. Pro tyto účely nabízí následující metody v IGraphClient rozhraní:
- ListCalendars() – Vrátí kolekci informací o kalendářích.
- ListCalendarItems(string id) – Vrátí kolekci položek kalendáře spojených se zadaným ID kalendáře.
- FetchCalendarItem(string id) – Načte konkrétní položku kalendáře na základě zadaného ID.
- CreateCalendarItem(string calId, MapiCalendar mapiCalendar) – Vytvoří novou položku kalendáře ve zvoleném kalendáři.
- UpdateCalendarItem(MapiCalendar mapiCalendar) – Aktualizuje existující položku kalendáře.
- UpdateCalendarItem(MapiCalendar mapiCalendar, UpdateSettings updateSettings) – Aktualizuje existující položku kalendáře pomocí zadaných nastavení aktualizace.
Následující ukázkový kód ukazuje, jak komunikovat s kalendářními událostmi v klientu Microsoft Graph API pomocí metod poskytovaných knihovnou Aspose.Email:
// List Calendars
CalendarInfoCollection calendars = graphClient.ListCalendars();
// List Calendar Items
MapiCalendarCollection calendarItems = graphClient.ListCalendarItems("calendarId");
// Fetch Calendar Item
MapiCalendar calendarItem = graphClient.FetchCalendarItem("calendarItemId");
// Create Calendar Item
MapiCalendar newCalendarItem = new MapiCalendar(
location: "Conference Room",
summary: "Team Meeting",
description: "Discuss project status and updates.",
startDate: startDate,
endDate: endDate
);
MapiCalendar createdCalendarItem = graphClient.CreateCalendarItem("calendarId", newCalendarItem);
// Update Calendar Item
createdCalendarItem.Location = "Zoom Meeting";
MapiCalendar updatedCalendarItem = graphClient.UpdateCalendarItem(createdCalendarItem);
Spravovat kategorie
Pro správu kategorií pomocí MS Graph v Aspose.Email pro .NET použijte následující metody:
// create a custom category with Orange color
var category = client.CreateCategory("My custom category", CategoryPreset.Preset1);
// fetch a category
var fetchedCategory = client.FetchCategory(category.Id);
// update category (change color to brown)
fetchedCategory.Preset = CategoryPreset.Preset2;
var updatedCategory = client.UpdateCategory(fetchedCategory);
// list available categories
var categories = client.ListCategories();
foreach (var cat in categories)
{
Console.WriteLine(cat.DisplayName);
}
// delete a category
client.Delete(fetchedCategory.Id);
Spravovat kontakty
Aspose.Email poskytuje API pro přístup, správu a interakci s položkami kontaktů. Pro tyto účely nabízí následující metody v IGraphClient rozhraní:
- ListContacts(string id) – Vrátí kolekci MAPI kontaktů spojených se zadaným ID adresáře.
- FetchContact(string id) – Načte konkrétní kontakt na základě zadaného ID položky.
- CreateContact(string folderId, MapiContact contact) – Vytvoří nový kontakt ve zvoleném adresáři.
- UpdateContact(MapiContact contact) – Aktualizuje existující kontakt.
Následující ukázkový kód ukazuje, jak komunikovat s kontakty v klientu Microsoft Graph API pomocí metod poskytovaných knihovnou Aspose.Email:
// List Contacts
MapiContactCollection contacts = graphClient.ListContacts("contactFolderId");
// Fetch Contact
MapiContact contact = graphClient.FetchContact("contactId");
// Create Contact
MapiContact newContact = new MapiContact("Jane Smith", "jane.smith@example.com", "XYZ Corporation", "777-888-999");
MapiContact createdContact = graphClient.CreateContact("contactFolderId", newContact);
// Update Contact
createdContact.Telephones.PrimaryTelephoneNumber = "888-888-999";
MapiContact updatedContact = graphClient.UpdateContact(createdContact);
Spravovat přepisy
Pro správu přepisu pomocí MS Graph v Aspose.Email pro .NET použijte následující metody:
// Create an user's override
var userOverride = client.CreateOrUpdateOverride
(new MailAddress("JohnBrown@someorg.com", "JohnBrown"), ClassificationType.Focused);
// list the overrides
var overrides = client.ListOverrides();
// update override
userOverride.Sender.DisplayName = "John Brown";
var updatedOverride = client.UpdateOverride(userOverride);
// delete override
client.Delete(updatedOverride.Id);
Spravovat pravidla
Pro správu pravidel pomocí MS Graph v Aspose.Email pro .NET použijte následující metody:
// Create a rule
var rule = PrepareRule("user@someorg.com", "User");
var createdRule = client.CreateRule(rule);
// List all rules defined for Inbox
var rules = client.ListRules();
// Fetch a rule
var fetchedRule = client.FetchRule(createdRule.RuleId);
// Update a rule
fetchedRule.DisplayName = "Renamed rule";
fetchedRule.IsEnabled = false;
var updatedRule = client.UpdateRule(createdRule);
// Delete a rule
client.Delete(updatedRule.RuleId);
InboxRule PrepareRule(string email, string displayName)
{
var rule = new InboxRule()
{
DisplayName = "My rule",
Priority = 1,
IsEnabled = true,
Conditions = new RulePredicates(),
Actions = new RuleActions()
};
rule.Conditions.ContainsSenderStrings = new StringCollection { displayName };
rule.Actions.ForwardToRecipients = new MailAddressCollection
{ new MailAddress(email, displayName, true) };
rule.Actions.StopProcessingRules = true;
return rule;
}
Spravovat sešity
Pro správu sešitů pomocí MS Graph v Aspose.Email pro .NET použijte následující metody:
// create a OneNote notebook
var newNotebook = new Notebook()
{
DisplayName = "My Notebook"
};
var createdNotebook = client.CreateNotebook(newNotebook);
// fetch a notebook
var fetchedNotebook = client.FetchNotebook(createdNotebook.Id);
// list the notebooks
var notebooks = client.ListNotebooks();
Správa úkolů v Microsoft Graph
Aspose.Email poskytuje vývojářům API pro přístup, správu a interakci s úkoly a seznamy úkolů uživatelů pomocí následujících metod IGraphClient rozhraní:
- ListTaskLists() - Načte kolekci informací o seznamech úkolů.
- GetTaskList(string id) - Načte konkrétní seznam úkolů na základě poskytnutého ID.
- DeleteTaskList(string id) - Smaže zadaný seznam úkolů. -ListTasks(string id) - Načte kolekci úkolů spojených se zadaným ID seznamu úkolů.
- FetchTask(string id) - Načte konkrétní úkol na základě poskytnutého ID.
- CreateTask(MapiTask task, string taskListUri) - Vytváří nový úkol ve specifikovaném seznamu úkolů.
- UpdateTask(MapiTask task) - Aktualizuje existující úkol s poskytnutými informacemi.
- UpdateTask(MapiTask task, UpdateSettings updateSettings) - Aktualizuje existující úkol s určenými nastaveními aktualizace.
Následující ukázka kódu demonstruje, jak spravovat seznamy úkolů:
// List Task Lists
var taskLists = graphClient.ListTaskLists();
foreach (var tList in taskLists)
{
Console.WriteLine($"Task List: {tList.DisplayName}");
}
// Get Task List
var taskList = graphClient.GetTaskList("taskListId");
// Delete Task List
graphClient.DeleteTaskList("taskListId");
Následující ukázka kódu demonstruje, jak spravovat úkoly:
// List Tasks in a Task List
MapiTaskCollection tasks = graphClient.ListTasks("taskListId");
// Fetch Task
MapiTask task = graphClient.FetchTask("taskId");
// Create Task
var newTask = new MapiTask
{
Subject = "New Task",
DueDate = new DateTime(2023, 12, 31),
Status = MapiTaskStatus.NotStarted
};
MapiTask createdTask = graphClient.CreateTask(newTask, "taskListUri");
// Update Task
createdTask.Subject = "Updated Task Subject";
MapiTask updatedTask = graphClient.UpdateTask(createdTask);
// Update Task with UpdateSettings
var updateSettings = new UpdateSettings { SkipAttachments = true };
MapiTask updatedTaskWithSettings = graphClient.UpdateTask(createdTask, updateSettings);