gpt4 book ai didi

python - 如何替换/覆盖 EmailMultiAlternatives 的默认 header

转载 作者:行者123 更新时间:2023-12-01 07:52:29 25 4
gpt4 key购买 nike

环境: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 个,移动、桌面或网络邮件客户端)上正确显示,但有两个异常(exception):Mozilla Thunderbird 60 和一些 macOS native 电子邮件客户端。

在 Thunderbird 上,图像不会内嵌显示,而是显示在消息的最后。在 macOS 客户端上,图像会内联显示,但此外它也会显示在消息的最后。

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

我注意到错误消息的 'Content-Type' 设置为 'multipart/mixed',而正确显示的消息的相同 header 设置为 >'多部分/相关'

我将错误消息保存在 eml 文件中,并手动更改了该 header 的值,然后在 Thunderbird 中加载该消息。消息已正确显示并且图像位于正确的位置。

如果我可以将该 header 设置为正确的值,问题就可以解决。

所以,我的问题是:是否有可能告诉 EmailMultiAlternatives 设置 'Content-Type' : 'multipart/lated' 而不是默认值 '多部分/混合'

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

msg = EmailMultiAlternatives(some_subject, some_body, 'from@some-domain.com', ['to@some@domain'], headers={'Content-Type' : 'multipart/related'})

我收到以下错误(我使用 Amazon SES):

400 Bad Request
<ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
<Error>
<Type>Sender</Type>
<Code>InvalidParameterValue</Code>
<Message>Duplicate header 'Content-Type'.</Message>
</Error>
<RequestId>xxxxxxxxxx</RequestId>
</ErrorResponse>

如果我无法修改该 header ,您是否建议任何替代方案?

最佳答案

如果您查看源代码,您会发现 EmailMultiAlternativesEmailMessage 的子类,它本身具有一个类属性:

mixed_subtype = 'mixed'

因此,如果您创建自己的子类来覆盖它,您应该得到您需要的内容:

class EmailMultiAlternativesRelated(EmailMultiAlternatives):
mixed_subtype = 'related'

就是这样,现在你只需使用这个新类,它就会使用“multipart/lated”。

(_create_attachments() 方法将此子类型传递给 python 的 SafeMIMEMultipart,后者为每个附件创建实际的 header 。)

关于python - 如何替换/覆盖 EmailMultiAlternatives 的默认 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56134697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com