All Versions
Latest Version
Avg Release Cycle
36 days
Latest Release

Changelog History
Page 3

  • v3.3.1 Changes

    October 21, 2020
    • Allow overriding dns.resolver.Resolver class attributes via Autodiscovery.DNS_RESOLVER_ATTRS.
  • v3.3.0 Changes

    October 16, 2020
    • Switch EWSTimeZone to be implemented on top of the new zoneinfo module in Python 3.9 instead of pytz. backports.zoneinfo is used for earlier versions of Python. This means that the ÈWSTimeZone methods timezone(), normalize() and localize() methods are now deprecated.
    • πŸ‘ Add EWSTimeZone.from_dateutil() to support converting timezones to EWSTimeZone.
    • πŸ‘ Dropped support for Python 3.5 which is EOL per September 2020.
    • Added support for CalendaItem.appointment_state, CalendaItem.conflicting_meetings and CalendarItem.adjacent_meetings fields.
    • Added support for the Message.reminder_message_data field.
    • Added support for Contact.manager_mailbox, Contact.direct_reports and Contact.complete_name fields.
    • πŸ‘ Added support for Item.response_objects field.
    • Changed Task.due_date and Tas.start_date fields from datetime to date fields, since the time was being truncated anyway by the server.
    • πŸ‘ Added support for Task.recurrence field.
    • Added read-only support for Contact.user_smime_certificate and Contact.ms_exchange_certificate. This means that all fields on all item types are now supported.
  • v3.2.1 Changes

    August 03, 2020
    • πŸ‘» Fix bug leading to an exception in CalendarItem.cancel().
    • Improve stability of .order_by() in edge cases where sorting must be done client-side.
    • Allow increasing the session pool-size dynamically.
    • Change semantics of .filter(foo__in=[]) to return an empty result. This was previously undefined behavior. Now we adopt the behaviour of Django in this case. This is still undefined behavior for list-type fields.
    • πŸ“š Moved documentation to GitHub Pages and auto-documentation generated by pdoc3.
  • v3.2.0 Changes

    May 11, 2020
    • 🚚 Remove use of ThreadPool objects. Threads were used to implement async HTTP requests, but were creating massive memory leaks. Async requests should be reimplemented using a real async HTTP request package, so this is just an emergency fix. This also lowers the default Protocol.SESSION_POOLSIZE to 1 because no internal code is running multi-threaded anymore.
    • All-day calendar items (created as CalendarItem(is_all_day=True, ...)) now accept EWSDate instances for the start and end values. Similarly, all-day calendar items fetched from the server now return start and end values as EWSDate instances. In this case, start and end values are inclusive; a one-day event starts and ends on the same EWSDate value.
    • πŸ‘ Add support for RecurringMasterItemId and OccurrenceItemId elements that allow to request the master recurrence from a CalendarItem occurrence, and to request a specific occurrence from a CalendarItem master recurrence. CalendarItem.master_recurrence() and CalendarItem.occurrence(some_occurrence_index) methods were added to aid this traversal. some_occurrence_index in the last method specifies which item in the list of occurrences to target; CalendarItem.occurrence(3) gets the third occurrence in the recurrence.
    • Change Contact.birthday and Contact.wedding_anniversary from EWSDateTime to EWSDate fields. EWS still expects and sends datetime values but has started to reset the time part to 11:59. Dates are a better match for these two fields anyway.
    • 🚚 Remove support for len(some_queryset). It had the nasty side-effect of forcing list(some_queryset) to run the query twice, once for pre-allocating the list via the result of len(some_queryset), and then once more to fetch the results. All occurrences of len(some_queryset) can be replaced with some_queryset.count(). Unfortunately, there is no way to keep backwards-compatibility for this feature.
    • Added Account.identity, an attribute to contain extra information for impersonation. Setting Account.identity.upn or Account.identity.sid removes the need for an AD lookup on every request. upn will often be the same as primary_smtp_address, but it is not guaranteed. If you have access to your organization's AD servers, you can look up these values once and add them to your Account object to improve performance of the following requests.
    • πŸ‘ Added support for CBA authentication
  • v3.1.1 Changes

    January 23, 2020
    • The max_wait argument to FaultTolerance changed semantics. Previously, it triggered when the delay until the next attempt would exceed this value. It now triggers after the given timespan since the first request attempt.
    • πŸ›  Fixed a bug when pagination is combined with max_items (#710)
    • πŸ›  Other minor bug fixes
  • v3.1.0 Changes

    January 17, 2020
    • 🚚 Removed the legacy autodiscover implementation.
    • πŸ”§ Added QuerySet.depth() to configure item traversal of querysets. Default is Shallow except for the CommonViews folder where default is Associated.
    • ⚑️ Updating credentials on Account.protocol after getting an UnauthorizedError now works.
  • v3.0.0 Changes

    January 17, 2020
    • 0️⃣ The new Autodiscover implementation added in 2.2.0 is now default. To switch back to the old implementation, set the environment variable EXCHANGELIB_AUTODISCOVER_VERSION=legacy.
    • 🚚 Removed support for Python 2
  • v2.2.0 Changes

    January 17, 2020
    • πŸ‘ Added support for specifying a separate retry policy for the autodiscover service endpoint selection. Set via the exchangelib.autodiscover.legacy.INITIAL_RETRY_POLICY module variable for the the old autodiscover implementation, and via the exchangelib.autodiscover.Autodiscovery.INITIAL_RETRY_POLICY class variable for the new one.
    • πŸ‘€ Support the authorization code OAuth 2.0 grant type (see issue #698)
    • 🚚 Removed the RootOfHierarchy.permission_set field. It was causing too many failures in the wild.
    • The full autodiscover response containing all contents of the reponse is now available as Account.ad_response.
    • Added a new Autodiscover implementation that is closer to the specification and easier to debug. To switch to the new implementation, set the environment variable EXCHANGELIB_AUTODISCOVER_VERSION=new. The old one is still the default if the variable is not set, or set to EXCHANGELIB_AUTODISCOVER_VERSION=legacy.
    • The Item.mime_content field was switched back from a string type to a bytes type. It turns out trying to decode the data was an error (see issue #709).
  • v2.1.1 Changes

    December 05, 2019
    • πŸ›  Bugfix release.
  • v2.1.0 Changes

    November 07, 2019
    • πŸ‘ Added support for OAuth 2.0 authentication
    • πŸ›  Fixed a bug in RelativeMonthlyPattern and RelativeYearlyPattern where the weekdays field was thought to be a list, but is in fact a single value. Renamed the field to weekday to reflect the change.
    • πŸ‘ Added support for archiving items to the archive mailbox, if the account has one.
    • πŸ‘ Added support for getting delegate information on an Account, as Account.delegates.
    • πŸ‘ Added support for the ConvertId service. Available as Protocol.convert_ids().