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

Django使用send_mail发送邮件时HTML标签直接展示该如何解决?

Django发送HTML邮件显示原始标签问题解决方案

问题原因

Django内置的send_mail函数默认发送的是纯文本格式邮件,你当前把HTML内容直接传入了第二个纯文本内容参数,邮件客户端会把所有内容当成普通文本处理,因此直接展示HTML标签而不渲染样式。

解决方案

方案1:使用send_mail的html_message参数(最简改法)

send_mail提供了可选的html_message参数,专门用来传入HTML格式的邮件内容,修改你的信号函数里的邮件发送代码即可:

@receiver(post_save, sender=MeetingMember)
def send_invited_emails(sender, instance,  **kwargs):
    host = instance.meeting.host
    subject = "Mizban invition"
    domain = Site.objects.get_current().domain
    context={'host':host,'meeting': instance,'domain':domain}
    html_content = render_to_string('sendingemail.html',context)
    # 修改send_mail调用,增加html_message参数
    send_mail(
        subject,
        '如果您的邮件客户端不支持HTML格式,请查看此纯文本提示', # 纯文本备选内容
        settings.EMAIL_HOST_USER,
        [instance.email],
        html_message=html_content # 专门指定HTML内容
    )

方案2:使用EmailMultiAlternatives(更灵活,适合复杂邮件场景)

如果后续需要添加附件、自定义头信息等操作,可以用更底层的EmailMultiAlternatives类实现:

from django.core.mail import EmailMultiAlternatives

@receiver(post_save, sender=MeetingMember)
def send_invited_emails(sender, instance,  **kwargs):
    host = instance.meeting.host
    subject = "Mizban invition"
    domain = Site.objects.get_current().domain
    context={'host':host,'meeting': instance,'domain':domain}
    html_content = render_to_string('sendingemail.html',context)
    # 构建邮件对象
    msg = EmailMultiAlternatives(
        subject,
        '如果您的邮件客户端不支持HTML格式,请查看此纯文本提示',
        settings.EMAIL_HOST_USER,
        [instance.email]
    )
    # 附加HTML内容
    msg.attach_alternative(html_content, "text/html")
    # 发送邮件
    msg.send()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:18:04