Appearance
MSGraphDeltaService
Track incremental changes in Outlook mailboxes using Microsoft Graph delta queries. Establish a delta link on first sync, then use it to fetch only new or changed messages on subsequent calls.
Credentials
Uses the Entra ID app registration (client_id, client_secret, tenant_id). Typical Graph permissions: Mail.Read.
Usage
python
from elsai_cloud.microsoft_delta import MSGraphDeltaService, DeltaConfig, DeltaStrategy
from datetime import datetime, timezone, timedelta
import asyncio
async def sync_emails():
config = DeltaConfig(
timeout=45.0,
max_retries=3,
page_size=50,
establishment_strategies=[
DeltaStrategy.CURRENT_TIME,
DeltaStrategy.FUTURE_FILTER,
DeltaStrategy.SKIP_TOKEN,
DeltaStrategy.STANDARD,
],
)
service = MSGraphDeltaService(
config=config,
client_id="your_client_id",
client_secret="your_client_secret",
tenant_id="your_tenant_id",
)
user_id = "user@example.com"
folder = "inbox"
# Establish a delta link (first sync)
delta_link = await service.establish_delta_link(user_id, folder)
# Validate the delta link
is_valid = await service.validate_delta_link(delta_link)
print(f"Delta link valid: {is_valid}")
# Get all messages (initial sync)
initial_result = await service.get_initial_delta(user_id, folder)
print(f"Total messages: {initial_result.total_count}")
# Filter to last 7 days
start_date = datetime.now(timezone.utc) - timedelta(days=7)
filtered = await service.get_initial_delta(user_id, folder, start_date)
print(f"Messages in last 7 days: {filtered.total_count}")
# Get incremental changes since last sync
if initial_result.delta_link:
changes = await service.get_delta_changes(initial_result.delta_link)
print(f"New changes: {changes.total_count}")
# Get delta statistics
if initial_result.delta_link:
stats = await service.get_delta_statistics(initial_result.delta_link)
print(f"Stats: {stats}")
# Update config at runtime
new_config = DeltaConfig(timeout=60.0, max_retries=5, page_size=100)
service.update_config(new_config)
asyncio.run(sync_emails())DeltaConfig parameters:
| Parameter | Description |
|---|---|
timeout | Request timeout in seconds |
max_retries | Maximum retry attempts on failure |
page_size | Number of messages per page |
establishment_strategies | Ordered list of DeltaStrategy values to try when establishing a delta link |
DeltaStrategy options:
| Strategy | Description |
|---|---|
CURRENT_TIME | Start delta from the current timestamp |
FUTURE_FILTER | Use a filter for future messages |
SKIP_TOKEN | Use skip token pagination |
STANDARD | Standard delta query |