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

如何实现按唯一邮箱匹配对应附件批量创建Outlook邮件?

解决Outlook批量创建关联附件邮件的问题

问题背景

需求是从记录邮箱与附件对应关系的Excel文档自动创建邮件,每封邮件仅附带对应邮箱的关联附件。现有代码会生成4封邮件(与Excel行数一致),且每封邮件都附带全部附件,不符合预期。预期效果为:

  • email 1 附带 attach A、attach B
  • email 2 附带 attach C
  • email 3 附带 attach D

现有代码片段:

index = 0
counter = 0
for email in emails:
    mailItem = olApp.CreateItem(0)
    mailItem.Subject = 
    mailItem.BodyFormat = 1
    mailItem.Body = 
    mailItem.To = email
    counter = counter + 1

    for attachment in attachments:
        mailItem.Attachments.Add(attachment)
    index+=1
    mailItem.Display()

counter+=1

Excel数据源对应关系:

emailsattachments
email 1attach A
email 1attach B
email 2attach C
email 3attach D

问题分析

现有代码的核心问题:

  1. 直接遍历Excel每行的邮箱地址,导致重复邮箱(如email 1)被多次创建邮件
  2. 每次创建邮件时,循环添加全部附件,未关联当前邮箱对应的专属附件

解决思路是先将邮箱与附件按邮箱分组,再基于分组结果创建邮件。

修正后的代码

步骤1:对Excel数据进行分组处理

用pandas读取Excel并整理为「邮箱-对应附件列表」的字典结构:

import pandas as pd

# 读取Excel文件,替换为你的文件路径
df = pd.read_excel("邮件附件对应表.xlsx")
# 按邮箱分组,聚合对应附件为列表
email_attach_map = df.groupby('emails')['attachments'].apply(list).to_dict()

步骤2:基于分组结果创建邮件

counter = 0
# 遍历分组后的邮箱-附件字典
for email, attach_list in email_attach_map.items():
    mailItem = olApp.CreateItem(0)
    # 自定义邮件主题、正文内容
    mailItem.Subject = "批量发送的邮件主题"
    mailItem.BodyFormat = 1
    mailItem.Body = "邮件正文内容"
    mailItem.To = email
    
    # 仅添加当前邮箱对应的附件
    for attachment in attach_list:
        mailItem.Attachments.Add(attachment)
    
    mailItem.Display()
    counter += 1

print(f"共创建 {counter} 封邮件")

代码说明

  1. 数据分组:通过groupby将同一邮箱的所有附件聚合为列表,确保每个邮箱仅对应一组附件
  2. 邮件创建:遍历分组后的字典,每个邮箱仅生成一封邮件,且仅添加该邮箱对应的附件
  3. 逻辑简化:去掉原代码中冗余的index变量,直接基于分组后的邮箱数量统计创建邮件数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:43:24