Python 以HTML格式发送的电子邮件正文

Python 以HTML格式发送的电子邮件正文,python,django,Python,Django,我正在使用此视图从tinymce向所有订阅的用户发送电子邮件: def send_newsletter(request): form = NewsLetterEmailForm(request.POST or None) if form.is_valid(): instance = form.save() newsltr = NewsLetterEmail.objects.get(id=instance.id) print(news

我正在使用此视图从tinymce向所有订阅的用户发送电子邮件:

def send_newsletter(request):
    form = NewsLetterEmailForm(request.POST or None)
    if form.is_valid():
        instance = form.save()
        newsltr = NewsLetterEmail.objects.get(id=instance.id)
        print(newsltr.status)

        if newsltr.status == 'Published':
            subject = newsltr.subject
            body = mark_safe(newsltr.body)
            from_email = settings.EMAIL_HOST_USER

            for newsletter_obj in NewsLetter.objects.all():
                send_mail(subject=subject, from_email=from_email,
                          message=body, recipient_list=[newsletter_obj.email])

    return render(request, 'newsletter/send-email.html', {'form': form})
但电子邮件内容以html格式发送:

<p><span style="font-family: 'arial black', sans-serif; font-size: 18pt;"><strong>Completely optimize efficient internal</strong></span></p>
<p>or "organic" sources with fully tested schemas. Enthusiastically aggregate mission-critical infrastructures via top-line content. Objectively matrix cutting-edge bandwidth before viral action items. Objectively matrix viral users after sticky processes. Dramatically harness adaptive meta-services rather than scalable e-commerce.</p>

我使用了Marku的安全方法,希望它能起作用,但没有。如何解决它?

刚刚找到了使用EmailMultiAlternative的方法,替换这部分代码就解决了问题

    if newsltr.status == 'Published':
        subject = newsltr.subject
        body = newsltr.body
        from_email = settings.EMAIL_HOST_USER

        for newsletter_obj in NewsLetter.objects.all():
            msg = EmailMultiAlternatives(
                subject, body, from_email, [newsletter_obj.email])
            msg.attach_alternative(body, "text/html")
            msg.send()

您不应该在电子邮件的文本部分和html部分发送相同的正文。关键是每封电子邮件都应该有两种选择:一种是纯文本,即没有任何标签,另一种是html。现在,在不呈现HTML的客户端上阅读您的电子邮件的人仍然会有阅读电子邮件的困难,因为文本/纯文本部分仍然包含HTML标记。这是真的,您是否建议对代码进行任何编辑,因为我不知道如何做。msg.attache_alternativebody,“text/plain”将解决此问题不,这不是那么简单,已经有一个“文本/纯文本”部分,当您通过电子邮件发送多个可选对象时,您可以创建该部分,body,from_email。。。。问题是您发送的正文是HTML作为文本/普通部分。你的回答是正确的。但是您可能需要考虑一种生成文本/普通部分的方法。或者在你的文本/纯文本部分在线发送一个简单的链接到页面。注意,许多人怀疑文本/纯文本部分的实用性,因为几乎所有的电子邮件客户端都处理HTML部分。但如果我在smartwatch上阅读电子邮件,它只显示文本/普通部分。