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

Python/Powershell读取CSV分组后发送Action 2事件通知邮件方案咨询

实现方案

一、Pandas实现数据筛选与分组

3万行数据量对于Pandas来说没有性能压力,完全可以高效完成筛选、分组操作,示例代码如下:
首先安装依赖:pip install pandas tabulate

import pandas as pd
from tabulate import tabulate

# 读取本地CSV文件
df = pd.read_csv("你的CSV文件路径.csv", dtype=str)

# 筛选Action值为2的记录
filtered_df = df[df["Action"] == "2"].copy()

# 按主管邮箱+姓名分组,避免同邮箱对应多个姓名的异常情况
grouped_data = filtered_df.groupby(["SupervisorEmail", "SupervisorName"], as_index=False)

# 遍历每个主管的分组生成邮件内容
for (supervisor_email, supervisor_name), group in grouped_data:
    # 提取需要在邮件中展示的字段
    show_table = group[["ID", "Name", "Action"]]
    # 格式化为对齐的纯文本表格
    table_content = tabulate(show_table, headers="keys", tablefmt="plain", showindex=False)
    # 拼接完整邮件正文
    mail_body = f"""Dear {supervisor_name},

The below accounts have had the Action 2 performed on them. Please contact us with any concerns.

{table_content}

Regards,
Corporate Events
"""
    # 此处调用邮件发送接口即可
    print(f"待发送给{supervisor_email}的邮件内容:\n{mail_body}\n======分割线======")

如果你不想额外安装tabulate库,也可以手动拼接字符串实现表格对齐。


二、Python对接认证SMTP网关发送邮件

推荐直接使用Python标准库smtplib+email,无需额外安装第三方依赖,支持身份认证、SSL加密等场景,示例代码如下:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

def send_alert_mail(receiver_email, mail_content, smtp_config):
    # 构造纯文本邮件对象
    msg = MIMEText(mail_content, 'plain', 'utf-8')
    msg['From'] = Header(smtp_config["sender_display_name"], 'utf-8')
    msg['To'] = receiver_email
    msg['Subject'] = Header("Action 2 Event Notification", 'utf-8')

    # 连接SMTP服务器并发送
    with smtplib.SMTP_SSL(smtp_config["smtp_host"], smtp_config["smtp_port"]) as server:
        # SMTP身份认证
        server.login(smtp_config["smtp_account"], smtp_config["smtp_password"])
        server.sendmail(smtp_config["sender_email"], receiver_email, msg.as_string())

# 替换为你实际的SMTP网关配置
smtp_config = {
    "smtp_host": "smtp.你的企业域名.com",
    "smtp_port": 465, # 非SSL端口通常为25,STARTTLS端口通常为587
    "sender_email": "events@你的企业域名.com",
    "sender_display_name": "Corporate Events",
    "smtp_account": "你的SMTP认证账号",
    "smtp_password": "你的SMTP认证密码"
}

# 在前文分组循环中直接调用即可
# send_alert_mail(receiver_email=supervisor_email, mail_content=mail_body, smtp_config=smtp_config)

三、Powershell实现方案

Windows环境下可以直接使用Powershell原生能力完成全流程,无需安装任何额外工具,示例代码如下:

# SMTP网关配置
$smtp_params = @{
    SmtpServer = "smtp.你的企业域名.com"
    Port = 587
    UseSsl = $true
    Credential = New-Object System.Management.Automation.PSCredential ("你的SMTP认证账号", (ConvertTo-SecureString "你的SMTP认证密码" -AsPlainText -Force))
    From = "Corporate Events <events@你的企业域名.com>"
}

# 读取CSV并筛选Action=2的记录
$filtered = Import-Csv -Path "你的CSV文件路径.csv" | Where-Object {$_.Action -eq "2"}

# 按主管信息分组
$supervisor_groups = $filtered | Group-Object -Property SupervisorEmail, SupervisorName

foreach ($group in $supervisor_groups) {
    $receiver_mail = $group.Values[0]
    $supervisor_name = $group.Values[1]
    # 生成格式化表格
    $table = $group.Group | Select-Object ID, Name, Action | Format-Table -AutoSize | Out-String
    # 拼接邮件正文
    $mail_body = @"
Dear $supervisor_name,

The below accounts have had the Action 2 performed on them. Please contact us with any concerns.

$table

Regards,
Corporate Events
"@
    # 发送邮件
    Send-MailMessage @smtp_params -To $receiver_mail -Subject "Action 2 Event Notification" -Body $mail_body
    Write-Host "已成功发送邮件给:$receiver_mail"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:15:02