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

能否通过Django的send_mail()函数发送附件?求替代模块链接

Django发送带附件邮件的解决方案

嘿,好问题!Django内置的send_mail()函数确实不支持直接添加邮件附件——它是一个简化的邮件发送接口,主要用来快速发送纯文本或HTML格式的基础邮件,没有提供附件相关的参数。

如果需要发送带附件的邮件,推荐使用Django提供的EmailMessage类(以及它的子类EmailMultiAlternatives),这两个类是Django邮件系统的核心组件,支持添加附件、自定义邮件头、抄送/密送等高级功能。

示例1:使用EmailMessage发送带本地文件附件的邮件

from django.core.mail import EmailMessage

# 初始化邮件对象
email = EmailMessage(
    subject="项目报告(含附件)",
    body="您好,附件是本次项目的详细报告,请查收。",
    from_email="your_work_email@company.com",
    to=["client@example.com"],
    bcc=["manager@company.com"],  # 可选:密送相关人员
)

# 添加本地文件作为附件
email.attach_file("/home/user/documents/project_report.pdf")

# 发送邮件(fail_silently=False会抛出异常方便排查问题)
email.send(fail_silently=False)

示例2:使用EmailMultiAlternatives发送HTML邮件+附件

如果需要同时发送HTML格式的邮件正文(并保留纯文本作为降级方案),可以用EmailMultiAlternatives类,它继承自EmailMessage,完全兼容附件功能:

from django.core.mail import EmailMultiAlternatives

email = EmailMultiAlternatives(
    subject="月度数据可视化报告",
    body="这是纯文本版本的邮件内容,若您的邮箱不支持HTML将显示此内容。",
    from_email="data_team@company.com",
    to=["team_members@company.com"],
)

# 添加HTML格式的正文
email.attach_alternative(
    """
    <h1>月度数据报告</h1>
    <p>本月用户增长<span style="color:green;">15%</span></p>
    <p>详情见附件</p>
    """,
    "text/html"
)

# 添加字节流形式的附件(比如生成的临时文件内容)
import io
from PIL import Image

# 生成一张简单的图片作为示例
img = Image.new('RGB', (100, 100), color='red')
img_bytes = io.BytesIO()
img.save(img_bytes, format='JPEG')
img_bytes.seek(0)

email.attach("growth_chart.jpg", img_bytes.read(), "image/jpeg")

# 发送邮件
email.send()

这两个类完全满足带附件邮件的需求,而且是Django官方内置的,不需要额外安装第三方包,配置好邮件后端(比如SMTP)就能直接使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:18:45