Skip to content

Access a shared mailbox you don't own: read its recent messages and folders.

The key pattern: a shared mailbox is exposed as an ordinary user object, so you address it with client.users[<shared-mailbox-upn>] instead of client.me. Your identity needs access (delegated) or Mail.Read (app).

Permissions

Requires delegated Mail.Read.Shared (or app Mail.Read).

Reference

View source

from __future__ import annotations

import argparse

from office365.graph_client import GraphClient
from tests.settings import client_id, password, tenant, username


def main() -> None:
    parser = argparse.ArgumentParser(description="Read a shared mailbox")
    parser.add_argument("--mailbox", required=True, help="shared mailbox UPN, e.g. support@contoso.com")
    parser.add_argument("--top", type=int, default=5, help="how many messages to show (default: 5)")
    args = parser.parse_args()

    client = GraphClient(tenant=tenant).with_username_and_password(client_id, username, password)
    shared = client.users[args.mailbox]

    messages = shared.messages.top(args.top).get().execute_query()
    print(f"Recent messages in {args.mailbox} ({len(messages)}):\n")
    for message in messages:
        print(f"  {message.subject or '(no subject)'}")

    folders = shared.mail_folders.get().execute_query()
    print(f"\nFolders ({len(folders)}):")
    for folder in folders:
        print(f"  {folder.display_name}")


if __name__ == "__main__":
    main()

← Back to Shared mailboxes