Browse our Products

Aspose.Email for .NET 25.8 Release Notes

All Changes

KeySummaryCategory
EMAILNET-41553Support query parameters for Aspose.Email Graph clientFeature
EMAILNET-41547Add asynchronous methods to Aspose Graph clientEnhancement
EMAILNET-41615Add ExchangeAddress property to MailAddress to store address in exchange formatEnhancement
EMAILNET-41617When converting an MSG file to PDF, Sent Date appears twiceEnhancement
EMAILNET-41603Support for multiple header fields with same nameEnhancement
EMAILNET-41604Google client’s “List Calendars” method fails when server returns “Forbidden” statusBug

New Enhancements

Support for X.500 Exchange Addresses in MailAddress

  • Added a new X500Address property to the MailAddress class.
  • This property provides access to the email address in Exchange (X.500) format, if available.

Code example:

var mailMessage = MailMessage.Load(fileName);
string exaddr = mailMessage.From.X500Address;

Enhanced Microsoft Graph Queries with OData Support

  • Introduced the new Aspose.Email.Clients.Graph.ODataQueryBuilder class to construct OData query parameters supported by Microsoft Graph.
  • Extended multiple GraphClient methods (ListFolders, ListMessages, ListContacts, ListCalendarItems, ListAttachments, ListCategories, ListOverrides, ListRules, ListTaskLists, ListTasks, ListNotebooks) with an optional ODataQueryBuilder parameter for advanced filtering, ordering, selection, and paging.

Code sample:

var accessParameters = Settings.User1;

var provider = new AzureConfidentialTokenProvider(
    accessParameters.TenantId,
    accessParameters.ClientId,
    accessParameters.ClientSecret);

var client = GraphClient.GetClient(provider, accessParameters.TenantId);

client.Resource = Aspose.Email.Clients.Graph.ResourceType.Users;
client.ResourceId = accessParameters.Username;
client.EndPoint = "https://graph.microsoft.com";

var builder = new ODataQueryBuilder { OrderBy = "name asc" };
var folders = client.ListFolders(builder);
foreach (var folder in folders)
{
    Console.WriteLine(folder.DisplayName);
}

var folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;
builder = new ODataQueryBuilder
{
    Filter = "startswith(name,'A')",
    OrderBy = "name asc",
    Top = 10,
    Skip = 5,
    Select = new[] { "name", "age" },
    Expand = new[] { "children", "parents" },
    Count = true,
    Search = "\"John Doe\"",
    Format = "json"
};

var msgs = client.ListMessages(folderId, builder);
foreach (var msg in msgs)
{
    Console.WriteLine(msg.Subject);
}

Asynchronous Support for Microsoft Graph Client

  • Added the Aspose.Email.Clients.Graph.IGraphClientAsync interface to support asynchronous operations with GraphClient.
  • Introduced new factory methods GraphClient.GetClientAsync(ITokenProvider, string) and GraphClient.GetClientAsync(IMultipleServicesTokenProvider, string) to initialize asynchronous Graph clients.

Code sample:

var accessParameters = Settings.User1;

var provider = new AzureConfidentialTokenProvider(
    accessParameters.TenantId,
    accessParameters.ClientId,
    accessParameters.ClientSecret);

var client = GraphClient.GetClientAsync(provider, accessParameters.TenantId);

client.Resource = Aspose.Email.Clients.Graph.ResourceType.Users;
client.ResourceId = accessParameters.Username;
client.EndPoint = "https://graph.microsoft.com";

var folders = await client.ListFoldersAsync();
foreach (var folder in folders)
{
    Console.WriteLine(folder.DisplayName);
}

var folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;
var msgsPage = await client.ListMessagesAsync(folderId, new PageInfo(15) { PageOffset = 0 }, null);
var msgs = msgsPage.Items;
foreach (var msg in msgs)
{
    Console.WriteLine(msg.Subject);
}