将标头添加到 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 使用以下参数初始化 (如果使用位置参数,则按给定顺序)。所有参数 是可选的,可以在调用 send() 之前随时设置 方法。

主题:电子邮件的主题行。 body:正文。这应该是纯文本消息。 from_email:发件人的地址。 fred@example.comFred <fred@example.com> 表格都是合法的。如果省略,DEFAULT_FROM_EMAIL 使用设置。 to:收件人地址的列表或元组。 bcc:发送电子邮件时在“Bcc”标头中使用的地址列表或元组。 连接:电子邮件后端实例。如果要对多条消息使用相同的连接,请使用此参数。如果省略,则 调用 send() 时会创建新连接。 附件:要放在邮件中的附件列表。这些可以是 email.MIMEBase.MIMEBase 实例,也可以是 (filename, content, mimetype) 三元组。 headers:要放在消息上的额外标题字典。键是标题名称,值是标题值。这取决于 调用者以确保标题名称和值的格式正确 一封电子邮件。对应的属性是extra_headerscc:发送电子邮件时在“抄送”标头中使用的收件人地址列表或元组。

例如:

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-添加到服务器标头(CORS)

Django 无效的 HTTP_HOST 标头:'testserver'。您可能需要将 u'testserver' 添加到 ALLOWED_HOSTS

django - 将标头从管理员复制到所有模板

将 CORS 添加到 ajax 标头时的 a.toLowerCase

Django cors 标头和服务器错误