s41blizzard
@s41blizzard

Как добавить картинку из sqlite3 в тело письма?

Есть вот такой код
import sqlite3
import smtplib

conn = sqlite3.connect('employees.sqlite')
cursor = conn.cursor()
cursor.execute(
    "SELECT id, LastName, FirstName, Photo from employees WHERE strftime('%m',DOB) = strftime('%m','now') AND  strftime('%d','now') = strftime('%d', DOB)")

results = cursor.fetchall()

conn.close()
smtpObj = smtplib.SMTP('smtp.gmail.com', 587)
smtpObj.starttls()
smtpObj.login('**********@gmail.com', '**********')
for empl in results:
    subject = "День рождения сотрудника"
    body = "Поздавляем сотрудника " + empl[1] + " " + empl[2] + " с Днем Рождения!"
    message = 'Subject: {}\n\n{}'.format(subject, body)

    text_encoded = message.encode('utf-8').strip()
    smtpObj.sendmail("pochta@gmail.com", "pochta@mail.ru", text_encoded)

В поле "Photo" хранится картинка. По запросу я ее получаю в виде двоичных данных.
Как мне эти двоичные данные преобразовать обратно в картинку и положить ее в тело письма, которое ниже в коде?
Нашел, что преобразовать обратно в картинку можно с помощью pickle, но как в моем случае это сделать, пока не понял.
  • Вопрос задан
  • 229 просмотров
Решения вопроса 1
st0ne_c0ld
@st0ne_c0ld
Конструировать письмо руками не обязательно, можно взять модуль email и пример из документации:
docs.python.org/3/library/email.examples.html

или попробовать так:

# your code above...
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
msg = MIMEMultipart()

for empl in results:
    subject = "День рождения сотрудника"
    body = "Поздавляем сотрудника " + empl[1] + " " + empl[2] + " с Днем Рождения!"
    attach = results[3]
    msg['Subject'] = subject
    msg['From'] = 'pochta@gmail.com'
    msg['To'] = 'pochta@mail.ru'
    #
    text = MIMEText(body.encode('utf-8').strip())
    msg.attach(text)
    image = MIMEImage(img_data, attach)
    msg.attach(image)
    smtpObj.sendmail(msg['From'],msg['To'],msg.as_string())

smtpObj.quit()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы