3,365 apps tracked 0 new today 17 updated today Synced 18m ago

DavMail

Office 365 and Exchange gateway

Mickaël Guessant

org.davmail.DavMail
View on Flathub ↗

Ever wanted to get rid of Outlook? DavMail is a POP/IMAP/SMTP/CalDAV/CardDAV/LDAP Exchange and Office 365 gateway allowing users to use any mail/calendar client (e.g. Thunderbird with Lightning or Apple iCal) with an Exchange server. DavMail now includes an LDAP gateway to Exchange global address book and user personal contacts to allow recipient address completion in the mail compose window and full calendar support with attendee free busy display. The main goal of DavMail is to provide standard compliant protocols in front of proprietary Exchange. This means LDAP for address book search, SMTP to send messages, IMAP to browse messages on the server in any folder, POP to retrieve inbox messages only, CalDAV for calendar support and CardDAV for contact synchronization. Thus, any standard compliant client can be used with Microsoft Exchange and Office 365. DavMail gateway is implemented in java and should run on any platform. Releases are tested on Windows, Linux (Fedora, Debian, Ubuntu, OpenSUSE) and macOS.

Screenshots

DavMail architecture
DavMail architecture
DavMail main window
DavMail main window
DavMail Settings
DavMail Settings
DavMail O365 Signin
DavMail O365 Signin

Observed history

App ChangeVersionWhen ↓
updated7.0.020 Sept 2026

Upstream releases

Release notes supplied by the developer. These dates are not Flathub package publication times.

7.0.019 Sept 2026

Major release focused on Graph API stability and performance, implemented folder delta sync with caching for efficient IMAP synchronization, also added Distribution list support, improved recurrence handling on events including per-instance meeting response. Reworked attendee and organizer, shared calendar and exception occurrences handling in EWS backend. Introduced a new read-only mode (davmail.caldavReadonly) for calendars, fixed timezone and phone number mappings.

Graph

  • Graph: implement maximum retry count on throttling
  • Graph: in executeGraphRequest rebuild request on retry
  • Graph: replace convertTimezoneFromExchange with DateUtil.getTimeZone
  • Graph: refactor convertUntilToEndDate to use DateUtil.convertDate, implement test for conversion
  • Graph: refactor date conversion methods buildUntilDate and convertOriginalStartDate
  • Graph: more date refactoring on originalStartTimeZone conversion
  • Graph: refactor isItemId to reuse compiled regex pattern
  • Graph: some more refactoring and cleanup, make sure throttling is detected on paging requests
  • Graph: remove responseTypeToPartstatMap in favor of responseTypeToPartstat method
  • Graph: nextLink must not be reencoded, replaces all other GraphRequestBuilder inputs
  • Graph: prepare delta synchronization, introduce deltaLink retrieval in GraphIterator
  • Graph: implement maxPageSize and deltaToken parameters in GraphRequestBuilder
  • Graph: implement getDeltaLink to retrieve current delta link value on folder, based on IMAP_MESSAGE_DELTA_ATTRIBUTES and getMessage to retrieve a message by id
  • Graph: unit test for delta sync
  • Graph: introduce refreshMessages to prepare delta sync
  • Graph: initial implementation of folder delta sync support, enable with davmail.graph.deltaSync=true
  • Graph: set both size limit ($top) and max page size (odata.maxpagesize) in searchMessages, log item count in fetchNextPage
  • Graph: implement full folder caching on top of delta sync, based on ConcurrentHashMap and ReentrantLock
  • Graph: improve recurrence handling, firstDayOfWeek is required for weekly patterns in Graph
  • Graph: add missing datereceived mapping for receivedDateTime
  • Graph: log Acquire lock on folder
  • Graph: always return false in isExpired as access token is automatically refreshed
  • Graph: switch delta sync on by default
  • Graph: detect meeting response with missing event, abort to avoid creating an invalid duplicate event
  • Graph: document davmail.graph.deltaSync in reference davmail.properties, even if it's now enabled by default
  • Graph: Handle HttpTokenExpiredException error code with a specific exception
  • Graph: switch contact description field to personalNotes instead of 0x1000 MAPI property
  • Graph: add a test case on contact personalNotes
  • Graph: fix delta sync test case
  • Graph: refactor attendees status / send meeting response to properly handle individual occurrences response status update
  • Graph: even more strict check on meeting response with missing event
  • Graph: adjust recursive multicondition handling to detect inner empty conditions, map personalnotes to standard field and separate description field
  • Graph: cleanup and avoid loop in getVTimezone
  • Graph: restore isExpired check, helps detect network down issues before trying to actually calling graph
  • Graph: cleanup partstatToResponseMap, remove unused map
  • Graph: review attributes retrieved on messages, drop changeKey, messageheaders, outlookmessageclass, should help with https://github.com/mguessan/davmail/issues/509
  • Graph: improve delta sync logging
  • Graph: improve getSubFolderByName logging
  • Graph: prepare distributionlist implementation
  • Graph: initial distribution list implementation, retrieve VCARD entries with members as KIND:group
  • Graph: implement distribution list lifecycle (create/update/delete), assume client takes into account returned item name
  • Graph: review distribution list attribute mapping to match EWS, and workaround for bug on the distribution list beta endpoint
  • Graph: make sure message count matches current list count
  • Graph: add missing Calendars.ReadWrite.Shared scope to access shared folders over graph
  • Graph: refactor task implementation to insert a TODO. prefix in item name and avoid not found / failover logic
  • Graph: fix searchTasksOnly, return empty list on shared folders
  • Graph: switch DateUtil to use java.time, make sure day is lower case
  • Graph: experimental recurrence support on todo items, fix TODO. based itemId implementation
  • Graph: fix https://github.com/mguessan/davmail/issues/515 Graph + O365DeviceCode: with davmail.enableOidc unset, device code requested on v1 endpoint but redeemed on v2 — no refresh_token, "Exception parsing token"
  • Graph: refactor event search to return minimal information by default, but full event content on timerange search, fix for https://github.com/mguessan/davmail/issues/514
  • Graph: do not search for tasks in shared folders
  • Graph: build imapFlagMap as part of loadMessages/computeAttributes to avoid ConcurrentModificationException on multiple connections to same folder
  • Graph: move computeAttributes to critical section to ensure imapFlagMap is properly refreshed
  • Graph: protect against potential npe when extracting alias
  • Graph: protect against potential npe in isMainCalendar and isMainContactFolder methods
  • Graph: make urlcompnameToIdMap and folderIdCach thread safe
  • Graph: handle malformed Retry-After header
  • Graph: avoid potential npe in executeJsonRequest and executeGraphRequest methods
  • Graph: adjust previous patch, make sure JsonResponseHandler never returns null
  • Graph: improve error logging
  • Graph: replace 102, 103, 104 with MAPI constants defined in ExchangeSession
  • Graph: simplify GraphIterator, remove dead code
  • Graph: introduce constants for 261, 262 replied and forwarded icons
  • Graph: fix another edge case on search for shared tasks
  • Graph: fix regression on urlcompnameToIdMap, id is null on meeting response and ConcurrentHashMap cannot store null values
  • Graph: merge https://github.com/mguessan/davmail/pull/517 keep origin of appended messages (date, Received, threading, read flag)
  • Graph: add unit test for https://github.com/mguessan/davmail/pull/517 keep origin of appended messages (date, Received, threading, read flag)
  • Graph: fix DavMailAuthenticationException check in O365Token, fail when Mail.ReadWrite is missing instead of EWS.AccessAsUser.All present, see https://github.com/mguessan/davmail/issues/518
  • Graph: fix https://github.com/mguessan/davmail/issues/519, property return well known folder id for deleted items
  • Graph: fix https://github.com/mguessan/davmail/issues/518 skip empty condition to avoid invalid filter

EWS

  • EWS: apply isItemId refactoring to EWS
  • EWS: reimplement recursive search with deep folder traversal, based on user contribution, see https://sourceforge.net/p/davmail/patches/60/
  • EWS: apply missing event over EWS, abort to avoid creating an invalid duplicate event
  • EWS: port new individual occurrence meeting response to EWS, also drop the davmailtemp logic that is no longer working (create timezone event in normal calendar)
  • EWS: map uid in default contact attributes
  • EWS: do not try to erase uid on update
  • EWS: convert user provided timezone id to Exchange
  • EWS: do not try to force PARTSTAT when building attendees, use Exchange provided value
  • EWS: Exchange does not properly build attendees on exception occurrences, it does not provide organizer either, rebuild both, see https://github.com/mguessan/davmail/issues/493
  • EWS: make sure the organizer information is also retrieved on master event
  • EWS: set folder type based on folderClass, adjust contact creation status handling, return null on empty contact photo retrieval, do not try to retrieve photo from AD with empty email
  • EWS: prepare getResponseItemFieldValue method to simplify code
  • EWS: impersonate only when caldavImpersonate is set, see https://github.com/mguessan/davmail/issues/512
  • EWS: When sending a meeting response on a shared calendar, ensure we impersonate shared mailbox, see https://github.com/mguessan/davmail/issues/512
  • EWS: Exchange does not properly set organizer property on shared calendars and exception occurrences, fix for https://github.com/mguessan/davmail/issues/512
  • EWS: get rid of davmail.caldavImpersonate setting and improve meeting management logging
  • EWS: change approach on attendees, do not trust Exchange created attendees, rebuild from EWS item information
  • EWS: more logging on attendee status management

O365

  • O365: fix scope check in O365Token, avoid resetting token when scope is null, see https://sourceforge.net/p/davmail/bugs/751/
  • O365: remove main method from O365InteractiveAuthenticator now that we have the -token command line option to check embedded browser interaction
  • O365: UnknownException means network is down in O365 refresh token handling
  • O365: move multicondition logic back to ExchangeSession
  • O365: make the decrypt token error more explicit, it's often a mismatch in passwords between CalDAV/CardDAV/IMAP clients
  • O365: send DavMailException instead of generic IOException on token parsing error
  • O365: force reauthentication after switching from EWS to Graph

CalDAV

  • Caldav: review error handling, report 400 error codes to client instead of generic error
  • Caldav: remove duplicate replaceIcal4Principal method
  • Caldav: fix potential null pointer in VCalendar.isCurrentUser()
  • CalDAV: add missing Europe/Amsterdam timezone mapping
  • CalDAV: review and add additional missing timezone mappings
  • Caldav: implement DavMail side Caldav read-only mode with davmail.caldavReadonly=true, see https://github.com/mguessan/davmail/issues/146
  • Caldav: review phone numbers mapping to support otherHomePhone and otherBusinessTelephoneNumber
  • Caldav: Remove obsolete TestCaldav unit tests
  • Caldav: fix America/Bahia timezone mapping, see https://github.com/mguessan/davmail/issues/508
  • Caldav: additional timezone mapping fixes
  • CalDAV: properly detect and handle empty credentials
  • CalDAV: fix searchTasksOnly on main calendar, should lookup in tasks folder, see https://github.com/mguessan/davmail/issues/511
  • CalDav: fix https://github.com/mguessan/davmail/issues/511, warn if start date is after due date, ignore value for DTSTART
  • Caldav: exclude distribution lists for Thunderbird, not yet supported
  • Caldav: fix for https://github.com/mguessan/davmail/issues/513, missing VCalendar version property
  • Caldav: improve log message when client requests non itemId based item name

CardDAV

  • CardDAV: adjust test case for Graph
  • CardDAV: refactor TestExchangeSessionContact unit tests
  • Carddav: drop urlcompname (client provided item name) for contacts, prefer more reliable id, adjust personalNotes case

Build

  • Build: exclude OpenJFX based interactive authentication only, SWT is still available
  • Build: review debian javafx flag
  • Build: switch Sonar scan to JDK25 in AppVeyor build script
  • Build: fix javafx path in appveyor
  • Build: fix appveyor javafx path check
  • Build: adjust jacoco.xml path to match Sonar configuration
  • Build: set sonar.java.test.binaries
  • Build: remove woodstox StreamScanner exclusion from sonar configuration, we no longer provide a patched version of this class

Documentation

  • Doc: fix getting started link in README.md
  • Doc: add a SECURITY.md security policy
  • Doc: additional README enhancements
  • Doc: improve README with getting started and What's new sections
  • Doc: improve README, fix url and add reference to license
  • Doc: Remove remaining Mac OS X references
  • Doc: update download instructions and remove outdated links
  • Doc: update donation link
  • Doc: fix Download page
  • Doc: Review DavMail description in appdata.xml for clarity
  • Doc: Update debian package description
  • Doc: Update project description on POM

Enhancements

  • Remove IllegalArgumentException from URIUtil
  • Switch to curl user agent for version check, not blocked by Sourceforge
  • Implement davmail.logConnectionFilePath to send connection logs to a separate file
  • Refactor DavMailIdleConnectionEvictor to avoid CPU spike waking up from sleep/hibernate, use scheduleWithFixedDelay instead of fixedRate
  • Log backend and authentication modes on startup

Linux

  • Linux: improve security, create token file with private permissions

Test

  • Test: use a separate test.properties file to provide credentials for unit tests
  • Test: drop obsolete SSL socket factory
  • Test: Additional testcase
  • Test: DateUtilTest test cases
  • Test: cleanup unit tests
  • Test: fetch jacoco report
  • Test: adjust target path for jacoco.xml download
  • Test: cleanup old test case code
  • Test: prepare automatic switch to ExchangeEWS mode
  • Test: Add O365EWS contact tests
  • Test: Adjust CardDav unit tests
  • Test: Add EWS test to jacoco coverage report
  • Test: update contact test case
  • Test: additional IMAP test cases
  • Test: include TestImap in jacoco report
  • Test: Review calendar unit tests
  • Test: add TestExchangeSessionCalendar to jacoco report
  • Test: additional contact unit test on distribution list
  • Test: force default unit tests to use O365Graph mode
  • Test: Additional test case on searching shared tasks through calendar
  • Test: Adjust testGetDayOfWeek to latest format change in DateUtil
  • Test: review SMTP unit tests
6.8.130 Jun 2026

Bugfix release with a fix for a long-standing bug on contact sync over EWS. Implemented davmail.folderFetchPageSize in graph mode to change the default message fetch page size. Fixed an issue with kerberos authentication, KRB5CCNAME environment variable is mandatory with recent Linux distributions to force file-based kerberos cache, introduced a new -kerberos command line option to validate token access.

Graph

  • Graph: bring back paging size with davmail.folderFetchPageSize, see https://github.com/mguessan/davmail/issues/500

O365

  • O365: merge java part of https://github.com/mguessan/davmail/pull/494
  • O365: set resource parameter on token request only if OIDC is explicitly set to false

EWS

  • EWS: merge https://github.com/mguessan/davmail/pull/496 Preserve UTC timezone when creating events with Zulu DTSTART/DTEND
  • EWS: cleanup unused ownerResponseReply variable
  • EWS: completely drop Exchange 2007 workaround on organizer response type, see https://github.com/mguessan/davmail/issues/493
  • EWS: usersmimecertificate and msexchangecertificate are readonly, do not try to remove them from contact properties, see https://sourceforge.net/p/davmail/bugs/749/

Kerberos

  • Kerberos: warn on linux on missing KRB5CCNAME environment variable
  • Kerberos: introduce -kerberos command line option to check Kerberos configuration
  • Kerberos: revert to static client login module creation and set empty credentials when kerberos is enabled to force JAAS authentication
  • Kerberos: build client login module dynamically with principal

Linux

  • Linux: exclude hamcrest-core dependency from build
  • Linux: switch SWT : version 4.40 on linux platform independent package
  • Linux: remove unused jars from RPM package

Documentation

  • Doc: update macOS instructions
  • Doc: drop references to legacy webapp package
  • Doc: improve Kerberos setup instructions, describe KRB5CCNAME environment variable usage
  • Doc: Add links to Flatpak and Docker on home page
  • Doc: Update project home page description
  • Doc: typo updates

SWT

  • SWT: log loaded SWT version

CalDAV

  • Caldav: map missing Europe/Kyiv standard timezone
  • Caldav: drop old ActiveSync related workaround, see https://github.com/mguessan/davmail/issues/493

Enhancement

  • Add proper warning on unknown command line option
  • Cleanup from audit
6.8.012 Jun 2026

First version with active Graph support available in GUI, refactored configuration to separate mode (Graph, EWS, ...) from authentication. Includes a lot of user contributions to Graph backend, mostly on calendar events handling. Improved macOS Tahoe support and fixed regressions on tray icon and hide from dock settings. Reviewed documentation to match recent changes.

Graph

  • Graph: new workaround attempt for https://github.com/mguessan/davmail/issues/491 ErrorIrresolvableConflict, check if message exists and retry update
  • Graph: Translate missing messages for new modes/authentication
  • Graph: Missing messages for new modes/authentication
  • Graph: https://github.com/mguessan/davmail/issues/404 refactor mode handling to separate authentication from protocol. Introduce O365EWS, O365Graph and ExchangeEWS modes. Authentication set separately in davmail.authentication setting.
  • Graph: implement davmail.caldav.enableOnlineMeeting to automatically create a Teams meeting
  • Graph: detect invalid_grant error on live.com accounts and force scope to openid profile offline_access Mail.ReadWrite
  • Graph: enable OIDC by default with Graph enabled when retrieving token
  • Graph: implement X-MICROSOFT-DISALLOW-COUNTER/allowNewTimeProposals
  • Graph: move exdate/exception handling after create to handle event import with exceptions
  • Graph: more refactoring on event createOrUpdate to prepare exdate handling on create
  • Graph: refactor event createOrUpdate to prepare exdate handling on create
  • Graph: allow reminder updates for existing meetings
  • Graph: try to protect against unwanted meeting updates when not organizer
  • Graph: add missing xmozsnoozetime and xmozlastack to event attributes
  • Graph: refactor folderId to improve readability
  • Graph: do not check etag on meeting responses or dismiss
  • Graph: fix Thunderbird snooze / dismiss, properly map xmozlastack/xmozsnoozetime with GraphObject
  • Graph: handle multilevel conditions, add parentheses
  • Graph: dump full JSON error in debug mode
  • Graph: refactor folderId IPF_CONTACT to avoid duplicate strings
  • Graph: switch to mailFolders root for isExpired check
  • Graph: workaround for https://github.com/mguessan/davmail/issues/488, missing id on folder
  • Graph: override isExpired check with a simple call to /me
  • Graph: implement well-known folder id cache on personal mailbox
  • Graph: Thunderbird snooze / dismiss, only update fields, do not call dismissReminder as this removes alarm completely
  • Graph: handle tzone://Microsoft/Utc specifically, see https://github.com/mguessan/davmail/issues/469
  • Graph: format recurrenceId to Zulu when original start timezone is not available
  • Graph: drop originalEndTimeZone
  • Graph: switch to isOrganizer to detect invites
  • Graph: map originalEndTimeZone and originalEnd fields
  • Graph: improve getAttendeeStatus, iterate over all Vevents to detect meeting response
  • Graph: https://github.com/mguessan/davmail/pull/486 refactor timezone conversion, parse originalStart as ISO8601 string
  • Graph: occurrences are deleted with explicit calls, not the cancelledOccurrences property
  • Graph: https://github.com/mguessan/davmail/pull/481 do not try to convert original start with unknown timezone
  • Graph: fix https://github.com/mguessan/davmail/issues/469 unsupported timezone value from originalStartTimeZone
  • Graph: fix regression in convertOriginalStartDate, originalStart is supposed to be in UTC
  • Graph: catch when originalStart is not in UTC format in getRecurrenceId
  • Graph: handle until recurrence rule in yyyyMMdd format
  • Graph: https://github.com/mguessan/davmail/pull/481 ignore provided timezone when date is already Zulu
  • Graph: https://github.com/mguessan/davmail/pull/481 apply the buildUntilDate patch, recurrenceTimeZone is irrelevant
  • Graph: restore original start timezone on recurring events, adjust recurrence id based on originalStart being always in UTC, see https://github.com/mguessan/davmail/issues/469
  • Graph: fix https://github.com/mguessan/davmail/issues/474 Update src/etc/davmail.properties with Graph override settings
  • Graph: merge https://github.com/mguessan/davmail/pull/485 Only set transactionId on create, not update, to avoid ErrorInvalidRequest
  • Graph: fix https://github.com/mguessan/davmail/issues/471 Cannot create event, regression introduced by event message implementation
  • Graph: merge https://github.com/mguessan/davmail/pull/478 Fix/improve nanosecond date conversion handling
  • Graph: implement unit tests for GraphExchangeSession.convertDateFromExchange()
  • Graph: merge https://github.com/mguessan/davmail/pull/476 send outlook.timezone Prefer header alongside IdType
  • Graph: Merge https://github.com/mguessan/davmail/pull/477 Add support for numbered recurrence type in CalDAV downloads.
  • Graph: push missing processed extended field
  • Graph: extract getSubfolderPath method to handle shared mailbox case in getSubfolders

O365

  • O365: improve token request logging
  • O365: fix ExchangeSessionFactory.getAuthenticatorClass()
  • O365: merge https://github.com/mguessan/davmail/pull/441 Allow sending HTTP origin header for token requests
  • O365: improve token check, a valid graph token may contain EWS scope

EWS

  • EWS: implement additional recurrence patterns in EWS mode
  • EWS: refactor rrule handling in EwsExchangeSession
  • EWS: fix https://github.com/mguessan/davmail/issues/149 do not try to fix attendees if Exchange provided them already
  • EWS: comment davmail.caldavImpersonate setting

Caldav

  • Caldav: all missing timezone mappings
  • Caldav: more missing timezone mappings
  • Caldav: add timezone mapping for Central Standard Time and Asia/Singapore
  • Caldav: prepare improved Standard to Exchange timezone mapping
  • Caldav: append both timezone objects on mixed timezone events
  • Caldav: merge https://github.com/mguessan/davmail/pull/480 Teach fixVCalendar to convert TZIDs individually

SWT

  • SWT: cleanup sync from audit
  • SWT: set AppName to avoid default icon with embedded browser window under Wayland
  • SWT: catch missing image
  • SWT: replace synchronized block with ReentrantLock
  • SWT: fix thread synchronization
  • SWT: review synchronization code around SWT thread initialization

Documentation

  • Documentation: update DavMail settings documentation with new modes and authentication options
  • Doc: new modern architecture diagram
  • Doc: merge https://github.com/mguessan/davmail/pull/490 Add more tips for configuring PKCS11

GUI

  • GUI: disable URL field when mode is O365
  • Fix https://github.com/mguessan/davmail/issues/170 O365 Interactive/Manual does not allow context menu/paste
  • GUI: switch to 128x128 icons and enable tray icon auto-size
  • GUI: properly dispose window on close in AboutFrame

OSX

  • OSX: do not log missing SWT on OSX
  • OSX: remove empty Logs menu
  • OSX: alternative way to locate Info.plist file
  • OSX: replace exec with open -a --args to ensure proper application context under macOS Tahoe
  • OSX: Revert to script based version of universalJavaApplicationStub, upgrade to latest 3.3.0 version
  • OSX: Provide instructions for embedding JDK inside application bundle
  • OSX: More troubleshooting instructions
  • OSX: Update setup instructions
  • OSX: add NSAppleEventsUsageDescription recommended by universalJavaApplicationStub
  • OSX: upgrade universalJavaApplicationStub to latest compiled version

Linux

  • Linux: merge https://github.com/mguessan/davmail/issues/465 libswt-webkit-4-jni dependencies does not exist
  • Linux: fix regression on Suse builds, move if check inside old init / userdel section

Build

  • Appveyor: add jdk25 as target
  • Flatpak: Fix appdata file format

Enhancements

  • Log code location at startup
  • Cleanup from audit
  • Add missing messages
  • Append line feed at end of file
  • Fix https://github.com/mguessan/davmail/issues/438 Davmail does not exit when socket bind failed, introduce davmail.exitOnBindFailed setting
  • Merge https://github.com/mguessan/davmail/pull/464/ Fix some typos (found by codespell)
  • Update AbstractExchangeSessionTestCase, use test.properties for credentials
6.7.02 May 2026

Bugfix release based on user feedback, add PhoneAppOTP (TOTP) support for MFA authentication, more work on Graph backend, mostly on Caldav implementation.

Graph

  • Graph: raw implementation of getEventMessages and searchEventMessages
  • Graph: cleanup message headers parsing
  • Graph: implement davmail.folderSizeLimit on message folders
  • Graph: adjust isItemId for immutableId values
  • Graph: optimize folder requests by returning only id to build FolderIds
  • Graph: force ImmutableId as a workaround for ErrorIrresolvableConflict error
  • Graph: fix non draft message creation, by default not read
  • Graph: implement custom iCalUId value using transactionId, see https://github.com/mguessan/davmail/issues/462
  • Graph: switch back to id as main itemName on calendar events
  • Graph: review getEventIfExists and implement sendEvent (outbox)
  • Graph: exclude default calendar in getSubCalendarFolders
  • Graph: add isDefaultCalendar property to calendar folders, specific implementation for getSubCalendarFolders
  • Graph: declare isrecurring field, adjust getCalendarItemCondition based recurrence and date condition, ensure urlcompname is always converted
  • Graph: implement getFreeBusyData
  • Graph: fix regression in handleRRule
  • Graph: refactor importance/priority handling, first try at recurrence handling on tasks: does not work on microsoft side
  • Graph: implement graph version of getTaskStatusFromVTodo and getVTodoStatusFromTask
  • Graph: implement task (VTODO) update logic, create a cache of itemName to id
  • Graph: implement allday event
  • Graph: move attendees management to handle modified occurrences, refactor getEventIfExists to always fetch event by id, only way to retrieve exception occurrences
  • Graph: implement attendees update on meetings, detect mozilla dismiss to trigger dismissReminder
  • Graph: implement meeting response
  • Graph: refactored GraphIterator to handle null value array (even if this should never happen), see https://github.com/mguessan/davmail/issues/458
  • Graph: return default email in getCalendarEmail, return urlcompname as itemName if available
  • Graph: Make OIDC v2.0 endpoint the default in Graph mode
  • Graph: full recurrence pattern and range implementation, fix date conversion on calendar start/end
  • Graph: basic monthly reccurrence handling
  • Graph: refactor calendar event handling to manage modified occurrences updates
  • Graph: detect configuration change between EWS and Graph and clear incompatible stored token
  • Graph: implement throttling like wait on 503 Unknown error, see https://github.com/mguessan/davmail/issues/452
  • Graph: fix wrong event check on isReminderOn, typo on RECURRENCE-ID, duplicate entry in CONTACT_ATTRIBUTES, bug on isMatch
  • Graph: do not set size limit ($top) on galFind search request, incompatible with iterator

Documentation

  • Doc: update linux setup documentation, SWT mode is now compatible with O365Interactive
  • Doc: merge https://github.com/mguessan/davmail/pull/461
  • Update release guide

O365

  • O365: revert default redirectUri to https://login.microsoftonline.com/common/oauth2/nativeclient, live.com authentication expects this default value, users can still override with localhost in manual authentication mode
  • O365: fix error handling in O365Token
  • O365: cleanup authentication mode logic in O365Authenticator
  • O365: merge contribution from https://github.com/mguessan/davmail/pull/445
  • O365: handle new https://localhost/common/oauth2/nativeclient default redirect with OpenJFX embedded browser, fix Connection refused by server error

Caldav

  • Caldav: detect and ignore Thunderbird fake put request
  • Caldav: XML encode displayname on subfolders, only warn on missing items
  • Caldav: apply tzid fix also on VTODO

EWS

  • EWS: move taskTovTodoStatusMap and vTodoToTaskStatusMap back to EwsExchangeSession
  • EWS: fix exists condition check

Linux

  • Linux: adjust launch script to allow overriding CLASSPATH
  • Linux: make davmail azul download the right jre based on current architecture
  • Linux: add libswt-webkit-4-jni to dependencies on debian package
  • Linux: fixes from audit, BuildRequires java version on Suse, use 755 access rights for binaries, do not use userdel/groupdel on sysusers distributions

Windows

  • Winrun4J: fix Xmx parameter typo

Enhancements

  • i18n: fix regression on message files encoding
  • Build: fix typos in ant build file
  • Improve StringEncryptor implementation to return specific message on invalid password event, add additional use cases

Docker

  • Docker: try to fix regression on github action build, clean apt only on runner
  • Docker: clean apt cache