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
相关产品推荐
相关产品推荐

