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

Django使用send_mail发带PDF附件的邮件报AttributeError如何解决

报错根因

send_mail()是Django封装的快捷发信方法,返回值为整数,表示成功发送的邮件数量,并非邮件实例对象,因此无法调用attach方法添加附件。如果需要发送带附件的邮件,需要使用Django提供的邮件构造类实现。

正确实现步骤

1. 导入依赖

from django.core.mail import EmailMessage, EmailMultiAlternatives
from django.conf import settings
import os

2. 调整发信逻辑

# 原有基础信息配置保留
subject = 'Management Automated Email- ' + item.emp
html_message = render_to_string('email.html', data)
plain_message = item.emp
recipient_list = [item.email]
from_email = 'email@gmail.com' # 修正原代码漏写的前引号

# 构造邮件实例,如需同时兼容纯文本和HTML格式,使用EmailMultiAlternatives
mail = EmailMultiAlternatives(
    subject=subject,
    body=plain_message,
    from_email=from_email,
    to=recipient_list
)
# 附加HTML格式内容
mail.attach_alternative(html_message, "text/html")

# 按你的目录结构拼接PDF文件绝对路径
pdf_path = os.path.join(settings.BASE_DIR, 'Folder', 'templates', 'p.pdf')
with open(pdf_path, 'rb') as f:
    pdf_content = f.read()

# 添加附件,注意PDF对应的MIME类型为application/pdf
mail.attach('papers.pdf', pdf_content, 'application/pdf')

# 发送邮件
mail.send(fail_silently=False)

注意事项

  • 读取附件文件时建议使用基于BASE_DIR的绝对路径,避免相对路径引发的文件找不到错误
  • 不同格式附件的MIME类型不要写错,否则可能导致收件端无法正常打开附件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:00:04