Вставить картинку в электронное письмо - PullRequest
7 голосов
/ 13 октября 2011

В настоящее время у меня есть программа, которая будет случайным образом выбирать цитаты из списка и отправлять их по электронной почте. Сейчас я тоже пытаюсь вставить изображение в электронное письмо. Я столкнулся с проблемой, когда я могу прикрепить письмо, но мои цитаты больше не работают. Я исследовал онлайн, и решения не работают для меня. Обратите внимание, что я использую Python 3.2.2.

Любое руководство будет оценено.

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage

attachment = 'bob.jpg' 

msg = MIMEMultipart()
msg["To"] = to_addr
msg["From"] = from_addr
msg["Subject"] = subject_header

#msgText = MIMEText(<b>%s</b><br><img src="cid:bob.jpg"><br>, 'html') % body

fp = open(attachment, 'rb')
img = MIMEImage(fp.read())
fp.close()

msg.attach(img)

#email_message = '%s\n%s\n%s' % (subject_header, body, img)
email_message = '%s\n%s' % (subject_header, body)

emailRezi = smtplib.SMTP(mail_server, mail_server_port)
emailRezi.set_debuglevel(1)
emailRezi.login(mail_username, mail_password)
emailRezi.sendmail(from_addr, to_addr, email_message)
#emailRezi.sendmail(from_addr, to_addr, msg.as_string())
emailRezi.quit()

Как видно из приведенного выше кода, я пробовал разные способы (ссылаясь на #)

1 Ответ

27 голосов
/ 13 октября 2011

Вы проходите королевскую боль, чтобы создать действительное сообщение MIME в msg, затем отключите его и вместо этого отправите простую строку email_message.

Вероятно, вам следует начать с понимания того, как выглядит правильная структура MIME. Составное сообщение само по себе не имеет никакого содержания, вам нужно добавить текстовую часть, если вы хотите текстовую часть.

Ниже приведена правка вашего скрипта с добавлением недостающих фрагментов. Я не пытался отправить полученное сообщение.

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText  # Added
from email.mime.image import MIMEImage

attachment = 'bob.jpg'

msg = MIMEMultipart()
msg["To"] = to
msg["From"] = from
msg["Subject"] = subject

msgText = MIMEText('<b>%s</b><br><img src="cid:%s"><br>' % (body, attachment), 'html')  
msg.attach(msgText)   # Added, and edited the previous line

fp = open(attachment, 'rb')                                                    
img = MIMEImage(fp.read())
fp.close()
img.add_header('Content-ID', '<{}>'.format(attachment))
msg.attach(img)

print msg.as_string()
exit(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...