html - EmailMultiAlternatives 在 django 中发送带有图像的邮件时添加 3D

标签 html django image email attachment

我正在使用 EmailMultiAlternatives 类通过 django 发送文本和 html 邮件。 在使用一些虚拟代码进行测试时,我想添加带有一些文本的图像。

msg = EmailMultiAlternatives('My subject','some text here', '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f096829f9db0949f9d91999ede939f9d" rel="noreferrer noopener nofollow">[email protected]</a>', ['to@my_domain.com'])
msg.attach_alternative('<p>here is what I was talking about</p> <img src="logo.png" alt="logo_here" /> <div>You see???</div>', 'text/html')
msg.attach_file('/var/my_site/static/images/logo.png')
msg.send()

问题是在电子邮件客户端上图像未显示...

查看原始电子邮件,我发现了这一点:

--===============1013820581535380480==
Content-Type: text/html; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

<p>here is what I was talking about</p> <img src=3D"logo.png" alt=3D"logo_h=
ere" /> <div>You see???</div>
--===============1013820581535380480==--

有人知道我做错了什么吗?

谢谢!

编辑:我可以设法将图像嵌入到 html 邮件中。看来 EmailMultiAlternatives 有一个可以接受 MimeImage 对象的附加方法。实际上它可以接受任何从 MimeBase 继承的东西。

fp = open('test.jpg', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()

mimeImage = MimeImage(fp.read())
mimeImage.add_header('Content-ID', '<logo.png>')
msg.attach(mimeImage)
msg.send()

最佳答案

我遇到了同样的问题,这是我发现的:

首先,免责声明。我对电子邮件标准了解不多。这是我在搜索、阅读和实验后发现的。据我所知,它有效。

1) 图像不显示的问题是因为 Django 中的 EmailMessage(和 EmailMultiAlternatives)类对消息使用“multipart/mixed”内容类型,而实际上您需要“multipart/related”。 对我有用的是:

msg = EmailMultiAlternatives()
msg.mixed_subtype = 'related'

就是这样!

2) 3D 显示问题不会影响您的消息。我认为它是“引用的可打印”规范的一部分。如果您不喜欢它并且更喜欢 8 位或 7 位,请在文件顶部尝试以下内容:

from email import Charset
# Due to http://code.djangoproject.com/ticket/11212
Charset.add_charset('utf-8',Charset.SHORTEST,None,'utf-8')

正如评论所暗示的,我从 django 票证中得到了这个。

我知道这个问题相当老了,但没有任何回复令我满意,并且是谷歌搜索中出现的关于此问题的唯一答案。

关于html - EmailMultiAlternatives 在 django 中发送带有图像的邮件时添加 3D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1598164/

相关文章:

javascript - Qt WebKit 和 HTML5 地理定位

image - AEM - 如何以编程方式上传图像

python - Django 自动选择多选字段中的空值

django - 单个网站的 DNS_PROBE_FINISHED_NXDOMAIN

html - 使用CSS将图像位置链接到另一个图像

javascript - 单击图像时打开窗口,单击时关闭新窗口

css - HTML5 视频 - 后备链接图像

javascript - HTML 页面被添加到 iFrame 中

javascript - 如何在 CSS 和 Javascript 中创建一个带有分隔边框的圆圈?

javascript - 如何处理 DjangoCMS i18n URL (/en/my_page,/fr/my_page...) 和 AngularJS?