Python 如何替换/覆盖EmailMultiAlternations的默认标题
环境:Ubuntu 18.10、Python 2.7.15、Django 1.11.16 我正试图发送一封包含内联图像的电子邮件。我有以下代码: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
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'