Python: отправка SMTP электронной почты в формате HTML, но изображения не загружены - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь отправить электронное письмо из моего приложения на Python. У меня есть код, который отправляет электронную почту SMTP с включенным кодом HTML. У меня есть мой HTML-код в TXT-файле, который работает хорошо, если я запустил его на локальном хосте в качестве страницы, все картинки отображаются. Также у меня есть все файлы в одном каталоге. Мне нужен следующий формат:

Нормальный формат

Формат, который я получаю

Эта строка является одной изимпорт изображений в HTML

<!--[if mso]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr style="line-height:0px"><td style="padding-right: 0px;padding-left: 0px;" align="center"><![endif]--><img align="center" alt="server" border="0" class="center fixedwidth" src="server.png" style="text-decoration: none; -ms-interpolation-mode: bicubic; border: 0; height: auto; width: 100%; max-width: 177px; display: block;" title="Image" width="177"/>

with open('messages.txt', mode = 'r' , encoding= 'UTF-8') as oap:
        z = oap.read()
    time.sleep(3)
    message.add_alternative(f"{z}", subtype = 'html')

С помощью этого кода я открываю и читаю файл, после его завершения я отправляю его через SMTP

Я также попытался изменить расположение изображения на это- C: \ Users \ DzITC \ Desktop \ parking-app \ server.png

После изменения в Интернете загружается изображение, но в python нет.

Проверка электронной почты

1 Ответ

0 голосов
/ 12 октября 2019

Использование пути файловой системы в качестве src img в электронном письме не будет работать. Один из способов включить изображение - указать идентификатор контента как src: <img src="cid:some-id">. Идентификатор содержимого должен соответствовать спецификации в rfc2392 : пакет электронной почты Python может генерировать соответствующий идентификатор.

from email.message import EmailMessage
from email.utils import make_msgid


html = """
<!-- example markup - add missing html, head, body etc tags -->
<p>Hello</p>
<!-- Use a format string place holder for the content id --> 
<img alt="My image" src="cid:{image_cid}"/>
"""

# Create a message
msg = EmailMessage()

# Create a content id for the image
image_cid = make_msgid()

# Add the html to the message, replacing the placeholder with the image id
# (the '<' and '>' characters at the start and end of the id must be stripped)
msg.add_alternative(html.format(image_cid=image_cid[1:-1], subtype='html'))

# Add the image to the message
with open('myimage.png', 'rb') as f:
    img = f.read()
    msg.add_related(img, 'image', 'png', cid=image_cid)
...