Client for Microsoft Exchange Web Services (EWS)
Project description
This module provides an well-performing, well-behaving, platform-independent and simple interface for communicating with a Microsoft Exchange 2007-2016 Server or Office365 using Exchange Web Services (EWS). It currently implements autodiscover, and functions for searching, creating, updating and deleting calendar, mailbox, task and contact items.
Usage
Here is a simple example that inserts, retrieves and deletes calendar items in an Exchange calendar:
from exchangelib import DELEGATE, IMPERSONATION, Account, Credentials, \
EWSDateTime, EWSTimeZone, Configuration, NTLM, CalendarItem, Q
from exchangelib.folders import Calendar
year, month, day = 2016, 3, 20
tz = EWSTimeZone.timezone('Europe/Copenhagen')
# Build a list of calendar items
calendar_items = []
for hour in range(7, 17):
calendar_items.append(CalendarItem(
start=tz.localize(EWSDateTime(year, month, day, hour, 30)),
end=tz.localize(EWSDateTime(year, month, day, hour + 1, 15)),
subject='Test item',
body='Hello from Python',
location='devnull',
categories=['foo', 'bar'],
))
# Username in WINDOMAIN\username format. Office365 wants usernames in PrimarySMTPAddress
# ('myusername@example.com') format. UPN format is also supported.
#
# By default, fault-tolerant error handling is used. This means that calls may block for a long time
# if the server is unavailable. If you need immediate failures, add 'is_service_account=False' to
# Credentials.
credentials = Credentials(username='MYWINDOMAIN\\myusername', password='topsecret')
# If your credentials have been given impersonation access to the target account, use
# access_type=IMPERSONATION
account = Account(primary_smtp_address='john@example.com', credentials=credentials,
autodiscover=True, access_type=DELEGATE)
# If the server doesn't support autodiscover, use a Configuration object to set the
# server location:
# config = Configuration(
# server='mail.example.com',
# credentials=Credentials(username='MYWINDOMAIN\\myusername', password='topsecret'),
# auth_type=NTLM
# )
# account = Account(primary_smtp_address='john@example.com', config=config,
# access_type=DELEGATE)
# Create the calendar items in the user's standard calendar. If you want to access a
# non-standard calendar, choose a different one from account.folders[Calendar]
#
# bulk_update() and bulk_delete() methods are also supported.
res = account.calendar.bulk_create(calendar_items)
print(res)
# Get the calendar items we just created. We filter by categories so we only get the items created by
# us. The syntax for filter() is modeled after Django QuerySet filters.
#
# If you need more complex filtering, filter() also accepts a Python-like search expression:
#
# items = my_folder.filter(
# "start < '2016-01-02T03:04:05T' and end > '2016-01-01T03:04:05T' and categories in ('foo', 'bar')"
# )
#
# filter() also support Q objects that are modeled after Django Q objects.
#
# q = (Q(subject__iexact='foo') | Q(subject__contains='bar')) & ~Q(subject__startswith='baz')
# items = my_folder.filter(q)
#
# A large part of the Django QuerySet API is supported. The QuerySet doesn't fetch anything before the QuerySet is
# iterated. The QuerySet returns an iterator, and results are cached when the QuerySet is iterated the first time.
# Examples:
#
# all_items = my_folder.all()
# all_items_without_caching = my_folder.all().iterator()
# filtered_items = my_folder.filter(subject__contains='foo').exclude(categories__contains='bar')
# sparse_items = my_folder.all().only('subject', 'start')
# status_report = my_folder.all().delete()
# items_for_2017 = my_calendar.filter(start__range=(EWSDateTime(2016, 1, 1), EWSDateTime(2017, 1, 1)))
# item = my_folder.get(subject='unique_string')
# ordered_items = my_folder.all().order_by('subject')
# n = my_folder.all().count()
# folder_is_empty = not my_folder.all().exists()
# ids_as_dict = my_folder.all().values('item_id', 'changekey')
# ids_as_list = my_folder.all().values_list('item_id', 'changekey')
# all_subjects = my_folder.all().values_list('subject', flat=True)
#
items = account.calendar.filter(
start__lt=tz.localize(EWSDateTime(year, month, day + 1)),
end__gt=tz.localize(EWSDateTime(year, month, day)),
categories__contains=['foo', 'bar'],
)
for item in items:
print(item.start, item.end, item.subject, item.body, item.location)
# Delete the calendar items we found
res = items.delete()
print(res)
# You can also create, update and delete single items
item = CalendarItem(folder=account.calendar, subject='foo')
item.save()
item.subject = 'bar'
item.save()
item.delete()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
exchangelib-1.7.1.tar.gz
(66.8 kB
view details)
File details
Details for the file exchangelib-1.7.1.tar.gz
.
File metadata
- Download URL: exchangelib-1.7.1.tar.gz
- Upload date:
- Size: 66.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 20fb38c42bdcd06beb4659c129b9e2f07320cd8c27b4a7b2999016a826806754 |
|
MD5 | 4270ab5d8d86e4b059c209dba721495f |
|
BLAKE2b-256 | 0e51e1a94f58f977a874609e160d67fe890caae7e7d5f97a2d012b8fa79b5ecb |