[1.0.16] - 2026-11-11
Fixed
- MS Exchange EWS:
- Exchange 2019 servers (version 15.2) were addressed with the schema version
Exchange2019, which does not exist, so every call was refused once and sent again asExchange2016; they are now addressed asExchange2016, and once a server has refused a schema version, the client no longer goes back above the one it accepted (fixes #64) - MS Exchange EWS and Graph: Outlook categories were stored as message keywords with only their case lowered, so
Project revieworCongésgave keywords JMAP does not allow; they now go through the same reduction as IMAP--mime-keywords(Catégorie Rougebecomescat_gorie_rouge) and are deduplicated. A read-receipt request no longer adds the unregistered$notifiedkeyword (fixes #65) - all-day events, the exceptions of all-day series, and contact birthdays and anniversaries landed one day early east of UTC, because EWS sends them as UTC instants and only the date part was kept; the date is now taken in the event's time zone (UTC for contacts), rounded to the nearest midnight. Items already in an archive are only corrected when they change in the source mailbox, so re-import into a fresh archive (fixes #59)
- Outlook's "no date" (year 4500 or later) was imported as a real date; such contact anniversaries are dropped and such calendar items are skipped. Archives imported with an earlier version keep the ones already stored, so re-import into a fresh archive (fixes #66)
- hidden system folders (
PR_ATTR_HIDDEN, such asRecipient Cache,GAL ContactsorYammer Root) were imported as address books and mailboxes; they are now skipped together with their subfolders (fixes #61) - a mail folder under a calendar or contacts folder was filed at the top level on the first run, but on later runs took the local id of that calendar or address book as its parent, giving an unrelated parent or a FOREIGN KEY error that stopped the import; a mail folder is now filed under its nearest mail ancestor on every run (fixes #63)
- an organizer, attendee, recipient or distribution list member picked from an address book carries that contact's ItemId, which replaced the ItemId of the event, message or list, causing
UNIQUE constraint failederrors; FindItem droppedTaskandPostItementries and gave their ItemId to the item listed before them; and one item that failed to parse or store aborted the rest of its folder. Only the item's own ItemId is used now, every listed item is kept, and a failing item is logged and counted while the folder goes on (fixes #60) - event attachments were never imported because
item:Attachmentswas not requested; the mailbox owner's own response (MyResponseType) and the event's sensitivity were not requested either, so accepted meetings came out asneeds-actionand private events lost theirprivacy. All three are now imported (fixes #67) - a folder without a
FolderClass(such as Outlook's(This computer only)contacts folders) was always imported as a mailbox, and contacts, appointments, tasks, notes and journal entries found in mail folders (typically Deleted Items) were stored as emails; a class-less folder now takes its kind from the classes of a few of its items, and mail folders skipIPM.Contact,IPM.DistList,IPM.Appointment,IPM.Task,IPM.StickyNoteandIPM.Activityitems, with a count per class in the log (fixes #62)
- Exchange 2019 servers (version 15.2) were addressed with the schema version
- MS Exchange Graph:
- all-day events, the occurrences and exceptions of all-day series, and contact birthdays landed one day early east of UTC when Graph returned them as UTC instants rather than at midnight, and every occurrence of such a series could be imported as deleted; a value that is not at midnight is now taken in the event's time zone (UTC for birthdays), rounded to the nearest midnight. Outlook's "no date" (year 4500 or later) is no longer imported as a birthday, a recurrence end or an event (#59, #66)
Changed
- Release builds: the
x86_64andaarch64musl binaries are built withcargo-zigbuildlike the other musl targets, so a release no longer depends on installingmusl-toolsfrom the Ubuntu package mirrors; dependency installation is retried