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

如何使用Python的SendGrid API发送带有dataframe附件的邮件

实现方案

实现思路

  • 不需要落地生成本地文件,直接在内存中将DataFrame转换为目标格式(CSV/Excel均可,以下以常用的CSV为例)
  • 对转换后的内容进行base64编码,适配SendGrid附件的格式要求
  • 将编码后的内容封装为SendGrid附件对象,添加到原有邮件实例中即可

依赖导入

确保提前导入所需模块:

import base64
from io import BytesIO
from sendgrid.helpers.mail import Attachment, FileContent, FileName, FileType, Disposition

修改后的完整代码

def send_mail(content, df_to_attach=None):
    # 定义邮件正文
    html_content='Hi Team,</br><strong>{}</br></br>Thanks</strong></br></br>'.format(content)
    # 构造基础邮件对象
    message = Mail(
        from_email='XXXXXX@.com',
        to_emails=['XXXXXX@.com'],
        subject='test',
        html_content=html_content
    )
    # 有传入DataFrame时处理附件
    if df_to_attach is not None:
        # 内存中生成CSV字节流,设置utf-8-sig编码避免中文乱码,不导出索引列
        buffer = BytesIO()
        df_to_attach.to_csv(buffer, index=False, encoding='utf-8-sig')
        buffer.seek(0)
        # base64编码
        encoded_csv = base64.b64encode(buffer.read()).decode()
        # 构造附件对象
        attachment = Attachment()
        attachment.file_content = FileContent(encoded_csv)
        attachment.file_name = FileName('业务数据.csv')
        attachment.file_type = FileType('text/csv')
        attachment.disposition = Disposition('attachment')
        # 附件添加到邮件
        message.attachment = attachment
    
    try:
        sg = SendGridAPIClient(SENDGRID_API_KEY)
        response = sg.send(message)
    except Exception as e:
        logging.error(e.message)
    
    return None

扩展说明

如果需要导出为Excel格式附件,仅需修改附件处理部分的代码即可:

# 生成Excel字节流部分替换为以下代码
df_to_attach.to_excel(buffer, index=False, engine='openpyxl')
# 对应文件配置修改为
attachment.file_name = FileName('业务数据.xlsx')
attachment.file_type = FileType('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')

注意:使用Excel格式需要提前安装openpyxl依赖,执行pip install openpyxl即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:27:01