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

如何用FlaskMailMessage发送Base64编码图片附件?

正确实现Flask-Mail发送Base64图片作为附件的方式

你遇到的问题本质是Flask-Mail的Message.attachments需要的是FileStorage类型对象,直接传BytesIO会因为缺少FileStorage特有的data属性报错。下面是完整的正确实现步骤:

核心思路

  1. 把Base64编码的字符串解码成二进制图片数据
  2. 用werkzeug.datastructures.FileStorage包装二进制数据(这是Flask-Mail附件要求的类型)
  3. 将包装好的对象添加到邮件的附件列表中

完整代码示例

from flask import Flask
from flask_mail import Mail, Message
import base64
from io import BytesIO
from werkzeug.datastructures import FileStorage

app = Flask(__name__)
# 配置Flask-Mail参数,根据你的实际邮箱服务填写
app.config['MAIL_SERVER'] = 'smtp.example.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = 'your_email@example.com'
app.config['MAIL_PASSWORD'] = 'your_email_password'

mail = Mail(app)

def send_base64_image_email():
    # 示例Base64编码的图片字符串(实际中替换为你的Base64数据)
    base64_image_str = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg=="
    
    # 1. 处理Base64数据:去掉前缀,解码二进制
    if 'base64,' in base64_image_str:
        base64_data = base64_image_str.split('base64,')[1]
    else:
        base64_data = base64_image_str
    image_bytes = base64.b64decode(base64_data)
    
    # 2. 用BytesIO存储二进制数据,并用FileStorage包装
    img_io = BytesIO(image_bytes)
    img_io.seek(0)  # 重置文件指针到开头
    # 创建FileStorage对象,指定文件名、MIME类型
    file_storage = FileStorage(
        stream=img_io,
        filename='attachment_image.png',
        content_type='image/png'
    )
    
    # 3. 创建邮件并添加附件
    msg = Message(
        subject='带Base64图片附件的邮件',
        sender='your_email@example.com',
        recipients=['recipient@example.com']
    )
    msg.body = '这是一封包含Base64图片附件的测试邮件'
    # 将FileStorage对象添加到附件列表
    msg.attachments.append(file_storage)
    
    # 发送邮件
    with app.app_context():
        mail.send(msg)

if __name__ == '__main__':
    send_base64_image_email()

关键说明

  • FileStorage是Werkzeug提供的类,专门用于处理文件上传/存储,Flask-Mail的附件系统依赖它的接口(比如data属性、filename属性等)
  • 处理Base64时要注意是否带有data:image/png;base64,这类前缀,需要先剥离再解码
  • 创建FileStorage时要指定正确的content_type(比如图片是image/png、image/jpeg等),否则收件方可能无法正确识别附件类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:57:21