DataRecoveryMode in Email

Hello,
Does Email have DataRecoveryMode in LoadOptions so can be set like this (Very easy to use!):

Thanks :slight_smile:

Hello,

Aspose.Email does not have a DataRecoveryMode property in the LoadOptions class.
However, we appreciate your suggestion and will consider adding this feature.

Thank you.

1 Like

Thanks, I’ve asked this because if my memory serves me, I’ve seen some similar behavior for some storage files, not sure if it was Pst or Mbox, or maybe something else.

Currently Email support the recovery of which corrupted file formats?
Thanks.

There is pst traversal API, which is also intended for reading corrupted files.

1 Like

Thanks,
When opened in traverse mode, it will take longer to read pst items, even for healthy pst/ost files?

Please share a sample corrupted pst/ost file to test against with, or advise how to make one :smiley:

And finally, please be kind and confirm this in VB.net with .net Framework 4.0?

Using MyStorage As New PersonalStorage(Function(exception, itemId) As PersonalStorage

    'Exception handling code here?
    MsgBox("Item ID: " + itemId + vbNewLine + exception.Message)

                                      End Function)

    If MyStorage.Load(MyStream) = True Then blah blah

End Using

Warning 3 Function ‘’ doesn’t return a value on all code paths.
A null reference exception could occur at run time when the result is used.

Best :slight_smile:

Opening PST or OST files in traverse mode can indeed result in longer read times, even for healthy files. This is because traverse mode involves deeper scanning and traversal of the file structure, which can be more time-consuming compared to regular read operations.

Unfortunately, we don’t provide or endorse sharing corrupted files, as they may contain sensitive data. We test on resouces that users provide, so we have no idea how pst can be corrupted intentionally.

To confirm VB.NET code snippet with .NET Framework 4.0, you can adjust it as follows to handle exceptions:

Dim callback As New TraversalExceptionsCallback(AddressOf OnTraversalException)

Using pst As New PersonalStorage(callback)
    If pst IsNot Nothing AndAlso pst.Load("test.pst") Then
        GetAllMessages(pst, pst.RootFolder)
    End If
End Using

Sub OnTraversalException(exception As Exception, itemId As String)
    Console.WriteLine(String.Format("{0}: {1}", itemId, exception.Message))
End Sub

Hello,
When using PersonalStorage constructor and Load method to traverse Pst, the PersonalStorageLoadOptions is not available?

How do you think about:

PersonalStorageLoadOptions.DataRecoveryMode enum?

0 None
1 Traverse

So will continue to use FromFile / FromStream with the above option.
Much easier and straightforward IMO, kindly share it as a consideration :slight_smile:

Thanks, we can consider such suggestion.

1 Like

Thank you, for the exception, it can have a separate one like TraverseException etc…

And is this available for both Pst and Ost?
Not for Olm and Mbox?

OnTraversalException(exception As Exception, itemId As String)
When reading Ost PersonalStorage, all itemIds are blank, same for here?

And how to catch the TraversalAsposeException instead of TraversalExceptionsCallback?

Best :slight_smile:

The OnTraversalException callback should work for both PST and OST files and OLM.

If you’re encountering blank itemIds when reading OST files, it could be due to how the items are being processed or extracted. Maybe, the nature of the corruption makes it impossible to identify the affected item, or the corruption may not be tied to any specific item.

To catch ‘TraversalAsposeException’:

Sub OnTraversalException(exception As TraversalAsposeException, itemId As String)
    Console.WriteLine(String.Format("{0}: {1}", itemId, exception.Message))
End Sub
1 Like

oh thanks, and the VB.net code for Olm is the same, like below?

Dim callback As New TraversalExceptionsCallback(AddressOf OnTraversalException)

Using olm As New OlmStorage(callback)
    If olm IsNot Nothing AndAlso olm.Load("test.olm") Then
        GetAllMessages(.. .. ..)
    End If
End Using

Sub OnTraversalException(exception As Exception, itemId As String)
    Console.WriteLine(String.Format("{0}: {1}", itemId, exception.Message))
End Sub

Yes, that’s right.