Browse our Products

Aspose.Email for .NET 25.4 Release Notes

Important Notice

Starting from Aspose.Email for .NET 25.6, support for .NET Framework 2.0 will be discontinued.

Developers using this legacy framework are strongly encouraged to plan migration to newer versions of .NET (such as .NET Framework 4.5+, .NET Core, or .NET 6/8) to continue receiving updates, new features, and technical support.

Important:
After support is discontinued, Aspose.Email for .NET will no longer guarantee compatibility or fixes compatible with .NET Framework 2.0.

All Changes

KeySummaryCategory
EMAILNET-41555Add overload of MapiContact.FromVCard method with VCardLoadOptions parameterEnhancement
EMAILNET-41552Add asynchronous methods to PersonalStorageEnhancement
EMAILNET-41546Add asynchronous methods to TgzReaderEnhancement
EMAILNET-41528Provide using stream instead filename to preserve embedded attachment’s icons when saving message to htmlEnhancement
EMAILNET-41548System.InvalidOperationException while creating MboxStorageReaderBug
EMAILNET-41538Searching emails by sender address (From) returns null in PST fileBug
EMAILNET-41551NegativeArraySizeException on adding files to PSTBug
EMAILNET-41554The issue occurs when trying to mark as read or unread in a PST fileBug
EMAILNET-41556Error Unknown type of ActionProperty while loading AppointmentBug

New Enhancements

Introduced Asynchronous Methods for Improved Performance

To enhance scalability and performance in modern applications, Aspose.Email for .NET now offers asynchronous versions of various operations. These async methods allow better responsiveness, especially in applications involving large files or long-running operations.

The following classes have been updated with new asynchronous methods:

TgzReader Class

New Method:

  • ExportToAsync(string path, CancellationToken token = default):
    Saves messages and directory structure to a specified path asynchronously.

Example:

using (var tgzReader = new TgzReader("archive.tgz"))
{
    await tgzReader.ExportToAsync("outputDirectory", CancellationToken.None);
}

PersonalStorage Class

New Methods:

  • Create and open PST files asynchronously:
    • CreateAsync
    • FromFileAsync
    • FromStreamAsync
  • Merge and split PST files asynchronously:
    • MergeWithAsync
    • SplitIntoAsync

Example:

using (var pst = await PersonalStorage.FromFileAsync("input.pst"))
{
    await pst.SplitIntoAsync(50 * 1024 * 1024, "part_", "outputDirectory", CancellationToken.None);
}

MboxStorageReader Class

New Methods:

  • CreateReaderAsync: Create a reader for MBOX files asynchronously.
  • SplitIntoAsync: Split large MBOX files into smaller chunks asynchronously.

Example:

using (var reader = await MboxStorageReader.CreateReaderAsync("input.mbox", new MboxLoadOptions()))
{
    await reader.SplitIntoAsync(10 * 1024 * 1024, "outputDirectory", "chunk_", CancellationToken.None);
}

Note:
Obsolete methods SplitInto(long chunkSize, string outputPath, CancellationToken token) and SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token) are now marked for removal. Use the new SplitIntoAsync methods instead.

VCardContact Class

New Methods:

  • Load single or multiple vCard contacts asynchronously from file or stream:
    • LoadAsync
    • LoadAsMultipleAsync

Example:

var contacts = await VCardContact.LoadAsMultipleAsync("contacts.vcf", new VCardLoadOptions(), CancellationToken.None);

foreach (var contact in contacts)
{
    Console.WriteLine(contact.IdentificationInfo.DisplayName);
}

Add overload of MapiContact.FromVCard method with VCardLoadOptions parameter

New Overloads:

  • Introduced overloads for FromVCard that accept VCardLoadOptions instead of encoding.
  • Deprecated older overloads that use Encoding.

Example:

var mapiContact = MapiContact.FromVCard("contact.vcf", new VCardLoadOptions());
Console.WriteLine(mapiContact.NameInfo.DisplayName);

Note:
Obsolete methods using Encoding are scheduled for removal in a future version.