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

使用Python给多用户发不同内容Outlook邮件时遇KeyError问题

问题排查:Python发送Outlook邮件时的KeyError错误

错误核心原因

KeyError本质是pandas读取CSV后,找不到代码中引用的Name/Email_id列,具体触发场景包括:

  • CSV文件的列名拼写与代码不匹配(比如实际是name/EmailID,而非Name/Email_id)
  • CSV分隔符设置错误:代码指定sep=';',但实际文件用逗号/制表符分隔
  • CSV开头存在空行,导致列名被误读为数据行
  • 编码不匹配导致列名读取乱码

解决步骤

1. 验证CSV文件的实际格式

直接打开content.csv,检查:

  • 第一行列名是否准确为Name、Email_id、Content
  • 列之间的分隔符是否为分号,与代码sep=';'一致

2. 调试查看DataFrame实际列名

在代码的print(df)后添加一行,打印pandas实际读取到的列名:

print("当前DataFrame列名:", df.columns.tolist())

运行后对比输出结果与代码中使用的列名,就能快速定位是否存在拼写/大小写差异。

3. 修正列名或代码引用

如果CSV列名与代码不一致,要么修改CSV的列名,要么调整代码中的引用。比如CSV列名是姓名,则把df['Name']改为df['姓名']。

4. 修正分隔符设置

若CSV实际用逗号分隔,修改pd.read_csv的参数:

df = pd.read_csv(path, sep=',', encoding='cp1252')

不确定分隔符时,可使用sep='\s*,\s*'匹配带空格的逗号,或添加engine='python'让pandas自动检测分隔符。

5. 代码优化建议

  • 将outlook = win32com.client.Dispatch('outlook.application')移到循环外,避免重复创建Outlook实例
  • 修正HTML语法错误:原代码中的</&gt;应为</font>,<t1>是无效标签,多余的</style>需删除,避免邮件显示异常

修正后的示例代码:

import pandas as pd
import win32com.client
import time

path = r'c:\Users\Abc\Desktop\content.csv'
df = pd.read_csv(path, sep=';', encoding='cp1252')
print(df)
print("当前DataFrame列名:", df.columns.tolist())

# 仅创建一次Outlook实例
outlook = win32com.client.Dispatch('outlook.application')

for i in df.index:
    mail = outlook.CreateItem(0)
    mail.Subject = 'Test Mail'
    
    print(df['Name'][i], df['Email_id'][i])
    mail.To = df['Email_id'][i]

    # 使用f-string简化HTML拼接,同时修正语法错误
    mail.HTMLBody = f'''\
        <html>
        <head></head>
        <body>
        <p>Hello {df['Name'][i]},<br>
        <p>Please refer to your score.<br>
        <div>{str(df['Content'][i])}</div>
        <font color='blue'><br>Thanks</font>
        <br><br>
        <font color='red'>Kindly do not reply to this email.</font>
        </p>
        </body>
        </html>
        '''

    mail.Send()
    time.sleep(1)  # 添加延迟避免发送过快触发限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:30:53