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

Python结合Pandas DataFrame自动发邮件遇TypeError错误求助

解决批量发送邮件时的TypeError问题

错误根源

你遇到的TypeError: send_email() missing 1 required positional argument: 'row',本质是调用函数时没传入它需要的row参数。你定义了send_email(row),说明这个函数需要接收一行DataFrame数据作为参数,但调用时直接写了send_email(),没传任何值,Python自然会报错。

额外的逻辑问题

另外你提到“在函数内遍历DataFrame行获取信息”,这是重复操作——函数本身是用来处理单条数据的,遍历应该放在函数外面,把每行数据传给函数就行,不然函数里再遍历会导致逻辑混乱。

修正后的代码示例

下面是正确的写法:

import smtplib
from email.message import EmailMessage
import pandas as pd

# 读取数据
df = pd.read_excel("你的文件路径.xlsx")

def send_email(row):
    # 直接从传入的row里取单条数据,不用再遍历整个df
    name = row["姓名"]
    email_addr = row["邮箱"]
    other_info = row["其他列名"]  # 替换成你的实际列名

    # 构造邮件
    msg = EmailMessage()
    msg["Subject"] = f"您好,{name}"
    msg["From"] = "你的发送邮箱@xxx.com"
    msg["To"] = email_addr
    # 支持HTML格式的邮件内容
    msg.set_content(f"""
    <html>
        <body>
            <p>您好,{name}:</p>
            <p>这是给您的自动邮件,您的相关信息:{other_info}</p>
        </body>
    </html>
    """, subtype="html")

    # 发送邮件(以QQ邮箱为例,其他邮箱自行调整SMTP地址和端口)
    with smtplib.SMTP_SSL("smtp.qq.com", 465) as server:
        server.login("你的发送邮箱@xxx.com", "你的邮箱授权码")
        server.send_message(msg)

# 两种调用方式二选一
# 方法1:用pandas的apply方法
df.apply(send_email, axis=1)

# 方法2:用for循环遍历每行
# for index, row in df.iterrows():
#     send_email(row)

注意事项

  • 确保你的邮箱开启了SMTP服务,并且使用授权码而非登录密码(QQ、163等主流邮箱都需要单独设置授权码)
  • 批量发送时建议添加time.sleep(2)之类的间隔,避免被邮箱服务商判定为垃圾邮件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:45:41