from exchangelib import Credentials, Account, Configuration, DELEGATE, EWSDateTime, EWSTimeZone
from exchangelib.protocol import BaseProtocol, NoVerifyHTTPAdapter
from datetime import datetime, timedelta
BaseProtocol.HTTP_ADAPTER_CLS = NoVerifyHTTPAdapter
credentials = Credentials(username="name@company.ru", password="pas$")
config = Configuration(server="mail.company.ru", credentials=credentials, auth_type='NTLM')
account = Account('name@company.ru', config=config, autodiscover=False, access_type=DELEGATE)
tz = account.default_timezone
# Определяем границы "сегодня"
now = datetime.now()
start = EWSDateTime(now.year, now.month, now.day, 0, 0, 0, tzinfo=tz)
end = start + timedelta(days=1)
print(f"Встречи за {start.date()}:\n")
# Фильтруем календарь по диапазону времени
items = account.calendar.filter(start__lt=end, end__gt=start).order_by('start')
for item in items:
print(f"📅 {item.subject}")
print(f"🕒 {item.start.astimezone(tz)} — {item.end.astimezone(tz)}")
print(f"📍 Место: {item.location or '—'}")
print("👥 Участники:")
for attendee in (item.required_attendees or []):
print(f" - {attendee.mailbox.name} <{attendee.mailbox.email_address}>")
if item.optional_attendees:
print(" (необязательные):")
for attendee in item.optional_attendees:
print(f" - {attendee.mailbox.name} <{attendee.mailbox.email_address}>")
print(f"✍️ Организатор: {item.organizer.email_address if item.organizer else '—'}")
print(f"📄 Тело: {(item.text_body or '')[:200]}{'...' if item.text_body and len(item.text_body) > 200 else ''}")
print("-" * 70)