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

按邮箱分组拆分DataFrame并发送对应邮件的技术实现求助

完整实现方案

步骤1:修正Groupby代码并分组DataFrame

你原来的列表推导式存在语法错误(缺少闭合的括号和方括号),正确的分组方式可以直接遍历groupby对象,同时获取邮箱地址和对应的子DataFrame,无需先转成列表:

for recipient_email, account_df in df.groupby('email'):
    # 处理每个子DataFrame并发送邮件

步骤2:完整代码实现

以下是包含数据加载、分组、邮件发送的完整代码,你需要根据自己的邮箱配置修改对应参数:

import pandas as pd
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# 1. 加载或创建你的DataFrame(示例数据)
data = {
    'email': ['janedoe@gmail.com', 'janedoe@gmail.com', 'janedoe@gmail.com', 'janedoe@gmail.com',
              'michaeldoe@aol.com', 'michaeldoe@aol.com', 'jackdoe@aol.com'],
    'Acct #': [1230, 2546, 2468, 7896, 4565, 9686, 4656],
    'Acct Status': ['Closed']*7
}
df = pd.DataFrame(data)

# 2. 配置邮件发送参数(请替换为你的实际信息)
sender_email = "你的发件邮箱@gmail.com"
sender_password = "你的邮箱密码或应用专用密码"
smtp_server = "smtp.gmail.com"  # 不同邮箱服务商的SMTP地址不同
smtp_port = 465  # SSL端口

# 3. 遍历每个邮箱分组并发送邮件
for recipient_email, account_df in df.groupby('email'):
    # 构建邮件内容
    msg = MIMEMultipart()
    msg['From'] = sender_email
    msg['To'] = recipient_email
    msg['Subject'] = "你的账户详情"
    
    # 将子DataFrame转为HTML表格(邮件中显示更美观)
    html_table = account_df.to_html(index=False, border=1)
    
    # 邮件正文
    body = f"""
    <p>您好:</p>
    <p>以下是您的账户信息:</p>
    {html_table}
    <p>祝好</p>
    <p>您的团队</p>
    """
    msg.attach(MIMEText(body, 'html'))
    
    # 发送邮件
    try:
        with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
            server.login(sender_email, sender_password)
            server.send_message(msg)
        print(f"成功发送邮件至 {recipient_email}")
    except Exception as e:
        print(f"发送邮件至 {recipient_email} 失败:{str(e)}")

关键说明

  1. 邮箱配置适配:

    • 若使用Gmail且开启了两步验证,需生成应用专用密码(Google账户→安全→应用密码),而非普通登录密码。
    • 其他邮箱服务商的SMTP参数参考:
      • Outlook/Office365:smtp.office365.com,端口587(需使用smtplib.SMTP并调用starttls())
      • 网易邮箱:smtp.163.com,端口465
  2. 内容格式可选:
    若不需要HTML格式,可将DataFrame转为纯文本:

    text_table = account_df.to_string(index=False)
    body = f"您好:\n\n以下是您的账户信息:\n{text_table}\n\n祝好\n您的团队"
    msg.attach(MIMEText(body, 'plain'))
    
  3. 错误处理:
    代码中加入了异常捕获,可定位发送失败的邮箱及原因,方便排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:40:38