aspose-free-consulting / projects

The starting point for Aspose free consulting projects
5 stars 5 forks source link

I want to read all MS Outlook 365 (including subfolders) email (headers) in an Azure Tenant #378

Closed GabrieleDelPanno closed 2 months ago

GabrieleDelPanno commented 4 months ago

I wish to read all emails of a tenant in sent/inbox folders, root and subfolders, using Graph Client and Aspose Email I've found on your documentation how to read from Inbox root but I'm not able to find how to iterate on the subfolders Can you give me an advice on how to do it ? Also, to read from sent folder ?

C#, Aspose.Email for .Net

var accessParams = new AccessParameters() { TenantId = "YourTenantID", ClientId = "YourClientID", ClientSecret = "YourClientSecret", UserId = "User's Object ID" }; var tokenProvider = new GraphTokenProvider(accessParams);

using var client = GraphClient.GetClient(tokenProvider, accessParams.TenantId); 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);
     }
 }

}

dmitrysamodurov commented 3 months ago

Hello @GabrieleDelPanno,

To iterate through all subfolders recursively, you can use the ListFolders(string) method and modify the code as follows:

var accessParams = new AccessParameters()
{
    TenantId = "YourTenantID",
    ClientId = "YourClientID",
    ClientSecret = "YourClientSecret",
    UserId = "User's Object ID"
};

var tokenProvider = new GraphTokenProvider(accessParams);

using var client = GraphClient.GetClient(tokenProvider, accessParams.TenantId);

var rootFolders = client.ListFolders();

foreach (var rootFolder in rootFolders)
{
    ProcessFolder(rootFolder.ItemId);
}

The ProcessFolder method implementation:

void ProcessFolder(string folderId)
{
    var messages = client.ListMessages(folderId);

    foreach (var messageInfo in messages)
    {
        Console.WriteLine(messageInfo.Subject);
    }

    var subfolders = client.ListFolders(folderId);

    foreach (var subfolder in subfolders)
    {
        ProcessFolder(subfolder.ItemId);
    }
}
GabrieleDelPanno commented 3 months ago

Hello @dmitrysamodurov, many thanks for your help, have a nice day!!