按邮箱分组拆分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)}")
关键说明
邮箱配置适配:
- 若使用Gmail且开启了两步验证,需生成应用专用密码(Google账户→安全→应用密码),而非普通登录密码。
- 其他邮箱服务商的SMTP参数参考:
- Outlook/Office365:
smtp.office365.com,端口587(需使用smtplib.SMTP并调用starttls()) - 网易邮箱:
smtp.163.com,端口465
- Outlook/Office365:
内容格式可选:
若不需要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'))错误处理:
代码中加入了异常捕获,可定位发送失败的邮箱及原因,方便排查问题。
内容的提问来源于stack exchange,提问作者diddlyd43
相关产品推荐
相关产品推荐

