Как отправлять письма в 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)
###