You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python exchangelib获取Exchange服务器的所有邮箱?

如何用 exchangelib 获取 Exchange 服务器的所有邮箱

可以用 exchangelib 实现,前提是你的账号拥有Exchange管理员权限(普通账号只能访问自己有权限查看的邮箱,无法获取全部),具体实现方式如下:

1. 先连接到 Exchange 服务器

from exchangelib import Credentials, Account

# 替换为你的管理员账号和密码
credentials = Credentials(username='admin@yourdomain.com', password='your_admin_password')
# 初始化账号连接,autodiscover会自动查找Exchange服务器地址
account = Account(
    primary_smtp_address='admin@yourdomain.com',
    credentials=credentials,
    autodiscover=True,
    access_type='delegate'  # 如果使用模拟权限,可改为'impersonation'
)

2. 获取所有邮箱的两种方法

方法一:遍历全局地址列表(GAL)

全局地址列表包含了Exchange服务器上的所有邮箱用户,直接遍历即可:

# 获取全局地址列表实例
gal = account.protocol.get_global_address_list()

# 遍历所有邮箱条目,提取关键信息
for entry in gal.all():
    if hasattr(entry, 'primary_smtp_address'):
        print(f"邮箱地址: {entry.primary_smtp_address}, 用户姓名: {entry.name}")

方法二:直接查询邮箱根文件夹(需更高权限)

如果你的账号拥有Exchange完全管理权限,可以直接查询所有邮箱的根文件夹,从而获取邮箱信息:

from exchangelib import FolderQuerySet

# 查询所有邮箱的根文件夹
mailbox_roots = FolderQuerySet(account=account).filter(is_root=True).all()

# 提取邮箱地址和名称
for root in mailbox_roots:
    print(f"邮箱地址: {root.mailbox.email_address}, 显示名称: {root.mailbox.name}")

注意事项

  • 权限限制:普通账号只能看到GAL中自己有权限访问的条目,只有管理员账号才能获取全部邮箱。
  • 性能优化:如果服务器上邮箱数量较多,建议使用分页查询(比如gal.all().page(page_size=100)),避免一次性加载过多数据导致性能问题。
  • Exchange Online适配:如果是Office 365(Exchange Online),建议使用OAuth2认证替代用户名密码,避免密码泄露风险。

内容的提问来源于stack exchange,提问作者grasdy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:57:15