Html EmailMultiAlternations在django中发送带有图像的邮件时添加3D

Html EmailMultiAlternations在django中发送带有图像的邮件时添加3D,html,django,image,email,attachment,Html,Django,Image,Email,Attachment,我使用EmailMultiAlternations类通过django发送文本和html邮件。 在使用一些伪代码进行测试时,我想添加一个带有一些文本的图像 msg = EmailMultiAlternatives('My subject','some text here', 'from@domain.com', ['to@my_domain.com']) msg.attach_alternative('<p>here is what I was talking about</p&

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

msg = EmailMultiAlternatives('My subject','some text here', 'from@domain.com', ['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()
msg=EmailMultiAlternations('My subject','some text here','from@domain.com', ['to@my_domain.com'])
msg.attach_alternative(“这是我刚才说的内容,你看?”,“text/html”)
msg.attach_文件('/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==--
-->===================1013820581535380480==
内容类型:text/html;charset=“utf-8”
MIME版本:1.0
内容传输编码:引用可打印
这就是我刚才说的

你知道吗??? --===============1013820581535380480==--
有人知道我做错了什么吗

谢谢

编辑:我可以设法将图像嵌入html邮件中。EmailMultiAlternations似乎有一个attach方法,可以接受一个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()
fp=open('test.jpg','rb')
msgImage=MIMEImage(fp.read())
fp.close()
mimeImage=mimeImage(fp.read())
mimeImage.add_头('Content-ID','')
附加消息(mimeImage)
msg.send()

这只是部分解决方案。当我在thunderbird中创建电子邮件并嵌入图像时(在查看邮件时可见),源代码如下所示:

--------------070800070205000904000708
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000000">
<img alt="asdsa" src="cid:part1.08020903.07040100@grsites.com"
 height="38" width="150"><br>
</body>   
</html>

--------------070800070205000904000708
Content-Type: image/jpeg;
 name="added.jpg"
Content-Transfer-Encoding: base64
Content-ID: <part1.08020903.07040100@grsites.com>
Content-Disposition: inline;
 filename="added.jpg"
------0708000702050009040000708
内容类型:text/html;字符集=UTF-8
内容传输编码:7bit

--------------070800070205000904000708 内容类型:图像/jpeg; name=“added.jpg” 内容传输编码:base64 内容ID: 内容配置:内联; filename=“added.jpg”
接下来是图像的内容。图像标记中的URL必须是附加图像的内容ID。我只是不知道如何具体说明


编辑:您似乎可以使用标准库中的电子邮件模块而不是Django的EmailMultiAlternatives来完成这项工作。请参见此处:

我也遇到了同样的问题,以下是我的发现:

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

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票上得到的


我知道这个问题已经很老了,但是没有让我满意的答案,这是唯一一个出现在谷歌搜索中的问题。

这为我解决了这个问题!只是一个小的输入错误,应该是msg.mixed_subtype='related'而不是relative。。。