简体   繁体   English

无法在使用 python smtplib/电子邮件发送的 outlook 2013 中的 email 中显示嵌入图像

[英]Can't display an embedded image in an email in outlook 2013 sent using using python smtplib/email

I have looked at several other posts including:我看过其他几个帖子,包括:

Embed picture in email 在 email 中嵌入图片

Sending Multipart html emails which contain embedded images 发送包含嵌入图像的多部分 html 电子邮件

creating a MIME email template with images to send with python / django 创建一个 MIME email 模板,其中包含要与 python / django 一起发送的图像

These along with the python docs for smtplib and email have gotten me close.这些以及用于 smtplib 和 email 的 python 文档让我很接近。 I am using the code below to create an email with a simple jpg embedded in it.我正在使用下面的代码创建一个 email,其中嵌入了一个简单的 jpg。 If I send the email to gmail it will display the embedded image fine but outlook 2013 will not.如果我将 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()

I have checked all the download and security settings in Outlook that I can think of and they are fine.我已经检查了 Outlook 中我能想到的所有下载和安全设置,它们都很好。 I have also added the sender to the safe-sender's list.我还将发件人添加到安全发件人列表中。 I am able to receive other emails created with embedded images using conventional tools in outlook fine.我可以使用 outlook 中的常规工具接收使用嵌入图像创建的其他电子邮件。 From the reading I have been doing and looking at the source of the received email it appears that outlook doesn't know where to find the image.从我一直在做的阅读和查看收到的 email 的来源来看,outlook 似乎不知道在哪里可以找到图像。 There are no attachments associated with this email either.也没有与此 email 关联的附件。 Below is what I get when I right-click on the email and view the source.下面是我右键单击 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>

I am currently thinking it has something to do with either the content type or I just plain screwed up the code.我目前认为这与内容类型有关,或者我只是搞砸了代码。 I think the code is fine as gmail displays the image ok and when I forward it from gmail to outlook the forwarded message is displayed fine.我认为代码很好,因为 gmail 显示图像正常,当我将其从 gmail 转发到 outlook 时,转发的消息显示正常。

EDIT 2: 编辑2:

Try first without the simple text version: 首先尝试没有简单的文本版本:

Content-Type: multipart/related;
    boundary="----=_NextPart_000_0009_01CEC44B.4C788080"

When this shows the image then try the following and putting the elements into an alternative part like this: 当这显示图像时,请尝试以下操作并将元素放入另一个部分,如下所示:

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--

At the moment the sourcecode shows an email like this: 目前,源代码显示如下电子邮件:

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==--

EDIT 1: 编辑1:

This is what an Email looks like that works: 这就是电子邮件的外观:

...
<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 ....

I see a difference: Content-ID - an uppercase D 我看到了一个区别: Content-ID - 一个大写的D

There's a really good post with multiple solutions to this problem here .这里有一个非常好的帖子,有多种解决这个问题方法。 I was able to send an email with HTML, an Excel attachment, and an embedded images.我能够发送带有 HTML、Excel 附件和嵌入图像的 email。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM