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
相关产品推荐
相关产品推荐

