将标头添加到 Django EmailMultiAlternatives
Posted
技术标签:
【中文标题】将标头添加到 Django EmailMultiAlternatives【英文标题】:Adding headers to Django EmailMultiAlternatives 【发布时间】:2015-06-03 22:01:04 【问题描述】:在Django EmailMultiAlternatives documentation 中没有关于如何在EmailMultiAlternatives
中添加诸如“格式”或“回复”之类的标题的内容。我花了一段时间才弄清楚,我发送这篇文章是为了帮助其他人节省时间。
在 django 的源代码中可以看到,EmailMultiAlternatives
继承自 EmailMessage
,因此它们在 init 构造函数中采用相同的参数。这样,我们可以添加如下标题:
msg = EmailMultiAlternatives(
subject, message, from_email, to_list,
headers='Reply-To': "email@example.com", 'format': 'flowed'
)
【问题讨论】:
你应该把它写成一个解决方案。 @VanniTotaro 我很欣赏你的建议,我知道我可以通过回答问题获得更多的声誉,但是当我可以将它作为一个简洁的帖子时,我为什么要把它分成两个更长的帖子而浪费其他帖子'时间? 好吧,首先这个问题会变成“已回答”,否则如果我正在寻找答案,我可能会跳过这个问题,因为显然这是一个未回答的问题。此外,我认为这里的规则不鼓励这种 Q+A 帖子模式。顺便说一句,谢谢你,因为我利用了你的好解决方案。 meta.***.com/questions/267434/… 【参考方案1】:早在 2015 年 OP 就抱怨说,文档中没有说明如何在 Django 邮件 (django.core.mail) 模块中添加“格式”和“回复”等标题。然而今天,在使用same documentation link 时。我们很容易找到2018年的描述和例子:
类
EmailMessage
[source]EmailMessage 类使用以下参数初始化 (如果使用位置参数,则按给定顺序)。所有参数 是可选的,可以在调用
主题:电子邮件的主题行。 body:正文。这应该是纯文本消息。 from_email:发件人的地址。send()
之前随时设置 方法。fred@example.com
和Fred <fred@example.com>
表格都是合法的。如果省略,DEFAULT_FROM_EMAIL
使用设置。 to:收件人地址的列表或元组。 bcc:发送电子邮件时在“Bcc”标头中使用的地址列表或元组。 连接:电子邮件后端实例。如果要对多条消息使用相同的连接,请使用此参数。如果省略,则 调用send()
时会创建新连接。 附件:要放在邮件中的附件列表。这些可以是email.MIMEBase.MIMEBase
实例,也可以是(filename, content, mimetype)
三元组。 headers:要放在消息上的额外标题字典。键是标题名称,值是标题值。这取决于 调用者以确保标题名称和值的格式正确 一封电子邮件。对应的属性是extra_headers
。 cc:发送电子邮件时在“抄送”标头中使用的收件人地址列表或元组。例如:
email = EmailMessage('Hello', 'Body goes here', 'from@example.com', ['to1@example.com', 'to2@example.com'], ['bcc@example.com'], headers = 'Reply-To': 'another@example.com', 'format': 'flowed')
正如我们从示例中看到的,EmailMessage
也有 headers
参数(字典),根据source code 中的文档字符串,EmailMultiAlternatives
是:
A version of EmailMessage that makes it easy to send multipart/alternative
messages. For example, including text and html versions of the text is
made easier.
因此,如果您不需要特定的内容,EmailMessage
很好,因为目前EmailMultiAlternatives
用于轻松包含文本和 HTML 版本的文本。
【讨论】:
以上是关于将标头添加到 Django EmailMultiAlternatives的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Django 的 CSRF 令牌添加到 jQuery POST 请求的标头?
Django 无效的 HTTP_HOST 标头:'testserver'。您可能需要将 u'testserver' 添加到 ALLOWED_HOSTS