Exchange Web Services client library v4.0.0 Release Notes

    • ๐Ÿ”ง Add a new max_connections option for the Configuration class, to increase the session pool size on a per-server, per-credentials basis. Useful when exchangelib is used with threads, where one may wish to increase the number of concurrent connections to the server.
    • Add Message.mark_as_junk() and complementary QuerySet.mark_as_junk() methods to mark or un-mark messages as junk email, and optionally move them to the junk folder.
    • ๐Ÿ”ง Add support for Master Category Lists, also known as User Configurations. These are custom values that can be assigned to folders. Available via Folder.get_user_configuration().
    • ๐Ÿ‘ Persona objects as returned by QuerySet.people() now support almost all documented fields.
    • Improved QuerySet.people() to call the GetPersona service if at least one field is requested that is not supported by the FindPeople service.
    • ๐Ÿšš Removed the internal caching in QuerySet. It's not necessary in most use cases for exchangelib, and the memory overhead and complexity is not worth the extra effort. This means that .iterator() is now a no-op and marked as deprecated. ATTENTION: If you previously relied on caching of results in QuerySet, you need to do you own caching now.
    • Allow plain date, datetime and zoneinfo.ZoneInfo objects as values for fields and methods. This lowers the barrier for using the library. We still use EWSDate, EWSDateTime and EWSTimeZone for all values returned from the server, but these classes are subclasses of date, datetime and zoneinfo.ZoneInfo objects and instances will behave just like instance of their parent class.