在电子邮件正文中呈现HTML

时间:2012-06-20 12:08:20

标签: python django

我想邮寄一个包含一些数据的简单HTML文件。我希望用户接收呈现的HTML。我试过这个解决方案:

b = render_to_string('mail_body.html',{'name':request.POST['name']})
send_mail(email_subject,b,'sender@gmail.com', ['receiver@gmail.com'],
    fail_silently=False)

但我没有在邮件正文中呈现HTML,用户可以看到所有HTML标记!

或者,当我使用以下代码时,我只是在邮件正文中获取HTML文件的路径:

params = {}
params['name'] = request.POST['name']
context = Context(params)
t = Template('mail_body.html')
send_mail(email_subject,t.render(context), 'sender@gmail.com',
    ['receiver@gmail.com'], fail_silently=False)

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

from django.core.mail import EmailMultiAlternatives
body = render_to_string(template_name, locals(),
                      context_instance=RequestContext(request))
email = EmailMultiAlternatives(subject, body, mail_sender, [contact_request.email], headers={'Reply-To': 'do_not_reply@whatever.com'})
email.content_subtype='html'
email.send(fail_silently=False)

希望这会导致正确的方向。请注意,这里有很多变量来自我自己的编程。

答案 1 :(得分:1)

问题是您需要告诉用户邮件客户端您正在向他们发送HTML电子邮件,否则它只会将HTML显示为文本。

该设置称为MIME类型,您可以在python user guides中阅读有关如何设置此设置(以及在python中发送HTML电子邮件)的更多信息。