Вставить картинку в электронное письмо
В настоящее время у меня есть программа, которая будет случайным образом выбирать цитаты из списка и отправлять их по электронной почте. Я сейчас пытаюсь вставить изображение в электронное письмо. Я столкнулся с проблемой, когда я могу прикрепить письмо, но мои цитаты больше не работают. Я исследовал онлайн, и решения не работают для меня. Обратите внимание, что я использую 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 ответ
Вы проходите королевскую боль, чтобы создать действительное сообщение 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)
Я редактировал для прикрепления изображения к телу сообщения и шаблону HTML.
import smtplib
from email import encoders
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
strFrom = 'zzzzzz@gmail.com'
strTo = 'xxxxx@gmail.com'
# Create the root message
msgRoot = MIMEMultipart('related')
msgRoot['Subject'] = 'test message'
msgRoot['From'] = strFrom
msgRoot['To'] = strTo
msgRoot['Cc'] =cc
msgRoot.preamble = 'Multi-part message in MIME format.'
msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)
msgText = MIMEText('Alternative plain text message.')
msgAlternative.attach(msgText)
msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image1"><br>KPI-DATA!', 'html')
msgAlternative.attach(msgText)
#Attach Image
fp = open('test.png', 'rb') #Read image
msgImage = MIMEImage(fp.read())
fp.close()
# Define the image's ID as referenced above
msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)
import smtplib
smtp = smtplib.SMTP()
smtp.connect('smtp.gmail.com') #SMTp Server Details
smtp.login('exampleuser', 'examplepass') #Username and Password of Account
smtp.sendmail(strFrom, strTo, msgRoot.as_string())
smtp.quit()