github stalwartlabs/vandelay v1.0.16

2 hours ago

[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 as Exchange2016; they are now addressed as Exchange2016, 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 review or Congés gave keywords JMAP does not allow; they now go through the same reduction as IMAP --mime-keywords (Catégorie Rouge becomes cat_gorie_rouge) and are deduplicated. A read-receipt request no longer adds the unregistered $notified keyword (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 as Recipient Cache, GAL Contacts or Yammer 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 failed errors; FindItem dropped Task and PostItem entries 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:Attachments was not requested; the mailbox owner's own response (MyResponseType) and the event's sensitivity were not requested either, so accepted meetings came out as needs-action and private events lost their privacy. 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 skip IPM.Contact, IPM.DistList, IPM.Appointment, IPM.Task, IPM.StickyNote and IPM.Activity items, with a count per class in the log (fixes #62)
  • 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_64 and aarch64 musl binaries are built with cargo-zigbuild like the other musl targets, so a release no longer depends on installing musl-tools from the Ubuntu package mirrors; dependency installation is retried

Don't miss a new vandelay release

NewReleases is sending notifications on new releases.