Python: отправляем электронные письма с изображениями
Чтобы отправлять электронные письма с изображениями, нужно использовать MimeMultipart
:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
msg = MIMEMultipart('alternative')
msg['Subject'] = "subject"
msg['From'] = from_addr
msg['To'] = to_addr
part = MIMEImage(open('/path/to/image', 'rb').read())
s = smtplib.SMTP('localhost')
s.sendmail(from_addr, to_addr, msg.as_string())
s.quit()
Так мы создали электронное письмо с пустым телом и изображением.
Чтобы изображение было частью текста электронного письма, нужно написать текст HTML, который ссылается на это изображение:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
msg = MIMEMultipart('alternative')
msg['Subject'] = "subject
msg['From'] = from_addr
msg['To'] = to_addr
text = MIMEText('<img src="cid:image1">', 'html')
msg.attach(text)
image = MIMEImage(open('/path/to/image', 'rb').read())
# Define the image's ID as referenced in the HTML body above
image.add_header('Content-ID', '<image1>')
msg.attach(image)
s = smtplib.SMTP('localhost')
s.sendmail(from_addr, to_addr, msg.as_string())
s.quit()
Хитрость в том, чтобы определить изображение с определенным идентификатором содержимого и сделать его единственным элементом в теле HTML: теперь у вас есть электронное письмо, содержащее изображение в качестве единственного содержимого тела, встроенного в него.
+1
1
+1
1
+1
+1
+1
Добавьте скриншота для примера