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

如何用Python 3给字典中同一键的多个收件人发送Outlook邮件

解决Python通过Outlook给多个收件人发送邮件的问题

问题根源

  1. 原代码中dict2的定义存在语法错误:键12对应的多个邮箱没有用列表包裹,导致字典实际仅保留最后一个邮箱地址test2@gmail.com
  2. 即使字典格式正确,直接将列表赋值给mail.To也无效——Outlook的收件人字段要求传入分号;分隔的字符串

修正后的完整代码

# -*- coding: cp1255 -*-
# encoding = utf8
import os, re, win32com.client as win32

secNum = input("请输入编号:")
# 修正字典格式:多收件人/多名字用列表存储
dict1 = {
    '12': ['joe', 'zeelo'],
    '14': 'steeve'
}

dict2 = {
    '12': ['test1@gmail.com', 'test2@gmail.com'],
    '14': 'test1@gmail.com'
}
newDate = '27_06'
rootdir = r'F:\desktop\Project'

def format_data(data_dict, key):
    """将字典值格式化为字符串:邮箱用分号分隔,名字用逗号分隔"""
    value = data_dict[key]
    if isinstance(value, list):
        return '; '.join(value) if '@' in value[0] else ', '.join(value)
    return value

# 仅初始化一次Outlook实例,提升效率
outlook = win32.Dispatch('outlook.application')

for _, dirs, files in os.walk(rootdir):
    for subdir in dirs:
        folderPath = os.path.join(rootdir, subdir)
        # 合并正则匹配逻辑,简化代码
        if re.search(f'report {secNum}', folderPath) and re.search(f'2022.June.{newDate}', folderPath):
            for fname in os.listdir(folderPath):
                if fname.endswith('.pdf'):
                    filePath = os.path.join(folderPath, fname)
                    print(filePath)
                    
                    mail = outlook.CreateItem(0)
                    mail.Subject = f' report: {secNum}'
                    # 传入格式化后的多收件人字符串
                    mail.To = format_data(dict2, secNum)
                    mail.Attachments.Add(filePath)
                    # 格式化收件人名称,优化邮件内容
                    recipient_names = format_data(dict1, secNum)
                    mail.HTMLBody = f'hi {recipient_names}<br> this is report date: <br/>{newDate}'
                    mail.Send()

核心修改说明

  1. 字典结构修复:将多收件人、多名字数据统一用列表存储,确保所有目标对象信息不丢失
  2. 格式化函数:format_data自动处理列表/字符串类型,将列表转为Outlook可识别的分隔格式(邮箱用分号,名字用逗号)
  3. 性能优化:提前初始化Outlook实例,避免循环中重复创建对象
  4. 逻辑简化:合并两次正则匹配的判断条件,让代码更简洁易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:35:26