Recursive AI

Fidelity: what carries over when an item changes format

All onemail docs

Mail.ConvertAsync and StoreConverter read an item of any family and write it in another format. Every conversion returns a loss report (docs/conversion.md); this page says, per source family and target, what to expect from it. The tables below are generated from FidelityMatrix in the library, and a test converts items of every family into every target and fails when a report holds a code its cell does not list, when a cell says "skipped" for something that converts (or the other way round), or when this page differs from the matrix.

LevelMeaning
Exactthe same bytes, or the same values
Derivedrecomputed in the target's own form by a rule of the specification; reading it back gives the same meaning
Approximatedcarried in a weaker form; every case is a loss-report entry
Lostnot carried; every case is a loss-report entry, or the item is skipped and counted with the reason shown
Nonethe source has nothing of this kind

The columns: Content is headers, addresses, bodies and attachments (for calendar and contact items, their fields); Properties is what the source holds that the target has no field for (MAPI properties without an Internet form, OLM elements nothing reads); Flags is read, answered, flagged and draft state plus keywords or categories; Folders is the folder the item was in.

Store to store

StoreConverter enumerates a source one item at a time and hands each converted item to an IStoreSink. Sinks exist for:

DestinationLayoutFlagsDates
Eml<folder>/<n>-<subject>.emlnot kept (FlagsNotCarried)file time = arrival date
Mboxone <folder>.mbox per folder (root items in _root.mbox); a destination with an extension is one fileStatus/X-Status/X-Keywords fields, added only to a message that has noneenvelope date = arrival date, else sent date, else the Unix epoch (EnvelopeDateUnknown)
MaildirMaildir++ (.Parent.Child); a dot inside a folder name becomes _standard flags and up to 26 keywords per folderfile time = arrival date
AppleMail<folder>.mbox/Messages/<n>.emlxthe .emlx flags word; keywords not keptdate-received and date-sent
Ics, JCal, XCal, VCard, JCard, XCard, Tnefone file per item under the folder treenonefile time

Calendar and contact items that reach a mail store are written as .ics and .vcf files in an _items directory beside it (OtherItemsMode.Route, the default) or skipped (OtherItemsMode.Skip). An item the target cannot hold (a contact for an iCalendar target, a message for a card target) is skipped, counted under its reason, and the totals always satisfy items read = items written + items skipped.

Source folders: PST/OST folder paths below the root, OLM folder paths, Maildir++ levels, Apple Mail bundle nesting, and, for a directory that is not a store, the directory names (a file holding many items adds its own name). FolderFilter restricts a run to one subtree.

A cancelled run finishes its destination, so what was written reads back whole; the report holds the counts so far. A failure of the destination stops the run; an item that cannot be read or converted is skipped as Failed and listed in Errors.

The matrix

MIME message (EML, mbox, Maildir, EMLX, DBX, MHTML)

ToContentPropertiesFlagsFoldersCodes it can reportNote
EmlExactNoneLostDerivedFlagsNotCarried, FolderNameChanged, KeywordsNormalized, KeywordsNotCarriedOne .eml file per message; folders become directories. A file has no flags, so they are reported.
MboxExactNoneDerivedDerivedEnvelopeDateUnknown, FinalLineEndingAdded, FlagsNotCarried, FlagsWrittenAsHeaders, FolderFlattened, FolderNameChanged, KeywordsNormalizedFlags that the message does not state itself are written as Status, X-Status and X-Keywords fields in front of it; the only other case in which bytes change is a message with no final line ending, which gains one. One file per folder; a single-file destination drops folders.
MaildirExactNoneExactDerivedFlagsNotCarried, FolderNameChanged, KeywordsNormalized, KeywordsNotCarriedFlags and up to 26 keywords per folder go into the file name; Maildir++ folder names cannot hold a dot.
AppleMailExactNoneDerivedDerivedFlagsNotCarried, FolderNameChanged, KeywordsNormalized, KeywordsNotCarriedFlags go into the .emlx property list; keywords have no place there.
TnefApproximatedNoneNoneLostDateZoneNotStored, DefaultValueNotWritten, EmbeddedMessageTooDeep, EmptyValueNotWritten, ExtraAuthorsNotMapped, GroupFlattened, InReplyToFirstOnly, InvalidMediaType, NamedPropertyValueSetAside, PartHeaderNotMapped, PartsTooDeep, RepeatedHeaderNotMapped, SignatureNotVerifiable, StoreBookkeeping, ThreadIndexNotBase64, TnefCodePageDiffers, TnefMessageClassUsed, TnefNotUsed, TnefPartUnpacked, TnefPropertyIgnored, TnefPropertyWithoutName, TnefRecipientIgnored, TnefTrailingCrLfIgnored, TnefWriterLimit, ValueOutOfRangeThe message is converted to an Outlook item (MS-OXCMAIL) and written as TNEF.
IcsLostNoneNoneLostskipped: NotCalendarItemA message is not a calendar item; it is skipped and counted.
JCalLostNoneNoneLostskipped: NotCalendarItemA message is not a calendar item; it is skipped and counted.
XCalLostNoneNoneLostskipped: NotCalendarItemA message is not a calendar item; it is skipped and counted.
VCardLostNoneNoneLostskipped: NotContactItemA message is not a contact; it is skipped and counted.
JCardLostNoneNoneLostskipped: NotContactItemA message is not a contact; it is skipped and counted.
XCardLostNoneNoneLostskipped: NotContactItemA message is not a contact; it is skipped and counted.

Outlook mail (MSG, OFT, PST, OST, TNEF)

ToContentPropertiesFlagsFoldersCodes it can reportNote
EmlDerivedLostLostDerivedAddressSpellingFromTransportHeader, AddressUnresolved, AttachmentByReference, AttachmentWithoutData, BccNotWritten, BodyLineBreaksNormalized, CompositeTypeOnFlatData, DateBeforeFileTimeEpoch, DateFromDeliveryTime, DateSubSecondDropped, DefaultValueNotWritten, EmbeddedMessageTooDeep, EmptyValueNotWritten, ExchangeAddressWrittenAsSmtp, FlagsNotCarried, FolderNameChanged, HtmlFromRtf, InvalidMediaType, KeywordsNormalized, KeywordsNotCarried, MessageClassNotCarried, NamedPropertyValueSetAside, NoInternetMapping, ReplyToUnresolved, RtfCarriedAsTextRtf, RtfRedundant, RtfUndecodable, StoreBookkeeping, SubjectPrefixMarkerRemoved, SubjectWhitespaceTrimmed, TextFromRtf, TransportHeaderLineSkipped, TransportHeaderOverridden, TransportHeadersRewritten, ValueOutOfRangeMS-OXCMAIL 2.1 builds the message from the properties; properties with no Internet form are reported. Flags come from PidTagMessageFlags (read, unsent), PidTagFlagStatus and PidTagLastVerbExecuted.
MboxDerivedLostDerivedDerivedAddressSpellingFromTransportHeader, AddressUnresolved, AttachmentByReference, AttachmentWithoutData, BccNotWritten, BodyLineBreaksNormalized, CompositeTypeOnFlatData, DateBeforeFileTimeEpoch, DateFromDeliveryTime, DateSubSecondDropped, DefaultValueNotWritten, EmbeddedMessageTooDeep, EmptyValueNotWritten, EnvelopeDateUnknown, ExchangeAddressWrittenAsSmtp, FinalLineEndingAdded, FlagsNotCarried, FlagsWrittenAsHeaders, FolderFlattened, FolderNameChanged, HtmlFromRtf, InvalidMediaType, KeywordsNormalized, KeywordsNotCarried, MessageClassNotCarried, NamedPropertyValueSetAside, NoInternetMapping, ReplyToUnresolved, RtfCarriedAsTextRtf, RtfRedundant, RtfUndecodable, StoreBookkeeping, SubjectPrefixMarkerRemoved, SubjectWhitespaceTrimmed, TextFromRtf, TransportHeaderLineSkipped, TransportHeaderOverridden, TransportHeadersRewritten, ValueOutOfRangeMS-OXCMAIL 2.1 builds the message from the properties; properties with no Internet form are reported. Flags come from PidTagMessageFlags (read, unsent), PidTagFlagStatus and PidTagLastVerbExecuted.
MaildirDerivedLostDerivedDerivedAddressSpellingFromTransportHeader, AddressUnresolved, AttachmentByReference, AttachmentWithoutData, BccNotWritten, BodyLineBreaksNormalized, CompositeTypeOnFlatData, DateBeforeFileTimeEpoch, DateFromDeliveryTime, DateSubSecondDropped, DefaultValueNotWritten, EmbeddedMessageTooDeep, EmptyValueNotWritten, ExchangeAddressWrittenAsSmtp, FlagsNotCarried, FolderNameChanged, HtmlFromRtf, InvalidMediaType, KeywordsNormalized, KeywordsNotCarried, MessageClassNotCarried, NamedPropertyValueSetAside, NoInternetMapping, ReplyToUnresolved, RtfCarriedAsTextRtf, RtfRedundant, RtfUndecodable, StoreBookkeeping, SubjectPrefixMarkerRemoved, SubjectWhitespaceTrimmed, TextFromRtf, TransportHeaderLineSkipped, TransportHeaderOverridden, TransportHeadersRewritten, ValueOutOfRangeMS-OXCMAIL 2.1 builds the message from the properties; properties with no Internet form are reported. Flags come from PidTagMessageFlags (read, unsent), PidTagFlagStatus and PidTagLastVerbExecuted.
AppleMailDerivedLostDerivedDerivedAddressSpellingFromTransportHeader, AddressUnresolved, AttachmentByReference, AttachmentWithoutData, BccNotWritten, BodyLineBreaksNormalized, CompositeTypeOnFlatData, DateBeforeFileTimeEpoch, DateFromDeliveryTime, DateSubSecondDropped, DefaultValueNotWritten, EmbeddedMessageTooDeep, EmptyValueNotWritten, ExchangeAddressWrittenAsSmtp, FlagsNotCarried, FolderNameChanged, HtmlFromRtf, InvalidMediaType, KeywordsNormalized, KeywordsNotCarried, MessageClassNotCarried, NamedPropertyValueSetAside, NoInternetMapping, ReplyToUnresolved, RtfCarriedAsTextRtf, RtfRedundant, RtfUndecodable, StoreBookkeeping, SubjectPrefixMarkerRemoved, SubjectWhitespaceTrimmed, TextFromRtf, TransportHeaderLineSkipped, TransportHeaderOverridden, TransportHeadersRewritten, ValueOutOfRangeMS-OXCMAIL 2.1 builds the message from the properties; properties with no Internet form are reported. Flags come from PidTagMessageFlags (read, unsent), PidTagFlagStatus and PidTagLastVerbExecuted.
TnefExactExactExactLostTnefWriterLimitTNEF carries every property; a type or an OLE object it cannot hold is reported by name.
IcsLostNoneNoneLostskipped: NotCalendarItemNot an item of that family; it is skipped and counted.
JCalLostNoneNoneLostskipped: NotCalendarItemNot an item of that family; it is skipped and counted.
XCalLostNoneNoneLostskipped: NotCalendarItemNot an item of that family; it is skipped and counted.
VCardLostNoneNoneLostskipped: NotContactItemNot an item of that family; it is skipped and counted.
JCardLostNoneNoneLostskipped: NotContactItemNot an item of that family; it is skipped and counted.
XCardLostNoneNoneLostskipped: NotContactItemNot an item of that family; it is skipped and counted.

Outlook appointment, meeting or task (MSG, PST, OST, TNEF)

ToContentPropertiesFlagsFoldersCodes it can reportNote
EmlApproximatedLostNoneDerivedAmbiguousFirstInstance, AmbiguousShortMonth, AttachmentNotCarried, AttachmentWithoutException, CountOutOfRange, DerivedProperty, EndMismatch, ExceptionWithoutAttachment, FlagsNotCarried, FolderNameChanged, ForwardNotificationHasNoMethod, InconsistentTimeZone, KeywordsNormalized, KeywordsNotCarried, MessageClassNotCarried, MissingTime, NoIcalMapping, OrganizerWithoutSmtpAddress, RecurrenceNotCarried, RtfBodyNotCarried, StoreBookkeeping, TaskStatusWeakened, TrailingBytes, Truncated, UidSynthesized, UnexpectedVersion, UnsupportedCalendar, ValueOutOfRangeRouted to an .ics file in the side directory (or skipped with OtherItemsMode.Skip) by MS-OXCICAL.
MboxApproximatedLostNoneDerivedAmbiguousFirstInstance, AmbiguousShortMonth, AttachmentNotCarried, AttachmentWithoutException, CountOutOfRange, DerivedProperty, EndMismatch, ExceptionWithoutAttachment, FlagsNotCarried, FolderNameChanged, ForwardNotificationHasNoMethod, InconsistentTimeZone, KeywordsNormalized, KeywordsNotCarried, MessageClassNotCarried, MissingTime, NoIcalMapping, OrganizerWithoutSmtpAddress, RecurrenceNotCarried, RtfBodyNotCarried, StoreBookkeeping, TaskStatusWeakened, TrailingBytes, Truncated, UidSynthesized, UnexpectedVersion, UnsupportedCalendar, ValueOutOfRangeRouted to an .ics file in the side directory (or skipped with OtherItemsMode.Skip) by MS-OXCICAL.
MaildirApproximatedLostNoneDerivedAmbiguousFirstInstance, AmbiguousShortMonth, AttachmentNotCarried, AttachmentWithoutException, CountOutOfRange, DerivedProperty, EndMismatch, ExceptionWithoutAttachment, FlagsNotCarried, FolderNameChanged, ForwardNotificationHasNoMethod, InconsistentTimeZone, KeywordsNormalized, KeywordsNotCarried, MessageClassNotCarried, MissingTime, NoIcalMapping, OrganizerWithoutSmtpAddress, RecurrenceNotCarried, RtfBodyNotCarried, StoreBookkeeping, TaskStatusWeakened, TrailingBytes, Truncated, UidSynthesized, UnexpectedVersion, UnsupportedCalendar, ValueOutOfRangeRouted to an .ics file in the side directory (or skipped with OtherItemsMode.Skip) by MS-OXCICAL.
AppleMailApproximatedLostNoneDerivedAmbiguousFirstInstance, AmbiguousShortMonth, AttachmentNotCarried, AttachmentWithoutException, CountOutOfRange, DerivedProperty, EndMismatch, ExceptionWithoutAttachment, FlagsNotCarried, FolderNameChanged, ForwardNotificationHasNoMethod, InconsistentTimeZone, KeywordsNormalized, KeywordsNotCarried, MessageClassNotCarried, MissingTime, NoIcalMapping, OrganizerWithoutSmtpAddress, RecurrenceNotCarried, RtfBodyNotCarried, StoreBookkeeping, TaskStatusWeakened, TrailingBytes, Truncated, UidSynthesized, UnexpectedVersion, UnsupportedCalendar, ValueOutOfRangeRouted to an .ics file in the side directory (or skipped with OtherItemsMode.Skip) by MS-OXCICAL.
IcsApproximatedLostNoneLostAmbiguousFirstInstance, AmbiguousShortMonth, AttachmentNotCarried, AttachmentWithoutException, CountOutOfRange, DerivedProperty, EndMismatch, ExceptionWithoutAttachment, ForwardNotificationHasNoMethod, InconsistentTimeZone, MessageClassNotCarried, MissingTime, NoIcalMapping, OrganizerWithoutSmtpAddress, RecurrenceNotCarried, RtfBodyNotCarried, StoreBookkeeping, TaskStatusWeakened, TrailingBytes, Truncated, UidSynthesized, UnexpectedVersion, UnsupportedCalendar, ValueOutOfRangeMS-OXCICAL: recurrence, exceptions, attendees and reminders carry; properties iCalendar has no field for are reported.
JCalApproximatedLostNoneLostAmbiguousFirstInstance, AmbiguousShortMonth, AttachmentNotCarried, AttachmentWithoutException, CountOutOfRange, DerivedProperty, EndMismatch, ExceptionWithoutAttachment, FormAmbiguousValueType, FormBareParameterAsType, FormCharsetRemoved, FormComponentNotCarried, FormDuplicateParameterMerged, FormExtraComponentsDropped, FormFolding, FormGroupNotCarried, FormInlineBinaryAsDataUri, FormInvalidXmlCharacter, FormItemOrder, FormLineNotCarried, FormNameCase, FormParameterNotCarried, FormPropertyNotCarried, FormRedundantValueParameter, FormStructuredPadded, FormTransferEncodingRemoved, FormTypeNameNotCarried, FormValueNotRepresentable, FormVersionNotCarried, FormVersionSpecificForm, ForwardNotificationHasNoMethod, InconsistentTimeZone, MessageClassNotCarried, MissingTime, NoIcalMapping, OrganizerWithoutSmtpAddress, RecurrenceNotCarried, RtfBodyNotCarried, StoreBookkeeping, TaskStatusWeakened, TrailingBytes, Truncated, UidSynthesized, UnexpectedVersion, UnsupportedCalendar, ValueOutOfRangeMS-OXCICAL: recurrence, exceptions, attendees and reminders carry; properties iCalendar has no field for are reported.
XCalApproximatedLostNoneLostAmbiguousFirstInstance, AmbiguousShortMonth, AttachmentNotCarried, AttachmentWithoutException, CountOutOfRange, DerivedProperty, EndMismatch, ExceptionWithoutAttachment, FormAmbiguousValueType, FormBareParameterAsType, FormCharsetRemoved, FormComponentNotCarried, FormDuplicateParameterMerged, FormExtraComponentsDropped, FormFolding, FormGroupNotCarried, FormInlineBinaryAsDataUri, FormInvalidXmlCharacter, FormItemOrder, FormLineNotCarried, FormNameCase, FormParameterNotCarried, FormPropertyNotCarried, FormRedundantValueParameter, FormStructuredPadded, FormTransferEncodingRemoved, FormTypeNameNotCarried, FormValueNotRepresentable, FormVersionNotCarried, FormVersionSpecificForm, ForwardNotificationHasNoMethod, InconsistentTimeZone, MessageClassNotCarried, MissingTime, NoIcalMapping, OrganizerWithoutSmtpAddress, RecurrenceNotCarried, RtfBodyNotCarried, StoreBookkeeping, TaskStatusWeakened, TrailingBytes, Truncated, UidSynthesized, UnexpectedVersion, UnsupportedCalendar, ValueOutOfRangeMS-OXCICAL: recurrence, exceptions, attendees and reminders carry; properties iCalendar has no field for are reported.
TnefExactExactExactLostTnefWriterLimitEvery property travels in the TNEF.
VCardLostNoneNoneLostskipped: NotContactItemNot an item of that family; it is skipped and counted.
JCardLostNoneNoneLostskipped: NotContactItemNot an item of that family; it is skipped and counted.
XCardLostNoneNoneLostskipped: NotContactItemNot an item of that family; it is skipped and counted.

Outlook contact (MSG, PST, OST, TNEF)

ToContentPropertiesFlagsFoldersCodes it can reportNote
EmlApproximatedLostNoneDerivedAttachmentNotCarried, DefaultValueNotWritten, DerivedValue, EmailSlotChanged, EmptyValueNotWritten, ExchangeAddressNotExported, FlagsNotCarried, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, MemberNotCarried, NotAContact, PhoneSlotChanged, StoreBookkeeping, UnsupportedPhotoTypeRouted to a .vcf file in the side directory (or skipped) by MS-OXVCARD.
MboxApproximatedLostNoneDerivedAttachmentNotCarried, DefaultValueNotWritten, DerivedValue, EmailSlotChanged, EmptyValueNotWritten, ExchangeAddressNotExported, FlagsNotCarried, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, MemberNotCarried, NotAContact, PhoneSlotChanged, StoreBookkeeping, UnsupportedPhotoTypeRouted to a .vcf file in the side directory (or skipped) by MS-OXVCARD.
MaildirApproximatedLostNoneDerivedAttachmentNotCarried, DefaultValueNotWritten, DerivedValue, EmailSlotChanged, EmptyValueNotWritten, ExchangeAddressNotExported, FlagsNotCarried, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, MemberNotCarried, NotAContact, PhoneSlotChanged, StoreBookkeeping, UnsupportedPhotoTypeRouted to a .vcf file in the side directory (or skipped) by MS-OXVCARD.
AppleMailApproximatedLostNoneDerivedAttachmentNotCarried, DefaultValueNotWritten, DerivedValue, EmailSlotChanged, EmptyValueNotWritten, ExchangeAddressNotExported, FlagsNotCarried, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, MemberNotCarried, NotAContact, PhoneSlotChanged, StoreBookkeeping, UnsupportedPhotoTypeRouted to a .vcf file in the side directory (or skipped) by MS-OXVCARD.
VCardApproximatedLostNoneLostAttachmentNotCarried, DefaultValueNotWritten, DerivedValue, EmailSlotChanged, EmptyValueNotWritten, ExchangeAddressNotExported, MemberNotCarried, NotAContact, PhoneSlotChanged, StoreBookkeeping, UnsupportedPhotoTypeMS-OXVCARD: names, phones, e-mail slots, addresses, dates and photo carry; properties vCard has no field for are reported.
JCardApproximatedLostNoneLostAttachmentNotCarried, DefaultValueNotWritten, DerivedValue, EmailSlotChanged, EmptyValueNotWritten, ExchangeAddressNotExported, FormAmbiguousValueType, FormBareParameterAsType, FormCharsetRemoved, FormComponentNotCarried, FormDuplicateParameterMerged, FormExtraComponentsDropped, FormFolding, FormGroupNotCarried, FormInlineBinaryAsDataUri, FormInvalidXmlCharacter, FormItemOrder, FormLineNotCarried, FormNameCase, FormParameterNotCarried, FormPropertyNotCarried, FormRedundantValueParameter, FormStructuredPadded, FormTransferEncodingRemoved, FormTypeNameNotCarried, FormValueNotRepresentable, FormVersionNotCarried, FormVersionSpecificForm, MemberNotCarried, NotAContact, PhoneSlotChanged, StoreBookkeeping, UnsupportedPhotoTypeMS-OXVCARD: names, phones, e-mail slots, addresses, dates and photo carry; properties vCard has no field for are reported.
XCardApproximatedLostNoneLostAttachmentNotCarried, DefaultValueNotWritten, DerivedValue, EmailSlotChanged, EmptyValueNotWritten, ExchangeAddressNotExported, FormAmbiguousValueType, FormBareParameterAsType, FormCharsetRemoved, FormComponentNotCarried, FormDuplicateParameterMerged, FormExtraComponentsDropped, FormFolding, FormGroupNotCarried, FormInlineBinaryAsDataUri, FormInvalidXmlCharacter, FormItemOrder, FormLineNotCarried, FormNameCase, FormParameterNotCarried, FormPropertyNotCarried, FormRedundantValueParameter, FormStructuredPadded, FormTransferEncodingRemoved, FormTypeNameNotCarried, FormValueNotRepresentable, FormVersionNotCarried, FormVersionSpecificForm, MemberNotCarried, NotAContact, PhoneSlotChanged, StoreBookkeeping, UnsupportedPhotoTypeMS-OXVCARD: names, phones, e-mail slots, addresses, dates and photo carry; properties vCard has no field for are reported.
TnefExactExactExactLostTnefWriterLimitEvery property travels in the TNEF.
IcsLostNoneNoneLostskipped: NotCalendarItemNot an item of that family; it is skipped and counted.
JCalLostNoneNoneLostskipped: NotCalendarItemNot an item of that family; it is skipped and counted.
XCalLostNoneNoneLostskipped: NotCalendarItemNot an item of that family; it is skipped and counted.

Outlook for Mac mail (OLM)

ToContentPropertiesFlagsFoldersCodes it can reportNote
EmlApproximatedLostDerivedDerivedAddressUnresolved, BccNotWritten, ConversationTopicWhitespaceTrimmed, DateZoneNotStored, EmbeddedMessageAsData, FlagsNotCarried, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, OlmFieldDiffersFromSource, UnmappedThe message is rebuilt from the fields the view reads (addresses, subject, dates, identifiers, bodies, attachments); other OLM elements are listed as Unmapped. The read flag becomes Seen, categories become keywords.
MboxApproximatedLostDerivedDerivedAddressUnresolved, BccNotWritten, ConversationTopicWhitespaceTrimmed, DateZoneNotStored, EmbeddedMessageAsData, EnvelopeDateUnknown, FinalLineEndingAdded, FlagsNotCarried, FlagsWrittenAsHeaders, FolderFlattened, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, OlmFieldDiffersFromSource, UnmappedThe message is rebuilt from the fields the view reads (addresses, subject, dates, identifiers, bodies, attachments); other OLM elements are listed as Unmapped. The read flag becomes Seen, categories become keywords.
MaildirApproximatedLostDerivedDerivedAddressUnresolved, BccNotWritten, ConversationTopicWhitespaceTrimmed, DateZoneNotStored, EmbeddedMessageAsData, FlagsNotCarried, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, OlmFieldDiffersFromSource, UnmappedThe message is rebuilt from the fields the view reads (addresses, subject, dates, identifiers, bodies, attachments); other OLM elements are listed as Unmapped. The read flag becomes Seen, categories become keywords.
AppleMailApproximatedLostDerivedDerivedAddressUnresolved, BccNotWritten, ConversationTopicWhitespaceTrimmed, DateZoneNotStored, EmbeddedMessageAsData, FlagsNotCarried, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, OlmFieldDiffersFromSource, UnmappedThe message is rebuilt from the fields the view reads (addresses, subject, dates, identifiers, bodies, attachments); other OLM elements are listed as Unmapped. The read flag becomes Seen, categories become keywords.
TnefLostLostNoneLostskipped: NotMapiConvertibleAn OLM record has no property bag; it is skipped and counted.
IcsLostNoneNoneLostskipped: NotCalendarItemNot an item of that family; it is skipped and counted.
JCalLostNoneNoneLostskipped: NotCalendarItemNot an item of that family; it is skipped and counted.
XCalLostNoneNoneLostskipped: NotCalendarItemNot an item of that family; it is skipped and counted.
VCardLostNoneNoneLostskipped: NotContactItemNot an item of that family; it is skipped and counted.
JCardLostNoneNoneLostskipped: NotContactItemNot an item of that family; it is skipped and counted.
XCardLostNoneNoneLostskipped: NotContactItemNot an item of that family; it is skipped and counted.

Outlook for Mac appointment, task or note (OLM)

ToContentPropertiesFlagsFoldersCodes it can reportNote
EmlApproximatedLostNoneDerivedAllDayEnd, AttendeeStatus, CalendarAttachments, DateOnlyZone, EndZoneIgnored, FlagsNotCarried, FloatingTime, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, NotACalendarItem, OrganizerNotAnAddress, RecurrenceEnd, RecurrenceKind, RelativeRecurrence, UnmappedRouted to an .ics file in the side directory (or skipped).
MboxApproximatedLostNoneDerivedAllDayEnd, AttendeeStatus, CalendarAttachments, DateOnlyZone, EndZoneIgnored, FlagsNotCarried, FloatingTime, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, NotACalendarItem, OrganizerNotAnAddress, RecurrenceEnd, RecurrenceKind, RelativeRecurrence, UnmappedRouted to an .ics file in the side directory (or skipped).
MaildirApproximatedLostNoneDerivedAllDayEnd, AttendeeStatus, CalendarAttachments, DateOnlyZone, EndZoneIgnored, FlagsNotCarried, FloatingTime, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, NotACalendarItem, OrganizerNotAnAddress, RecurrenceEnd, RecurrenceKind, RelativeRecurrence, UnmappedRouted to an .ics file in the side directory (or skipped).
AppleMailApproximatedLostNoneDerivedAllDayEnd, AttendeeStatus, CalendarAttachments, DateOnlyZone, EndZoneIgnored, FlagsNotCarried, FloatingTime, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, NotACalendarItem, OrganizerNotAnAddress, RecurrenceEnd, RecurrenceKind, RelativeRecurrence, UnmappedRouted to an .ics file in the side directory (or skipped).
IcsApproximatedLostNoneLostAllDayEnd, AttendeeStatus, CalendarAttachments, DateOnlyZone, EndZoneIgnored, FloatingTime, NotACalendarItem, OrganizerNotAnAddress, RecurrenceEnd, RecurrenceKind, RelativeRecurrence, UnmappedAppointments, tasks and notes (VJOURNAL) carry their fields; the rest is listed as Unmapped.
JCalApproximatedLostNoneLostAllDayEnd, AttendeeStatus, CalendarAttachments, DateOnlyZone, EndZoneIgnored, FloatingTime, FormAmbiguousValueType, FormBareParameterAsType, FormCharsetRemoved, FormComponentNotCarried, FormDuplicateParameterMerged, FormExtraComponentsDropped, FormFolding, FormGroupNotCarried, FormInlineBinaryAsDataUri, FormInvalidXmlCharacter, FormItemOrder, FormLineNotCarried, FormNameCase, FormParameterNotCarried, FormPropertyNotCarried, FormRedundantValueParameter, FormStructuredPadded, FormTransferEncodingRemoved, FormTypeNameNotCarried, FormValueNotRepresentable, FormVersionNotCarried, FormVersionSpecificForm, NotACalendarItem, OrganizerNotAnAddress, RecurrenceEnd, RecurrenceKind, RelativeRecurrence, UnmappedAppointments, tasks and notes (VJOURNAL) carry their fields; the rest is listed as Unmapped.
XCalApproximatedLostNoneLostAllDayEnd, AttendeeStatus, CalendarAttachments, DateOnlyZone, EndZoneIgnored, FloatingTime, FormAmbiguousValueType, FormBareParameterAsType, FormCharsetRemoved, FormComponentNotCarried, FormDuplicateParameterMerged, FormExtraComponentsDropped, FormFolding, FormGroupNotCarried, FormInlineBinaryAsDataUri, FormInvalidXmlCharacter, FormItemOrder, FormLineNotCarried, FormNameCase, FormParameterNotCarried, FormPropertyNotCarried, FormRedundantValueParameter, FormStructuredPadded, FormTransferEncodingRemoved, FormTypeNameNotCarried, FormValueNotRepresentable, FormVersionNotCarried, FormVersionSpecificForm, NotACalendarItem, OrganizerNotAnAddress, RecurrenceEnd, RecurrenceKind, RelativeRecurrence, UnmappedAppointments, tasks and notes (VJOURNAL) carry their fields; the rest is listed as Unmapped.
VCardLostNoneNoneLostskipped: NotContactItemNot an item of that family; it is skipped and counted.
JCardLostNoneNoneLostskipped: NotContactItemNot an item of that family; it is skipped and counted.
XCardLostNoneNoneLostskipped: NotContactItemNot an item of that family; it is skipped and counted.
TnefLostLostNoneLostskipped: NotMapiConvertibleAn OLM record has no property bag; it is skipped and counted.

Outlook for Mac contact or group (OLM)

ToContentPropertiesFlagsFoldersCodes it can reportNote
EmlApproximatedLostNoneDerivedFlagsNotCarried, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, MemberName, NotAContact, UnmappedRouted to a .vcf file in the side directory (or skipped).
MboxApproximatedLostNoneDerivedFlagsNotCarried, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, MemberName, NotAContact, UnmappedRouted to a .vcf file in the side directory (or skipped).
MaildirApproximatedLostNoneDerivedFlagsNotCarried, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, MemberName, NotAContact, UnmappedRouted to a .vcf file in the side directory (or skipped).
AppleMailApproximatedLostNoneDerivedFlagsNotCarried, FolderNameChanged, KeywordsNormalized, KeywordsNotCarried, MemberName, NotAContact, UnmappedRouted to a .vcf file in the side directory (or skipped).
VCardApproximatedLostNoneLostMemberName, NotAContact, UnmappedContacts and groups (KIND:group) carry their fields; the rest is listed as Unmapped.
JCardApproximatedLostNoneLostFormAmbiguousValueType, FormBareParameterAsType, FormCharsetRemoved, FormComponentNotCarried, FormDuplicateParameterMerged, FormExtraComponentsDropped, FormFolding, FormGroupNotCarried, FormInlineBinaryAsDataUri, FormInvalidXmlCharacter, FormItemOrder, FormLineNotCarried, FormNameCase, FormParameterNotCarried, FormPropertyNotCarried, FormRedundantValueParameter, FormStructuredPadded, FormTransferEncodingRemoved, FormTypeNameNotCarried, FormValueNotRepresentable, FormVersionNotCarried, FormVersionSpecificForm, MemberName, NotAContact, UnmappedContacts and groups (KIND:group) carry their fields; the rest is listed as Unmapped.
XCardApproximatedLostNoneLostFormAmbiguousValueType, FormBareParameterAsType, FormCharsetRemoved, FormComponentNotCarried, FormDuplicateParameterMerged, FormExtraComponentsDropped, FormFolding, FormGroupNotCarried, FormInlineBinaryAsDataUri, FormInvalidXmlCharacter, FormItemOrder, FormLineNotCarried, FormNameCase, FormParameterNotCarried, FormPropertyNotCarried, FormRedundantValueParameter, FormStructuredPadded, FormTransferEncodingRemoved, FormTypeNameNotCarried, FormValueNotRepresentable, FormVersionNotCarried, FormVersionSpecificForm, MemberName, NotAContact, UnmappedContacts and groups (KIND:group) carry their fields; the rest is listed as Unmapped.
IcsLostNoneNoneLostskipped: NotCalendarItemNot an item of that family; it is skipped and counted.
JCalLostNoneNoneLostskipped: NotCalendarItemNot an item of that family; it is skipped and counted.
XCalLostNoneNoneLostskipped: NotCalendarItemNot an item of that family; it is skipped and counted.
TnefLostLostNoneLostskipped: NotMapiConvertibleAn OLM record has no property bag; it is skipped and counted.

Outlook for Mac categories and other records (OLM)

ToContentPropertiesFlagsFoldersCodes it can reportNote
EmlLostNoneNoneLostskipped: NotMailA category or settings record is not mail, a calendar item or a contact; it is skipped and counted.
MboxLostNoneNoneLostskipped: NotMailA category or settings record is not mail, a calendar item or a contact; it is skipped and counted.
MaildirLostNoneNoneLostskipped: NotMailA category or settings record is not mail, a calendar item or a contact; it is skipped and counted.
AppleMailLostNoneNoneLostskipped: NotMailA category or settings record is not mail, a calendar item or a contact; it is skipped and counted.
IcsLostNoneNoneLostskipped: NotCalendarItemA category or settings record is not mail, a calendar item or a contact; it is skipped and counted.
VCardLostNoneNoneLostskipped: NotContactItemA category or settings record is not mail, a calendar item or a contact; it is skipped and counted.
JCalLostNoneNoneLostskipped: NotCalendarItemA category or settings record is not mail, a calendar item or a contact; it is skipped and counted.
JCardLostNoneNoneLostskipped: NotContactItemA category or settings record is not mail, a calendar item or a contact; it is skipped and counted.
XCalLostNoneNoneLostskipped: NotCalendarItemA category or settings record is not mail, a calendar item or a contact; it is skipped and counted.
XCardLostNoneNoneLostskipped: NotContactItemA category or settings record is not mail, a calendar item or a contact; it is skipped and counted.
TnefLostNoneNoneLostskipped: NotMapiConvertibleA category or settings record is not mail, a calendar item or a contact; it is skipped and counted.

Calendar file (ICS, jCal, xCal)

ToContentPropertiesFlagsFoldersCodes it can reportNote
EmlExactNoneNoneLostnoneKept as the file's own bytes in the side directory.
MboxExactNoneNoneLostnoneKept as the file's own bytes in the side directory.
MaildirExactNoneNoneLostnoneKept as the file's own bytes in the side directory.
AppleMailExactNoneNoneLostnoneKept as the file's own bytes in the side directory.
IcsExactNoneNoneLostnoneAn iCalendar file converted to iCalendar is the same bytes; the forms of RFC 7265 and RFC 6321 carry the same components, and every difference is a Form code.
JCalDerivedNoneNoneLostFormAmbiguousValueType, FormBareParameterAsType, FormCharsetRemoved, FormComponentNotCarried, FormDuplicateParameterMerged, FormExtraComponentsDropped, FormFolding, FormGroupNotCarried, FormInlineBinaryAsDataUri, FormInvalidXmlCharacter, FormItemOrder, FormLineNotCarried, FormNameCase, FormParameterNotCarried, FormPropertyNotCarried, FormRedundantValueParameter, FormStructuredPadded, FormTransferEncodingRemoved, FormTypeNameNotCarried, FormValueNotRepresentable, FormVersionNotCarried, FormVersionSpecificFormBetween forms the data carries; folding and name case change the text and are reported as bookkeeping.
XCalDerivedNoneNoneLostFormAmbiguousValueType, FormBareParameterAsType, FormCharsetRemoved, FormComponentNotCarried, FormDuplicateParameterMerged, FormExtraComponentsDropped, FormFolding, FormGroupNotCarried, FormInlineBinaryAsDataUri, FormInvalidXmlCharacter, FormItemOrder, FormLineNotCarried, FormNameCase, FormParameterNotCarried, FormPropertyNotCarried, FormRedundantValueParameter, FormStructuredPadded, FormTransferEncodingRemoved, FormTypeNameNotCarried, FormValueNotRepresentable, FormVersionNotCarried, FormVersionSpecificFormBetween forms the data carries; folding and name case change the text and are reported as bookkeeping.
VCardLostNoneNoneLostskipped: NotContactItemNot an item of that family; it is skipped and counted.
JCardLostNoneNoneLostskipped: NotContactItemNot an item of that family; it is skipped and counted.
XCardLostNoneNoneLostskipped: NotContactItemNot an item of that family; it is skipped and counted.
TnefLostNoneNoneLostskipped: NotMailA calendar file is not a message; it is skipped and counted.

Card file (vCard, jCard, xCard)

ToContentPropertiesFlagsFoldersCodes it can reportNote
EmlExactNoneNoneLostnoneKept as the file's own bytes in the side directory.
MboxExactNoneNoneLostnoneKept as the file's own bytes in the side directory.
MaildirExactNoneNoneLostnoneKept as the file's own bytes in the side directory.
AppleMailExactNoneNoneLostnoneKept as the file's own bytes in the side directory.
VCardExactNoneNoneLostnoneA vCard file converted to vCard is the same bytes.
JCardDerivedNoneNoneLostFormAmbiguousValueType, FormBareParameterAsType, FormCharsetRemoved, FormComponentNotCarried, FormDuplicateParameterMerged, FormExtraComponentsDropped, FormFolding, FormGroupNotCarried, FormInlineBinaryAsDataUri, FormInvalidXmlCharacter, FormItemOrder, FormLineNotCarried, FormNameCase, FormParameterNotCarried, FormPropertyNotCarried, FormRedundantValueParameter, FormStructuredPadded, FormTransferEncodingRemoved, FormTypeNameNotCarried, FormValueNotRepresentable, FormVersionNotCarried, FormVersionSpecificFormBetween forms the data carries; every difference is a Form code.
XCardDerivedNoneNoneLostFormAmbiguousValueType, FormBareParameterAsType, FormCharsetRemoved, FormComponentNotCarried, FormDuplicateParameterMerged, FormExtraComponentsDropped, FormFolding, FormGroupNotCarried, FormInlineBinaryAsDataUri, FormInvalidXmlCharacter, FormItemOrder, FormLineNotCarried, FormNameCase, FormParameterNotCarried, FormPropertyNotCarried, FormRedundantValueParameter, FormStructuredPadded, FormTransferEncodingRemoved, FormTypeNameNotCarried, FormValueNotRepresentable, FormVersionNotCarried, FormVersionSpecificFormBetween forms the data carries; every difference is a Form code.
IcsLostNoneNoneLostskipped: NotCalendarItemNot an item of that family; it is skipped and counted.
JCalLostNoneNoneLostskipped: NotCalendarItemNot an item of that family; it is skipped and counted.
XCalLostNoneNoneLostskipped: NotCalendarItemNot an item of that family; it is skipped and counted.
TnefLostNoneNoneLostskipped: NotMailA card file is not a message; it is skipped and counted.

Codes added by the store layer

CodeKindMeaning
FolderNameChangedApproximateda character a file system or Maildir++ cannot hold in a folder name was replaced
FolderFlattenedDroppeda single mbox file has no folders
FlagsNotCarriedDroppedthe destination keeps no flags, or an mbox message's own Status fields were kept over the source's flags
KeywordsNotCarriedDroppedthe destination keeps no keywords (or a Maildir folder is past 26)
KeywordsNormalizedApproximatedwhite space in a keyword or category name became an underscore (Maildir and X-Keywords names cannot hold it)
ConversationTopicWhitespaceTrimmedApproximatedOLM record rebuilt from the shared view: leading or trailing white space of the conversation topic cannot survive in a header value
FlagsWrittenAsHeadersInternalmbox: Status, X-Status and X-Keywords fields were added
FinalLineEndingAddedApproximatedmbox: the message did not end in a line ending and gained one
EnvelopeDateUnknownApproximatedmbox: the message has no date; the envelope line carries the Unix epoch so output is reproducible
OlmFieldDiffersFromSourceOverriddenan OLM record holds the original message as well; where a field of the record differs from it, the original is written and the field named
BccNotWrittenDroppeda message rebuilt from the shared view has blind-copy recipients; they are not written
DateZoneNotStoredApproximateda message rebuilt from the shared view is dated in UTC
EmbeddedMessageAsDataApproximateda message rebuilt from the shared view writes an embedded message as an ordinary attachment
FormFolding, FormNameCase, FormItemOrder, FormLineNotCarried, FormRedundantValueParameter, FormDuplicateParameterMerged, FormCharsetRemovedInternal or Approximatedwhat the JSON or XML form of a calendar or card could not carry exactly (the calendar library's form losses by kind); folding and name case are bookkeeping

Command line

onemail convert mail.olm out --to maildir          # a store to a Maildir++ tree, folders kept
onemail convert inbox.mbox out.mbox                # the format follows the extension (eml, maildir and emlx need --to)
onemail convert archive.pst out --to eml --folder "Top of Personal Folders/Inbox"
onemail export archive.pst calendar --format ics --json

convert and export print the totals (read, written, skipped by reason, per-folder counts, each loss code with its item count and an example) and, with --json, JSON instead. --no-other-items skips calendar and contact items that would go to _items. The exit code is 0 on success (skips and reported losses are not errors), 1 when an item errored or the run failed, 2 for a usage error, 130 when cancelled.

What was checked

On the corpora (counts per run, all in tools/convert/run.sh):

  • MIME to EML, mbox, Maildir and EMLX, read back byte-identical: probes 219/224 (5 have no header block and are skipped as Unreadable), Mime4j 78/80, dovecot mbox 3,237/3,237, dovecot messages 2,858/2,859, Enron sample 5,032/5,032, DBX store 2,053/2,053; none changed. An mbox message that lacks a final line ending gains one (FinalLineEndingAdded).
  • MAPI to EML and back to MAPI: MSG 45 items, 8,743 properties and PST 25 items, 2,399 properties, 0 silent; OLM mail 530 items, 10,070 fields, 0 silent (11 reported).
  • Store to store, items read = written + skipped and folder trees equal on every store (CFReDS OST, Tika PSTs, OLM generated and samples, DBX store in 13 folders, dovecot mbox, a Maildir made from it, Enron sample); Python mailbox and email read every produced EML tree, mbox and Maildir with the same folders and counts (18 of 18 runs); MimeKit, Python and Go differential on the produced EMLs ran with no unexplained difference.
  • Memory: the CMU Enron maildir (517,401 messages, 3,311 folders) to Maildir 48.7 s, peak working set 119 MB; to mbox 23.1 s, 129 MB. Every message is read back and counted in the destination.