2015-03-31 36 views
0

我开发了一个Django应用程序,可以向不同大学的研究人员发送电子邮件并帮助他们进行研究。我使用Litmus测试了电子邮件,所有电子邮件都通过了所有测试,并完全在不同平台上显示。我也想让那些拥有旧浏览器的人能够看到电子邮件的内容。这就是为什么我使用EmailMultiAlternatives发送文本内容和替代html内容。但是,在我测试电子邮件的其中一所大学中,每个人都收到了不完整的电子邮件。另外在另一所大学,他们收到了带有虚线的电子邮件。这是非常有问题的情况下,他们看到破碎的超链接。Django发送的电子邮件中的部分线和断行

该问题与在this Stackoverflow page中解释的电子邮件行中的78个字符限制有关。

然而,在Django EmailMultiAlternatives文件,没有什么有关如何添加标题,如“格式化”或“回复”在EmailMultiAlternatives。我花了一段时间才弄明白,我正在发这篇文章来帮助其他人节省时间。

正如您在django的源代码中看到的,EmailMultiAlternatives继承自EmailMessage,因此它们在init构造函数中使用相同的参数。通过这种方式,我们可以添加标题,如:

msg = EmailMultiAlternatives(subject, message, from_email, to_list, headers={'Reply-To': "[email protected]", 'format': 'flowed'}) 
+0

考虑取消该链接。即使StackOverflow链接也可以随时间而打破。谢谢 – MickyD 2015-03-31 04:02:28

+1

清理格式化 – 2015-03-31 04:06:29

+1

您可以将您的文章转换为问题,自己回答并接受您的回答。这样,很明显,问题已经解决,而不是永远悬而未决的问题。 – 2015-03-31 04:14:15

回答

1

然而,Django的EmailMultiAlternatives文档中,有 任何关于如何添加标题,如“格式”或“回复”在 EmailMultiAlternatives。

其实这个文件很清楚。如果你看一下EmailMessage class documentation,它有以下几点:

:额外的头部的字典穿上消息。关键字是标题名称,值是标题值。这取决于 调用者确保标头名称和值的电子邮件地址格式为 。相应的属性是extra_headers。

再往同一页它指出的:

发送替代内容类型

它可以是有用的,包括在 电子邮件内容的多个版本;经典示例是发送 消息的文本和HTML版本。使用Django的电子邮件库,您可以使用EmailMultiAlternatives类来执行此操作。 EmailMessage的这个子类有一个 attach_alternative()方法用于在邮件中包含 邮件正文的额外版本。 所有其他方法(包括类 初始化)都直接从EmailMessage继承。

所以,从这里它清楚地表明,你可以在EmailMultiAlternatives使用headers,因为它只是一个抽象薄薄从主EmailMessage类。

+0

你说得对。这是我的错误,我没有阅读整个文件。你知道,当我在寻找一个解决方案时,我通常不会从文档的开始到结束阅读。有时它可以帮助我更快地解决问题,有时它也是有问题的。我以为别人可能会遇到这样的问题。这就是我发布它的原因。如果您认为没有必要,我们可以删除该帖子。 – 1man 2015-03-31 04:51:35