Browse our Products
Aspose.Email for CPP 22.12 Release Notes
Aspose.Email for C++ 22.12 is based on Aspose.Email for .NET 22.11.
Aspose.Email for C++ does not support asyncronic features of e-mail protocols
New Features
Getting a MAPI item type
We have added the MapiItemType enum that represented an item type. It can be used for message conversion into an object of a corresponding class derived from the IMapiMessageItem interface.
This avoids users from checking the MessageClass property value before message conversion.
Usage:
foreach (var messageInfo in folder.EnumerateMessages())
{
    auto msg = pst->ExtractMessage(messageInfo);
    switch (msg->get_SupportedType())
    {
        // Non-supported type. MapiMessage cannot be converted to an appropriate item type.
        // Just use in MSG format.
        case MapiItemType::None:
            break;
        // An email message. Conversion isn't required.
        case MapiItemType::Message:
            break;
        // A contact item. Can be converted to MapiContact.
        case MapiItemType::Contact:
            break;
        // A calendar item. Can be converted to MapiCalendar.
        case MapiItemType::Calendar:
            break;
        // A distribution list. Can be converted to MapiDistributionList.
        case MapiItemType::DistList:
            break;
        // A Journal entry. Can be converted to MapiJournal.
        case MapiItemType::Journal:
            break;
        // A StickyNote. Can be converted to MapiNote.
        case MapiItemType::Note:
            break;
        // A Task item. Can be converted to MapiTask.
        case MapiItemType::Task:
            break;
    }
}
Removing a Signature from a MapiMessage
For better compatibility, the MapiMessage::RemoveSignature method and MapiMessage::get_IsSigned property were added.
Code example:
auto msg = MapiMessage::Load(fileName);
if (msg->get_IsSigned())
{
    auto unsignedMsg = msg->RemoveSignature();
}
Checking whether the folder is in a predefined folder
Added FolderInfo::GetPredefinedType(bool getForTopLevelParent) method, to check folder is from StandardIpmFolder.
If getForTopLevelParent param is true, method returns a StandardIpmFolder enum value for the top-level parent folder. This determines whether the current folder is a subfolder of a predefined folder.
If getForTopLevelParent param is false, it returns a StandardIpmFolder enum value for the current folder.
void CheckFolders(FolderInfoCollection folders)
{
    for (auto&& folder: System::IterateOver(folders))
    {
        Console::WriteLine(u"Display Name: ");
        Console::WriteLine(folder->get_DisplayName());
        // Determines whether the current folder is a predefined folder
        auto folderType = folder->GetPredefinedType(false);
        if (folderType == StandardIpmFolder::Unspecified)
        {
            Console::WriteLine(u"Is StandardIpmFolder?: No");
        }
        // Determines whether the current folder is a subfolder of a predefined folder
        if (folderType == StandardIpmFolder::Unspecified)
        {
            folderType = folder->GetPredefinedType(true);
            answer = folderType == StandardIpmFolder::Unspecified ? u"No" : u"Yes";
            Console::WriteLine(u"Is subfolder from StandardIpmFolder parent?: ");
            Console::WriteLine(answer);
        }
        Console::WriteLine();
        CheckFolders(folder->GetSubFolders());
    }
}
String fileName = u"my.pst";
auto pst = PersonalStorage::FromFile(fileName))
CheckFolders(pst->get_RootFolder()->get_GetSubFolders());
Checking whether attachment is a TNEF formatted message
The Attachment::get_IsTnef() property indicates whether the message attachment is TNEF formatted message.
Usage:
auto eml = MailMessage->Load(fileName);
for (auto&& attachment : System::IterateOver(eml->get_Attachments()))
{
    if (attachment->get_IsTnef())
        Console::WriteLine("Attachment is TNEF");
}
The full code of the examples can be found at Aspose Email for C++ GitHub examples repository.