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

使用Apps Script按邮箱分组合并多行交易记录发送单封邮件

按邮箱分组发送合并交易记录的邮件解决方案

我来帮你搞定这个问题!核心思路就是先按表格里的「Email address」列把所有交易记录分组,把同一收件人的多条记录汇总到一起,再为每个分组生成并发送一封包含全部交易的邮件。下面以Python为例,给出具体的实现步骤:

1. 读取并分组交易数据

首先用pandas读取电子表格,然后按邮箱字段分组,把同一用户的所有交易记录整理成结构化的数据:

import pandas as pd

# 读取你的交易记录表格(支持xlsx、csv等格式,根据实际文件调整)
df = pd.read_excel("交易记录.xlsx")
# 可选:清理空邮箱的记录,避免无效发送
df = df.dropna(subset=["Email address"])

# 按邮箱分组,把每组的交易记录转成字典列表,方便后续处理
grouped_transactions = df.groupby("Email address").apply(lambda x: x.to_dict("records")).to_dict()

这段代码会生成一个类似{"user@example.com": [{"交易ID": "123", "金额": 100, ...}, ...]}的字典,键是收件人邮箱,值是该用户的所有交易记录列表。

2. 生成汇总邮件内容

接下来需要把同一用户的多条交易记录格式成清晰易读的邮件内容,支持纯文本和HTML两种格式(推荐HTML,排版更美观):

# 生成纯文本格式的邮件内容(兼容所有邮箱)
def build_plain_text_content(records):
    content = "您好!以下是您的所有交易记录汇总:\n\n"
    for idx, record in enumerate(records, 1):
        content += f"--- 交易{idx} ---\n"
        for field, value in record.items():
            content += f"{field}: {value}\n"
        content += "\n"
    content += "感谢您的支持!"
    return content

# 生成HTML格式的邮件内容(排版更美观)
def build_html_content(records):
    # 构建HTML表格
    html = """
    <p>您好!以下是您的所有交易记录汇总:</p>
    <table style="border-collapse: collapse; width: 100%;">
        <thead>
            <tr style="background-color: #f2f2f2;">
    """
    # 添加表头
    headers = records[0].keys()
    for header in headers:
        html += f"<th style='border: 1px solid #ddd; padding: 8px;'>{header}</th>"
    html += """
            </tr>
        </thead>
        <tbody>
    """
    # 添加交易记录行
    for record in records:
        html += "<tr>"
        for value in record.values():
            html += f"<td style='border: 1px solid #ddd; padding: 8px;'>{value}</td>"
        html += "</tr>"
    html += """
        </tbody>
    </table>
    <p style='margin-top: 20px;'>感谢您的支持!</p>
    """
    return html

3. 发送合并后的邮件

最后结合smtplib库,遍历每个邮箱分组,发送汇总邮件:

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

# 配置你的邮箱SMTP信息(根据服务商调整,比如QQ、Gmail、企业邮箱等)
SMTP_SERVER = "smtp.example.com"
SMTP_PORT = 587  # 一般是587(TLS)或465(SSL)
SENDER_EMAIL = "your_email@example.com"
SENDER_PASSWORD = "your_password"  # 注意:部分邮箱需要用应用专用密码,而非登录密码

# 遍历每个收件人分组发送邮件
for recipient_email, records in grouped_transactions.items():
    # 创建多部分邮件(同时包含纯文本和HTML)
    msg = MIMEMultipart('alternative')
    msg['From'] = Header("交易记录通知", 'utf-8')
    msg['To'] = Header(recipient_email, 'utf-8')
    msg['Subject'] = Header("您的交易记录汇总通知", 'utf-8')

    # 添加纯文本和HTML内容
    plain_text = build_plain_text_content(records)
    html_text = build_html_content(records)
    msg.attach(MIMEText(plain_text, 'plain', 'utf-8'))
    msg.attach(MIMEText(html_text, 'html', 'utf-8'))

    # 发送邮件
    try:
        with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
            server.starttls()  # 启用加密传输
            server.login(SENDER_EMAIL, SENDER_PASSWORD)
            server.sendmail(SENDER_EMAIL, recipient_email, msg.as_string())
        print(f"✅ 已成功发送汇总邮件至 {recipient_email}")
    except Exception as e:
        print(f"❌ 发送邮件至 {recipient_email} 失败:{str(e)}")

额外注意事项

  • 如果你的电子表格是用Excel VBA处理的,思路类似:先按「Email address」列排序,然后遍历行,把同一邮箱的记录临时存储起来,当遇到不同邮箱时,就把存储的记录生成邮件发送,再清空临时存储继续下一个用户。
  • 务必检查「Email address」列的格式,避免存在空值、拼写错误的邮箱,否则会导致发送失败或者无效发送。
  • 不同邮箱服务商的SMTP配置不同,比如QQ邮箱的SMTP服务器是smtp.qq.com,端口465;Gmail需要开启两步验证并使用应用专用密码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:43:07