Python client for Microsoft Exchange Web Services (EWS)
Python
1,274
2,278 commits
updated Jun 23, 2026
This module is an ORM for your Exchange mailbox, providing Django-style access to all your data. It is a platform-independent, well-performing, well-behaving, well-documented, well-tested and simple interface for communicating with an on-premise Microsoft Exchange 2007-2016 server or Office365 using Exchange Web Services (EWS). Among other things, it implements autodiscover, and functions for searching, creating, updating, deleting, exporting and uploading calendar, mailbox, task, contact and distribution list items.
Here's a short example of how exchangelib works. Let's print the first
100 inbox messages in reverse order:
from exchangelib import Credentials, Account
credentials = Credentials("john@example.com", "topsecret")
account = Account("john@example.com", credentials=credentials, autodiscover=True)
for item in account.inbox.all().order_by("-datetime_received")[:100]:
print(item.subject, item.sender, item.datetime_received)
Documentation is available at https://ecederstrand.github.io/exchangelib/. Source code documentation is available at https://ecederstrand.github.io/exchangelib/exchangelib/.
Overall
Maintained
Code review
PyPI
Latest release
Releases this year
198 followers · starred Sep 2021
311 followers · starred Jul 2018
35 followers · starred Jan 2023
13 followers · starred Jan 2018
Python client for Microsoft Exchange Web Services (EWS)
Python
1,274
2,278 commits
updated Jun 23, 2026
This module is an ORM for your Exchange mailbox, providing Django-style access to all your data. It is a platform-independent, well-performing, well-behaving, well-documented, well-tested and simple interface for communicating with an on-premise Microsoft Exchange 2007-2016 server or Office365 using Exchange Web Services (EWS). Among other things, it implements autodiscover, and functions for searching, creating, updating, deleting, exporting and uploading calendar, mailbox, task, contact and distribution list items.
Here's a short example of how exchangelib works. Let's print the first
100 inbox messages in reverse order:
from exchangelib import Credentials, Account
credentials = Credentials("john@example.com", "topsecret")
account = Account("john@example.com", credentials=credentials, autodiscover=True)
for item in account.inbox.all().order_by("-datetime_received")[:100]:
print(item.subject, item.sender, item.datetime_received)
Documentation is available at https://ecederstrand.github.io/exchangelib/. Source code documentation is available at https://ecederstrand.github.io/exchangelib/exchangelib/.
Overall
Maintained
Code review
PyPI
Latest release
Releases this year
198 followers · starred Sep 2021
311 followers · starred Jul 2018
35 followers · starred Jan 2023
13 followers · starred Jan 2018