Я пытаюсь получить изображения, показанные как часть письма, отправленного с помощью Python. В документах Python есть пример, который не работает.Python 3 EmailMessage html сообщение с изображением
from datetime import datetime
import sys
import smtplib
from email.message import EmailMessage
from email.headerregistry import Address
from email.utils import make_msgid
from email.mime.image import MIMEImage
attachment = '/user/file/test.png'
import email.policy
msg = EmailMessage()
msg['To'] = Address("Srujan", '[email protected]')
msg['From'] = Address("Srujan", '[email protected]')
msg['Subject'] = "Nice message goes with it "+str(datetime.now())
id = make_msgid()
msg.set_type('text/html')
msg.set_content(" This is the Data Message that we want to send")
html_msg = "<br> <b><u> This is the Text .... </u></b><br> <img src='cid:{image_id}' />".format(image_id=id[1:-1])
msg.add_alternative(html_msg, subtype="html")
image_data = open(attachment, "rb")
image_mime = MIMEImage(image_data.read())
image_data.close()
msg.add_attachment(image_mime, cid=id, filename = "myown.png" ,)
try:
with smtplib.SMTP('example.com') as s:
s.ehlo()
s.starttls()
s.ehlo()
s.send_message(msg)
s.close()
print("Email sent!")
except:
print("Unable to send the email. Error: ", sys.exc_info()[0])
raise
Пара вещей, которые я заметил:
To: Srujan < "[email protected]"> От: Srujan < "[email protected]"> Тема: Nice сообщение идет с it 2016-01-21 17: 39: 23.642762 MIME-версия: 1.0 Тип контента: multipart/mixed; border = "=============== 3463325241650937591 =="
- =============== 3463325241650937591 == Тип контента : multipart/alternative; border = "=============== 0739224896516732414 =="
- =============== 0739224896516732414 == Content-Type: текст/равнина; кодировка = "UTF-8" Content-Transfer-Encoding: 7bit
Это сообщение данных, которые мы хотим послать
- =============== 0739224896516732414 == Content-Type: text/html; кодировка = "UTF-8" Content-Transfer-Encoding: 7bit MIME-Version: 1,0
Это текст ....- ========= ====== 0739224896516732414 == -
- =============== 3463325241650937591 == Content-Type: сообщение/rfc822 Content-Transfer-Encoding: 8bit Content-Disposition: вложение; имя файла = "myown.png" Content-ID: < 20160122013923.64205.76661> MIME-Version: 1.0
Content-Type: изображение/PNG MIME-Version: 1.0 Content-Transfer-Encoding: base64
iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAIAAAAVFBUnAAAABmJLR0QA/соды/AP + gvaeTAAAgAElE QVR4nOzdd2BUVfYH8HNfmZJAChAEQ1FAqoKgCAsWLEgTG4gKP11FQNG1AauIgGBXVhRUsCK4i6gI
Теперь прилагаемое сообщение имеет значение два типа содержимого s. Электронная почта приходит только с текстом и без изображения
Я успешно справился с классом MultiPart, но хочу добиться этого с помощью EmailMessage.
Greate, я попробую его :) спасибо тонну. – SrujanSreepathi
Вы можете отправить отчет об ошибке на https://bugs.python.org, если документы ошибочны. – Pedro