[英]How to send email with embedded image file in Python without using smtplib?
[英]Can't display an embedded image in an email in outlook 2013 sent using using python smtplib/email
我看过其他几个帖子,包括:
创建一个 MIME email 模板,其中包含要与 python / django 一起发送的图像
这些以及用于 smtplib 和 email 的 python 文档让我很接近。 我正在使用下面的代码创建一个 email,其中嵌入了一个简单的 jpg。 如果我将 email 发送到 gmail 它将很好地显示嵌入的图像,但 outlook 2013 不会。
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
From = ''
To = ''
msg = MIMEMultipart()
msg['Subject'] = 'image test message'
msg['From'] = From
msg['To'] = To
text = 'This is sample text from me'
html = '''
<html>
<head>
<title> this is a test title </title>
</head>
<body>
<p> Test me <br>
Another line <br>
This is the image you were looking for <img src="cid:test_image"><br>
This will teach you not to click on links in strange <a href="http://purple.com">emails</a>
</p>
</body>
</html>
'''
part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')
msg.attach(part1)
msg.attach(part2)
img_data = open('image.jpg', 'rb').read()
img = MIMEImage(img_data, 'jpeg')
img.add_header('Content-Id', '<test_image>')
msg.attach(img)
s = smtplib.SMTP('localhost')
s.sendmail(From, To, msg.as_string())
s.quit()
我已经检查了 Outlook 中我能想到的所有下载和安全设置,它们都很好。 我还将发件人添加到安全发件人列表中。 我可以使用 outlook 中的常规工具接收使用嵌入图像创建的其他电子邮件。 从我一直在做的阅读和查看收到的 email 的来源来看,outlook 似乎不知道在哪里可以找到图像。 也没有与此 email 关联的附件。 下面是我右键单击 email 并查看源代码时得到的结果。
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii"><title> this is a test title </title>
</head>
<body>
<p> Test me <br>
Another line <br>
This is the image you were looking for <img src="cid:test_image"><br>
This will teach you not to click on links in strange <a href="http://purple.com">emails</a>
</p>
</body>
</html>
我目前认为这与内容类型有关,或者我只是搞砸了代码。 我认为代码很好,因为 gmail 显示图像正常,当我将其从 gmail 转发到 outlook 时,转发的消息显示正常。
编辑2:
首先尝试没有简单的文本版本:
Content-Type: multipart/related;
boundary="----=_NextPart_000_0009_01CEC44B.4C788080"
当这显示图像时,请尝试以下操作并将元素放入另一个部分,如下所示:
Subject: ...
From: ...
To: ...
Content-Type: multipart/related;
type="multipart/alternative";
boundary="----=_NextPart_000_0009_01CEC44B.4C788080"
------=_NextPart_000_0009_01CEC44B.4C788080
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_000A_01CEC44B.4C788080"
------=_NextPart_001_000A_01CEC44B.4C788080
Content-Type: text/plain;
charset="ISO-8859-15"
Content-Transfer-Encoding: quoted-printable
My Simple text
------=_NextPart_001_000A_01CEC44B.4C788080
Content-Type: text/html;
charset="ISO-8859-15"
Content-Transfer-Encoding: quoted-printable
My HTML Text
------=_NextPart_001_000A_01CEC44B.4C788080--
------=_NextPart_000_0009_01CEC44B.4C788080
Content-Type: image/png;
name="caddiigg.png"
Content-Transfer-Encoding: base64
Content-ID: <38F81D2D49CB42B2AD8F93F5CF01BCA1@SKNB>
iVBORw0KGgoAAAANSUhEUgAAAxcAAAH0CAIAAADADUduAAAgAElEQVR4nEy8adP02H3ex0+TFymZ
5JAzw01OpazZOVS2SjkvYpHzzELasiuOK4tLkhVJMcWZu7E0loN96x07cPZzsPR2P8+QlPOh8gL9
DFn1L
------=_NextPart_000_0009_01CEC44B.4C788080--
目前,源代码显示如下电子邮件:
Content-Type: multipart/mixed; boundary="===============0661849094=="
MIME-Version: 1.0
Subject: image test message
From:
To:
--===============0661849094==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
This is sample text from me
--===============0661849094==
Content-Type: text/html; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
<html>
<head>
<title> this is a test title </title>
</head>
<body>
<p> Test me <br>
Another line <br>
This is the image you were looking for <img src="cid:test_image"><br>
This will teach you not to click on links in strange <a href="http://purple.com">emails</a>
</p>
</body>
</html>
--===============0661849094==
Content-Type: image/jpeg
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Id: <test_image>
YmxhYmxh
--===============0661849094==--
编辑1:
这就是电子邮件的外观:
...
<BR><IMG alt=3D""=20
src=3D"cid:38F81D2D49CB42B2AD8F93F5CF01BCA1@SKNB">
...
------=_NextPart_000_0009_01CEC44B.4C788080
Content-Type: image/png;
name="caddiigg.png"
Content-Transfer-Encoding: base64
Content-ID: <38F81D2D49CB42B2AD8F93F5CF01BCA1@SKNB>
iVBORw0KGgoAAAANSUhEUg ....
我看到了一个区别: Content-ID
- 一个大写的D
这里有一个非常好的帖子,有多种解决这个问题的方法。 我能够发送带有 HTML、Excel 附件和嵌入图像的 email。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.