gpt4 book ai didi

django - 在 Django 中发送电子邮件的困惑

转载 作者:行者123 更新时间:2023-12-03 12:05:41 25 4
gpt4 key购买 nike

我的 Django 应用程序需要以 HTML 格式发送电子邮件。根据 official documention :

It can be useful to include multiple versions of the content in an email; the classic example is to send both text and HTML versions of a message. With Django's email library, you can do this using the EmailMultiAlternatives class. This subclass of EmailMessage has an attach_alternative() method for including extra versions of the message body in the email. All the other methods (including the class initialization) are inherited directly from EmailMessage.



...我想出了以下代码:
from django.core.mail import EmailMultiAlternatives
msg = EmailMultiAlternatives()
msg.sender = "someone@somewhere.com"
msg.subject = subject
msg.to = [target,]
msg.attach_alternative(content, "text/html")
msg.send()

这项工作按预期进行。但是,在某些情况下,我需要包含 PDF 附件,为此我在 msg.send() 之前添加了以下代码:
if attachments is not None:
for attachment in attachments:
content = open(attachment.path, 'rb')
msg.attach(attachment.name,content.read(),'application/pdf')

虽然这有效 - 所有 PDF 文档都正确附加到电子邮件 - 不需要的副作用是电子邮件的 HTML 内容现在已经消失,我留下了一个空的电子邮件正文,其中附加了 PDF 文档。

我在这里做错了什么?

最佳答案

我想到了。

如果您使用 EmailMultiAlternatives您显然必须同时提供电子邮件正文的文本格式和 HTML 格式,以应对您的电子邮件有附加附件的情况。我只提供了 HTML 格式,这对于没有附件的电子邮件来说是可以的,但是当添加其他附件(如 PDF 文档)时,不知何故令人困惑。

最终的工作代码:

text_content = strip_tags(content)
msg = EmailMultiAlternatives()
msg.sender = "someone@somewhere.com"
msg.subject = subject
msg.to = [target]
msg.body = text_content
msg.attach_alternative(content, "text/html")
if attachments is not None:
for attachment in attachments:
content = open(attachment.path, 'rb')
msg.attach(attachment.name,content.read(),'application/pdf')
msg.send()

关于django - 在 Django 中发送电子邮件的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14580176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com