Skip to main content

A simple library to talk to Microsoft Exchange

Project description


PyExchange is a library for Microsoft Exchange.

It's incomplete at the moment - it only handles calendar events. We've open sourced it because we found it useful and hope others will, too.

If you're interested, please see the CONTRIBUTING notes in the repo for hints on where to get started.


Go to for the most recent, up-to-date version of documentation.


PyExchange supports Python 2.6 and 2.7. Our code is compatible with 3.3+, but see the notes below on getting it working. Non CPython implementations may work but are not tested.

We support Exchange Server version 2010. Others will likely work but are not tested.

To install, use pip:

pip install pyexchange

PyExchange requires [lxml]( for XML handling. This will be installed by pip on most systems. If you run into problems, please see lxml's [installation instructions](

To install from source, download the source code, then run:

python install

Python 3

We use the library [python-ntlm]( for authentication. As of July 2013, they have an experimental Python 3 port but it's not in PyPI for easy download.

To the best of our knowledge, PyExchange works with this port and is Python 3.3 compatible. But since this isn't easily testable, we can't officially support Python 3 at the moment.

Help in this area would be appreciated.


Once upon a time there was a beautiful princess, who wanted to connect her web application to the royal Microsoft Exchange server.

The princess first tried all manner of SOAP libraries, but found them broken, or slow, or not unicode compliant, or plain just didn't work with Exchange.

"This totally bites," said the princess. "I need like four commands and I don't want to make my own SOAP library."

She then discovered Microsoft had excellent documentation on its Exchange services with full XML samples.

"Bitchin," said the princess, who had watched too many 80s movies recently. "I'll just write XML instead."

So she did, and it worked, and there was much feasting and celebration, followed by a royal battle with accounting over what constituted reasonable mead expenses.

And everybody lived happily ever after.



0.1 (June 24, 2013)

Team release - shakin' the bugs out.

0.2 (July 1, 2013)

Internal company release - RELEASE THE KRAKEN.

0.3 (July 17, 2013)

Initial public release.

0.3.1 (April 18, 2014)

Integrating some more granular exception handling.

0.4 (June 2, 2014)

We had some great contributions, so this is a release for that.

Alejandro Ramirez (got-root):

- Added functionality to create/delete/get/find/move folders of all types. (Creating a new CalendarFolder is creating a new calendar in exchange)
- Added ability to create events in specific folders.
- Added ability to move events between calendars (folders).
- Created tests for all new features.

Ben Le (kantas92)

* Fixed unicode vs bytecode encoding madness when sending unicode.

0.4.1 (June 15, 2014)

Turns out I actually didn't release Ben Le's code when I thought I did. Bad release engineer, no biscuit.

Project details

Release history Release notifications

History Node


History Node


History Node


History Node


This version
History Node


History Node


History Node


History Node


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
pyexchange-0.4.1.tar.gz (41.1 kB) Copy SHA256 hash SHA256 Source None Jun 16, 2014

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page