如何使用Python的win32com.client模块向多个收件人或群组发送Outlook邮件
基于win32com.client调用Outlook发送多收件人/群组邮件的实现方案
核心实现逻辑
- 多独立收件人实现:
To/CC/BCC属性支持传入分号分隔的多个邮箱地址,也可以通过Recipients.Add()方法逐个添加收件人,后者兼容性更强,不会出现分隔符识别异常。 - Outlook通讯组(群组)实现:直接传入群组在Outlook地址簿中的准确显示名即可,Outlook会自动解析群组内的所有成员,不需要手动拆解群组地址。
可运行的完整实现代码
import win32com.client olMailItem = 0x0 obj = win32com.client.Dispatch("Outlook.Application") newMail = obj.CreateItem(olMailItem) # 邮件基础配置 newMail.Subject = "测试多收件人/群组邮件" newMail.Body = "这是邮件正文内容\n第二行正文" # 方式1:直接用分号拼接多收件人,支持同时填邮箱和群组名 # newMail.To = "user1@example.com;user2@example.com;产品部全员群组" # newMail.CC = "user3@example.com;部门领导群组" # 方式2:通过Recipients接口添加,更稳妥,支持校验地址有效性 recipients = newMail.Recipients # 添加普通收件人 recipients.Add("user1@example.com") recipients.Add("user2@example.com") # 添加Outlook通讯组(直接填群组的显示名即可) recipients.Add("产品部全员群组") # 统一解析所有收件人地址,确认有效 all_valid = recipients.ResolveAll() if not all_valid: # 可自行添加无效收件人的处理逻辑 print("存在无法识别的收件人/群组,请检查名称是否和Outlook地址簿一致") # 附件添加逻辑和原有实现一致 # attachment1 = "C:/test/附件.xlsx" # newMail.Attachments.Add(attachment1) # 预览邮件或直接发送 # newMail.Display() newMail.Send()
注意事项
- 运行代码前确保Outlook客户端处于正常登录状态,且对应账号有权限访问你要发送的群组地址簿
- 群组名必须和Outlook地址簿中显示的名称完全一致,否则会出现解析失败的问题
- 如果使用分号拼接的方式填写收件人,注意不要在分号前后加多余的全角空格,避免地址识别错误
- 该方案仅依赖本地Outlook客户端,不需要额外调用SMTP接口,完全符合业务限定要求
内容的提问来源于stack exchange,提问作者Chandra Shekhar
相关产品推荐
相关产品推荐

