求助: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
相关产品推荐
相关产品推荐

