Как отправлять письма в python

У меня есть этот скрипт Python, который отправляет электронную почту с помощью модуля smtplib.

#! /usr/bin/python

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

from1 = "root"
to = "[email protected]"
subject = "test mail"

msg = MIMEMultipart()
msg['From'] = from1
msg['To'] = to
msg['Subject'] = subject

text = """Hi,
This is test messgae"""

html = """\
<html>
  <head></head>
  <body>
    <p>Hi!<br>
       How are you?<br>
       Here is the <a href="http://www.python.org">link</a> you wanted.
    </p>
  </body>
</html>
"""

fi = open("dragon.jpg", 'rb')
img = MIMEImage(fi.read())
fi.close()
msg.attach(img)

part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')
msg.attach(part1)
msg.attach(part2)

smtp_obj = smtplib.SMTP('rinacac-test.egi.ericsson.com')
smtp_obj.sendmail(from1, to, msg.as_string())
smtp_obj.quit()

Скрипт работает, но мой html контент 'html' и изображение 'dragon.jpg' отображаются в виде вложений. Я хочу, чтобы они отображались как содержимое моей почты, а не как вложения. Пожалуйста помоги

Обновление: я до сих пор не могу понять, какую роль здесь играет Multipart / альтернатива. Более того, по более ранней ссылке, которую вы указали ниже, строка не отображается в почте.

msgText = MIMEText('This is the alternative plain text message.')
msgAlternative.attach(msgText)

Во-вторых, объект "msgText", содержащий строку html, присоединяется с помощью "msgAlnernative".

msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image1"><br>Nifty!', 'html')
msgAlnernative.attach(msgText)

но объект "msgImage", который читает изображение, прикреплен с "msgRoot". Почему это так..

msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)

Я не мог найти какой-либо справочный документ на MIMEMultipart/related и альтернативный. Пожалуйста помоги

1 ответ

Решение

Я думаю, что это решит вашу проблему Как отображать base64 изображения в HTML

Если ваш mailprovider поддерживает HTML-теги в электронных письмах

Извините, так как это конкретный вопрос по Python, и примеры в ссылке, кажется, php здесь решение Python

import base64
img = 'test.jpg'
with open(img, 'rb') as imgfile:
    img64 = base64.encodestring(imgfile.read())

###

html = """\
<html>
  <head></head>
  <body>
    <p>Hi!<br>
       How are you?<br>
       Here is the <a href="http://www.python.org">link</a> you wanted.
    </p>
    <img width="160" height="160" alt="tick" src="data:image/jpg;base64,{0}">
  </body>
</html>
""".format(img64)

###
Другие вопросы по тегам