Skip to main content

A Python package to interact with both on-premises and Office 365 Exchange Web Services

Project description

py-ews

Documentation Status

.______   ____    ____       ___________    __    ____   _______.
|   _  \  \   \  /   /      |   ____\   \  /  \  /   /  /       |
|  |_)  |  \   \/   / ______|  |__   \   \/    \/   /  |   (----`
|   ___/    \_    _/ |______|   __|   \            /    \   \    
|  |          |  |          |  |____   \    /\    / .----)   |   
| _|          |__|          |_______|   \__/  \__/  |_______/    

A Python package to interact with Exchange Web Services

py-ews is a cross platform python package to interact with both Exchange 2010 to 2019 on-premises and Exchange Online (Office 365). This package will wrap all Exchange Web Service endpoints, but currently is focused on providing eDiscovery endpoints.

py-ews has the following notable features in it's current release:

  • Autodiscover support
  • Delegation support
  • Impersonation support
  • Retrieve all mailboxes that can be searched based on credentials provided
  • Search a list of (or single) mailboxes in your Exchange environment using all supported search attributes
  • Delete email items from mailboxes in your Exchange environment
  • Retrieve mailbox inbox rules for a specific account
  • Find additional hidden inbox rules for a specified account

Currently this package supports the following ServiceEndpoints:

  • Autodiscover
  • DeleteItem
  • GetInboxRules
  • FindItems (Retrieving hidden inbox rules)
  • GetSearchableMailboxes
  • ResolveNames
  • SearchMailboxes

Installation

OS X & Linux:

pip install py-ews

Windows:

pip install py-ews

Usage example

The first step in using py-ews is that you need to create a UserConfiguration object. Think of this as all the connection information for Exchange Web Services. An example of creating a UserConfiguration object using Office 365 Autodiscover is:

from pyews import UserConfiguration

userconfig = UserConfiguration(
      'myaccount@company.com',
      'Password1234'
)

If you would like to use an alternative Autodiscover endpoint (or any alternative endpoint) then please provide one using the endpoint named parameter:

from pyews import UserConfiguration

userconfig = UserConfiguration(
   'myaccount@company.com',
   'Password1234',
   endpoint='https://outlook.office365.com/autodiscover/autodiscover.svc'
)

For more information about creating a UserConfiguration object, please see the full documentation on our ReadTheDocs page.

Now that you have a UserConfiguration object, we can now use a ServiceEndpoint. This example will demonstrate how you can identify which mailboxes you have access to by using the GetSearchableMailboxes EWS endpoint.

Once you have identified a list of mailbox reference ids, then you can begin searching all of those mailboxes by using the SearchMailboxes EWS endpoint.

The returned results will then be deleted (moved to Deleted Items folder) from Exchange using the DeleteItem EWS endpoint.

from pyews import UserConfiguration

userconfig = UserConfiguration(
      'myaccount@company.com',
      'Password1234'
)

# get searchable mailboxes based on your accounts permissions
referenceid_list = []
for mailbox in GetSearchableMailboxes(userconfig).response:
      referenceid_list.append(mailbox['ReferenceId'])

# let's search all the referenceid_list items
messages_found = []
for search in SearchMailboxes('subject:account', userconfig, referenceid_list).response:
      messages_found.append(search['MessageId'])
      # we can print the results first if we want
      print(search['Subject'])
      print(search['MessageId'])
      print(search['Sender'])
      print(search['ToRecipients'])
      print(search['CreatedTime'])
      print(search['ReceivedTime'])
      #etc.

# if we wanted to now delete a specific message then we would call the DeleteItem 
# class like this but we can also pass in the entire messages_found list
deleted_message_response = DeleteItem(messages_found[2], userconfig).response

print(deleted_message_response)

The following is an example of the output returned when calling the above code:

YOUR ACCOUNT IS ABOUT TO EXPIRE! UPGRADE NOW!!!
AAMkAGZjOTlkOWExLTM2MDEtNGI3MS0..............
Josh Rickard
Research
2019-02-28T18:28:36Z
2019-02-28T18:28:36Z
Upgrade Your Account!
AAMkADAyNTZhNmMyLWNmZTctNDIyZC0..............
Josh Rickard
Josh Rickard 
2019-01-24T18:41:11Z
2019-01-24T18:41:11Z
New or modified user account information
AAMkAGZjOTlkOWExLTM2MDEtNGI3MS04.............. 
Microsoft Online Services Team
Research
2019-01-24T18:38:06Z
2019-01-24T18:38:06Z
[{'MessageText': 'Succesfull'}]

For more examples and usage, please refer to the [Wiki][wiki].

Development setup

I have provided a Dockerfile with all the dependencies and it is currently calling bin\pyews_test.py. If you want to test new features, I recommend that you use this Dockerfile instead of a virtualenv. You can call the following to build a new container, but keep the dependencies unless they have changed in your requirements.txt or any other changes to the Dockerfile.

docker build --force-rm -t pyews .

To run the container, use the following:

docker run pyews

Release History

  • 1.1.0
    • Fixed bug with inbox rules
    • Added feature to find hidden inbox rules
  • 1.0.1
    • Updating Documentation with new reference links
  • 1.0.0
    • Initial release of py-ews to PyPi

Meta

Josh Rickard – @MSAdministratorrickardja@live.com

Distributed under the MIT license. See LICENSE for more information.

Contributing

  1. Fork it (https://github.com/swimlane/pyews/fork)
  2. Create your feature branch (git checkout -b feature/fooBar)
  3. Commit your changes (git commit -am 'Add some fooBar')
  4. Push to the branch (git push origin feature/fooBar)
  5. Create a new Pull Request

Project details


Download files

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

Source Distribution

py-ews-1.1.0.tar.gz (19.3 kB view details)

Uploaded Source

Built Distributions

py_ews-1.1.0-py3-none-any.whl (29.4 kB view details)

Uploaded Python 3

py_ews-1.1.0-py2-none-any.whl (29.4 kB view details)

Uploaded Python 2

File details

Details for the file py-ews-1.1.0.tar.gz.

File metadata

  • Download URL: py-ews-1.1.0.tar.gz
  • Upload date:
  • Size: 19.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.0 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6

File hashes

Hashes for py-ews-1.1.0.tar.gz
Algorithm Hash digest
SHA256 46edbc640038267cd594b5b057757bd2f601b1aab2dc971d75e595656ef59654
MD5 f0638447755b74bb2ee381096a9ffdb9
BLAKE2b-256 a6eba3d6b2d9071445e6cf034a13d0252e1285a22cf2302db4ef3e90899ad35d

See more details on using hashes here.

File details

Details for the file py_ews-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: py_ews-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 29.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.0 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6

File hashes

Hashes for py_ews-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 52e79675eb81feaec1f1b3675f1c683043a45d843797d7fbc9e454180c18214c
MD5 0a28251ec5353ec18dbdae4fdce4693b
BLAKE2b-256 8a3ffbe6c21929b844b30d8c94793a2399f128625a5384e84dafb3c828b81070

See more details on using hashes here.

File details

Details for the file py_ews-1.1.0-py2-none-any.whl.

File metadata

  • Download URL: py_ews-1.1.0-py2-none-any.whl
  • Upload date:
  • Size: 29.4 kB
  • Tags: Python 2
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.0 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6

File hashes

Hashes for py_ews-1.1.0-py2-none-any.whl
Algorithm Hash digest
SHA256 79742bd93876acdbe5be0f7e838cf86eb5a312f558b278265d51fa3a5056fd40
MD5 b4774edb1b481572f9fb8ab6c117e5e6
BLAKE2b-256 825f12f922041a88a33f131d59e37092c5a9a58107d1877ad2e1494818eef0e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page