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

Python Flask下使用Gmail API发送表单上传文件为邮件附件求助

问题解决说明

报错根因

os.path.realpath(request.files['attfile'])用法错误:request.files['attfile']拿到的是Flask封装的FileStorage文件对象,不是本地文件的路径字符串,不能直接传入路径处理函数执行解析。
你不需要额外获取本地路径,可直接读取该文件对象的内容作为邮件附件,无需提前存储到本地。

修正后可运行代码

if request.method == "POST":
    # 先获取上传的文件对象
    upload_file = request.files['attfile']
    emailMsg = request.form['body']
    mimeMessage= MIMEMultipart()
    mimeMessage['to']=request.form['email']
    mimeMessage['subject']=request.form['subject']
    mimeMessage.attach(MIMEText(emailMsg,'plain'))

    # 直接处理上传文件,不需要读取本地路径
    file_name = upload_file.filename
    content_type, encoding= mimetypes.guess_type(file_name)
    main_type,sub_type = content_type.split('/',1)

    # 直接读取文件对象内容,无需open本地文件
    myFile = MIMEBase(main_type, sub_type)
    myFile.set_payload(upload_file.read())
    myFile.add_header('Content-Disposition', 'attachment', filename=file_name)
    encoders.encode_base64(myFile)
    mimeMessage.attach(myFile)

    raw_string = base64.urlsafe_b64encode(mimeMessage.as_bytes()).decode()
    message = service.users().messages().send(
        userId='me',
        body = {'raw':raw_string}).execute()
    return render_template('email.html')

配套配置要求

  • 前端提交文件的表单必须添加enctype="multipart/form-data"属性,否则后端无法获取上传文件,示例表单代码:
<form method="post" enctype="multipart/form-data">
  <input type="file" name="attfile" required>
  <input type="email" name="email" required>
  <input type="text" name="subject" required>
  <textarea name="body" required></textarea>
  <button type="submit">发送邮件</button>
</form>
  • 如果需要支持多附件上传,给文件输入框添加multiple属性,后端用request.files.getlist('attfile')遍历所有上传文件即可。
  • 若有业务要求必须先存储文件到本地再发送,添加以下保存逻辑即可拿到本地路径:
# 提前在项目根目录创建upload文件夹用于存储上传文件
import os
save_dir = 'upload'
os.makedirs(save_dir, exist_ok=True)
local_file_path = os.path.join(save_dir, upload_file.filename)
upload_file.save(local_file_path)
# 后续可直接用local_file_path作为本地路径读取文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:18:03