Отправка HTML-письма с изображениями с помощью email.mime python
Дано: HTML - файл с привязанными к нему картинками, которые лежат в той же директории.
Надо: отправить письмо так, чтобы оно отображалось у получателя как HTML-страница с картинками на своём месте.
Что я пытался делать: У меня есть код python, который отправляет HTML, но у получателя вместо картинок просто прямоугольники с красными крестиками (нет картинок).
Вот мой код:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.header import Header
def mail_sender(recip, subj, text):
DEFAULT_SMTP_SERVER = '.................'
SENDER = '...................'
RECIPIENT = recip
RECIPIENT2 = '........................'
msg = MIMEMultipart('alternative')
msg['From'] = SENDER
msg['To'] = RECIPIENT
msg['Bcc'] = RECIPIENT2
sub_hed = subj
msg['Subject'] = Header(sub_hed, 'utf-8').encode()
msg.attach(MIMEText(text, 'plain'))
msg.attach(MIMEText(text, 'html'))
message = msg.as_string()
server = smtplib.SMTP(DEFAULT_SMTP_SERVER)
server.sendmail(SENDER, [RECIPIENT], message)
server.sendmail(SENDER, [RECIPIENT2], message)
server.quit()
f = open('TestHTML.html', 'r')
result = f.read()
mail_sender('[email protected]', 'тест', result)
ВОПРОС: Как сделать так, чтобы получатель видел полноценный HTML-шаблон с картинками? Может быть, подход неправильный или что-то надо изменить в коде?
Ответы (1 шт):
Автор решения: Евгений.
→ Ссылка
Решено синтезом строки base64 из картинки:
import base64
with open('images/image009.jpg', 'rb') as fp:
binary_fc = fp.read()
fp.close()
base64_utf8_str = base64.b64encode(binary_fc).decode('utf-8')
ext = 'images/image009.jpg'.split('.')[-1]
dataurl = f'data:image/{ext};base64,{base64_utf8_str}'
print(dataurl)
С последующим вмонтированием в HTML
<img src="data:image/jpg;base64,/9j/4AA...../9k=" width="180" height="50" alt="base64 test">
Теперь картинка интегрирована в код монолитно.