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

Outlook批量发邮件:如何实现单PDF逐个发送而非全部附件?

问题修复方案

核心问题分析

你的代码会把C:\ArquivosPDF\OK目录下所有PDF全附加到每一封邮件里,核心原因是没建立公司和对应PDF的关联逻辑,只是无脑遍历整个目录的所有文件并添加。另外代码还有两处基础错误需要修正。

修复步骤及完整代码

1. 先修正基础错误

  • 变量名写错:enumerate(table['Vencidos'])里的table要改成tabela,因为前面定义的Excel数据变量是tabela
  • 路径拼接错误:os.path.join(os.getcwd(), caminho, files)改成os.path.join(caminho, files)——caminho已经是绝对路径,没必要再拼当前工作目录,否则会生成无效路径

2. 实现公司与PDF的匹配逻辑

假设你的Excel表格里有一列(比如叫Empresa)存了公司名称,对应的PDF文件名包含该公司名(比如EmpresaABC.pdf),我们就基于这个关联来给每个公司只加对应文件。修复后的完整代码如下:

import os
import pandas as pd
import win32com.client as win32

# 读取Excel表格数据
tabela = pd.read_excel('SepEmpresa.xlsx')

# 初始化Outlook客户端
olApp = win32.Dispatch('Outlook.Application')
caminho_pdfs = 'C:\\ArquivosPDF\\OK'

# 遍历表格中需要发邮件的行
for idx, row in tabela.iterrows():
    if row['Vencidos'] == 'OK':
        email_destino = row['Email']
        nome_empresa = row['Empresa']  # 假设Excel有这一列,用来匹配对应PDF
        
        # 创建新邮件
        mailItem = olApp.CreateItem(0)
        mailItem.Subject = 'Expired'
        mailItem.Body = 'anything'
        mailItem.To = email_destino
        
        # 只添加当前公司对应的PDF
        for arquivo in os.listdir(caminho_pdfs):
            # 按文件名包含公司名筛选,可根据实际规则调整(比如完全匹配、前缀后缀匹配)
            if nome_empresa in arquivo and arquivo.endswith('.pdf'):
                caminho_arquivo = os.path.join(caminho_pdfs, arquivo)
                mailItem.Attachments.Add(caminho_arquivo)
        
        # 显示邮件(要自动发送就改成mailItem.Send())
        mailItem.Display()

关键修改说明

  • 用iterrows()遍历表格,更方便同时获取每行的邮箱、公司名等多列数据
  • 新增了文件匹配逻辑:只给当前邮件添加和公司对应的PDF,避免全量附加
  • 修正了路径和变量名错误,避免运行报错

额外优化建议

如果Excel里直接存了每个公司对应的PDF文件名(比如列名是NomeArquivoPDF),可以直接定位文件,不用遍历整个目录,效率更高:

# 替换原有的遍历目录代码块
nome_arquivo_pdf = row['NomeArquivoPDF']
caminho_arquivo = os.path.join(caminho_pdfs, nome_arquivo_pdf)
# 先检查文件是否存在,避免报错
if os.path.exists(caminho_arquivo):
    mailItem.Attachments.Add(caminho_arquivo)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:45:33