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

求助:Python发送带CSV文件附件时,附件无法以CSV格式正常呈现

求助:Python发送带CSV文件附件时,附件无法以CSV格式正常呈现

刚接触Python遇到这种邮件附件的问题太正常了,我帮你梳理下代码里的问题,一步步解决它!

问题分析

你的代码能发送图片附件,但CSV附件无法被识别为CSV格式,核心原因是没有给CSV附件指定正确的MIME类型和附件头信息,另外代码里还有几处语法小错误需要修正:

  • os.environ调用错误:你写成了os_environ.get,应该是os.environ.get,而且环境变量名要用双引号包裹(不是反引号)
  • 收件人邮箱未填写:message['To']处是空的,需要填入具体的收件人邮箱字符串
  • CSV附件的MIME配置缺失:只设置了文件名,但没告诉邮件客户端这是CSV文件,导致客户端无法正确识别格式
  • 代码缩进问题:Python是缩进敏感语言,你的with open和smtplib.SMTP块内的代码没有正确缩进,会导致运行报错

修正后的完整代码

import os
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
import smtplib

# 修正os.environ的调用,用双引号包裹环境变量名
email_address = os.environ.get("EMAIL_ADDRESS")
email_password = os.environ.get("EMAIL_PASS")

message = MIMEMultipart()
message['From'] = email_address
# 填写收件人邮箱
message['To'] = "your-recipient-email@example.com"
message['Subject'] = "This is A Test Email"

message.attach(MIMEText('邮件正文内容'))

file_name = 'Daily_Ticket_Aging_Overview.csv'  # 记得加上.csv后缀!
with open('C:/Users\\odigii01\\Desktop\\Daily_Ticket_Aging_Overview.csv', 'rb') as file:
    # 创建CSV附件部分,指定subtype为csv
    part = MIMEApplication(file.read(), _subtype='csv')
    # 添加附件头,明确这是附件并指定文件名
    part.add_header('Content-Disposition', 'attachment', filename=file_name)
    message.attach(part)

# 修正缩进,确保smtp块内的代码正确缩进
with smtplib.SMTP(host='smtp.gmail.com', port=587) as smtp:
    smtp.ehlo()
    smtp.starttls()
    smtp.login(email_address, email_password)
    smtp.send_message(message)

print('邮件发送成功...')

关键修复点说明

  • 文件名加上.csv后缀:你原来的file_name没有.csv后缀,这会导致邮件客户端不知道用什么程序打开它
  • 指定CSV的MIME子类型:_subtype='csv'告诉邮件客户端这是CSV格式的文件
  • 添加Content-Disposition头:明确标记这是附件,让客户端以附件形式展示而不是直接显示内容

按照这个代码修改后,你的CSV附件应该就能被正常识别,下载后可以直接用Excel或者CSV阅读器打开啦!

备注:内容来源于stack exchange,提问作者Iyoodigie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:32:28