exchangelib
Client for Microsoft Exchange Web Services (EWS)
Decision gist · record as of 2026-08-14
Yes, if you need to programmatically interact with Exchange or Office365 mailboxes. The library is actively maintained, has no known vulnerabilities, low install friction, and a permissive license. The Python 3.10+ requirement and dependency on network connectivity to an Exchange server are the only real constraints; verify autodiscover and authentication methods match your deployment before committing.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Requires Python 3.10 or later; Exchange server connectivity and valid credentials required.
- Low install friction with a pure Python wheel distribution.
- The package is actively maintained with a recent release and 1268 repository stars, indicating stable community adoption.
License · maintenance · safety
BSD-2-Clause (permissive) — BSD-2-Clause is a permissive license that allows commercial and private use with minimal restrictions, making this package suitable for most projects.
last release 2025-10-10 (308 days) · last repo commit 2026-06-23 · 1,268 stars
0 known vulnerabilities (OSV.dev, 2026-08-14) · 2,049,110 downloads/mo, #3,340 on PyPI
Alternatives
Verify before relying
from exchangelib import Credentials, Account
credentials = Credentials("user@example.com", "password")
account = Account("user@example.com", credentials=credentials, autodiscover=True)
for item in account.inbox.all()[:10]:
print(item.subject, item.sender)- Whether autodiscover works reliably across all Exchange versions (2007-2016) and Office365 tenants.
- Performance characteristics when handling large mailboxes or complex queries.
- Specific authentication methods supported beyond basic credentials and OAuth.
What it is and what it does
exchangelib is a Django-style ORM wrapper around Microsoft Exchange Web Services (EWS), designed to simplify programmatic access to on-premise Exchange 2007-2016 servers and Office365. It abstracts the complexity of the EWS protocol, offering a Pythonic interface for common mailbox operations: searching, creating, updating, and deleting items across mail, calendar, tasks, contacts, and distribution lists. The library includes built-in autodiscover support to locate the correct EWS endpoint automatically.
The package depends on 12 runtime libraries including requests for HTTP communication, defusedxml for secure XML parsing, OAuth support via oauthlib and requests_oauthlib, NTLM authentication via requests_ntlm, and timezone handling through tzdata and tzlocal. It requires Python 3.10 or later and is distributed as a pure Python wheel, making installation straightforward across platforms.
Use it for
- Automate mailbox management tasks like archiving, filtering, or bulk-moving emails based on custom criteria.
- Sync Exchange calendar events to external systems or build calendar-aware applications.
- Extract contact information and distribution lists for directory synchronization or reporting.
- Build monitoring or audit tools that query mailbox metadata and message properties.
- Integrate Office365 mailbox data into data pipelines or ETL workflows.
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes, if you need to programmatically interact with Exchange or Office365 mailboxes.
The library is actively maintained, has no known vulnerabilities, low install friction, and a permissive license. The Python 3.10+ requirement and dependency on network connectivity to an Exchange server are the only real constraints; verify autodiscover and authentication methods match your deployment before committing.
Install
exchangelib on PyPI
Before you install
Low install friction with a pure Python wheel distribution. The package is actively maintained with a recent release and 1268 repository stars, indicating stable community adoption.
Requires Python 3.10 or later; Exchange server connectivity and valid credentials required.
License in practice
BSD-2-Clause is a permissive license that allows commercial and private use with minimal restrictions, making this package suitable for most projects.
Quickstart
from exchangelib import Credentials, Account
credentials = Credentials("user@example.com", "password")
account = Account("user@example.com", credentials=credentials, autodiscover=True)
for item in account.inbox.all()[:10]:
print(item.subject, item.sender)
Verify before relying
- Whether autodiscover works reliably across all Exchange versions (2007-2016) and Office365 tenants.
- Performance characteristics when handling large mailboxes or complex queries.
- Specific authentication methods supported beyond basic credentials and OAuth.
Package facts
| License | BSD-2-Clause permissive |
| Python support | Supports the current Python release >=3.10 |
| Install friction | Low. Pure-Python wheel |
| Runtime dependencies | 12 packagescached_propertydefusedxmldnspythonisodatelxmloauthlibpygmentsrequestsrequests_ntlmrequests_oauthlibtzdatatzlocal |
| Maintenance | Actively maintained 308 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 2,049,110 / month, #3,340 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
| Classifiers | Development Status :: 5 - Production/StableProgramming Language :: Python :: 3Topic :: Communications |
Evidence: exchangelib-5.6.0-py3-none-any.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “exchange web services client”
- exchangelibexchangelib is an ORM-style client library for Microsoft Exchange Web…
- aioopenexchangeratesAsync client library for fetching currency exchange rates from the…
- azure-communication-identityCreates and manages user identities and access tokens for Azure…
Give your agent the search over MCP, or paste the wish link into any chat.
More Communications packages
Pyasn1 encodes and decodes ASN.1 data structures using BER, CER, DER, and native Python codecs, allowing you to serialize complex data for network protocols and file formats.
Install it if you need to work with ASN.1-based protocols or formats; it is the standard library for this in Python and has no known vulnerabilities.
Provides a collection of ASN.1 data structures expressed as Python classes, built on the pyasn1 library, for working with ASN.1-based protocols and standards.
Kombu is a messaging library that provides a high-level Python interface to AMQP and other message brokers, supporting pluggable transports for RabbitMQ, Redis, MongoDB, Amazon SQS, and others.
Install it if you are building any distributed system that requires reliable message passing.
Formats and parses numbers, file sizes, timespans, and other values into human-readable text; provides terminal interaction utilities including ANSI text styling and user prompts.
Adds colored output to Python's standard logging module using ANSI escape sequences, with automatic fallback support for Windows terminals.
However, it is abandoned and receives no maintenance, so it will not adapt to future Python changes or platform updates.
Parse, validate, format, and analyze international phone numbers across all countries, with support for extracting geographic, carrier, and timezone information from phone number data.
See also office365 · o365 · nylas · microsoftgraph-python · exchange_calendars · SharePlum · imap-tools · IMAPClient · pandas_market_calendars · langchain-google-calendar-tools