Не удается отобразить встроенное изображение в электронном письме в Outlook 2013, отправленном с использованием python smtplib/email

Я посмотрел на несколько других сообщений, в том числе:

Вставить картинку в электронное письмо

Отправка составных электронных писем в формате html, содержащих встроенные изображения

создание шаблона электронной почты MIME с изображениями для отправки с помощью python / django

Они, а также документы по питону для smtplib и электронной почты приблизили меня. Я использую код ниже, чтобы создать электронное письмо с простым jpg, встроенным в него. Если я отправлю электронное письмо на 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. Из чтения, которое я делал и просматривал источник полученного электронного письма, выясняется, что Outlook не знает, где найти изображение. С этим письмом также не связано никаких вложений. Ниже приведено то, что я получаю, когда щелкаю правой кнопкой мыши по электронной почте и просматриваю источник.

<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 для просмотра, перенаправленное сообщение отображается нормально.

1 ответ

Решение

РЕДАКТИРОВАТЬ 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

Другие вопросы по тегам