Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何替换/覆盖EmailMultiAlternations的默认标题_Python_Django_Email Attachments_Amazon Ses_Email Headers - Fatal编程技术网

Python 如何替换/覆盖EmailMultiAlternations的默认标题

Python 如何替换/覆盖EmailMultiAlternations的默认标题,python,django,email-attachments,amazon-ses,email-headers,Python,Django,Email Attachments,Amazon Ses,Email Headers,环境:Ubuntu 18.10、Python 2.7.15、Django 1.11.16 我正试图发送一封包含内联图像的电子邮件。我有以下代码: msg = EmailMultiAlternatives(some_subject, some_body, 'from@some-domain.com', ['to@some@domain']) img_data = open('path/to/image.png', 'rb').read() img = MIMEImage(img_data) ms

环境:Ubuntu 18.10、Python 2.7.15、Django 1.11.16

我正试图发送一封包含内联图像的电子邮件。我有以下代码:

msg = EmailMultiAlternatives(some_subject, some_body, 'from@some-domain.com', ['to@some@domain'])

img_data = open('path/to/image.png', 'rb').read()
img = MIMEImage(img_data)
msg.attach(img)

msg.send()
(我只包含了我认为相关的代码,但我可以根据需要添加更多。)

上述功能正常工作,并且图像在我测试的大多数电子邮件客户端(其中约7个,包括移动、桌面或网络邮件客户端)上正确显示,但有两个例外:Mozilla Thunderbird 60和一些macOS本机电子邮件客户端

在Thunderbird上,图像不会在线显示,而是显示在消息的末尾。在macOS客户端上,图像以内联方式显示,但另外,它也显示在消息的最后

我从另一个电子邮件客户端编写并发送了一条测试消息,其中包含一个内联图像,该图像正确地显示在Thunderbird和macOS上。我将此消息的标题与代码生成的消息的标题进行了比较

我注意到错误消息的
'Content-Type'
设置为
'multipart/mixed'
,而正确显示的消息的标题设置为
'multipart/related'

我将错误消息保存在一个eml文件中,并手动更改该头的值,然后将消息加载到Thunderbird中。信息显示正确,图像位置正确

如果我能将标题设置为正确的值,问题就会得到解决

因此,我的问题是:是否有可能告诉
EmailMultiAlternations
设置
的“内容类型”:“多部分/相关的”
,而不是
的默认值“多部分/混合的”

我尝试像这样添加标题,但不起作用:

msg = EmailMultiAlternatives(some_subject, some_body, 'from@some-domain.com', ['to@some@domain'], headers={'Content-Type' : 'multipart/related'})
我得到以下错误(我使用Amazon SES):


如果我无法修改该标题,您是否建议其他选项?

如果查看源代码,您将看到
EmailMultiAlternations
EmailMessage
的子类,它本身有一个class属性:

mixed_subtype = 'mixed'
因此,如果您创建自己的子类来覆盖此项,您应该可以获得所需的:

class EmailMultiAlternativesRelated(EmailMultiAlternatives):
    mixed_subtype = 'related'
就是这样,现在您只需使用这个新类,它将使用“multipart/related”


\u create_attachments()这正是我需要的!(这里是Django初学者)实际上我没有创建一个新的子类,但是我设置了
msg.mixed_subtype='related'
,它完成了任务。但你的回答肯定让我走上了正确的轨道。万分感谢!如果在代码中发送更多电子邮件,那么创建子类可以更容易地重用。但是,直接在实例上设置变量也是有效的。
class EmailMultiAlternativesRelated(EmailMultiAlternatives):
    mixed_subtype = 'related'