Python 发送邮件带图片附件 & 图片与文件字节串互换

  • 使用 smtplib 发送邮件
  • 邮件带有附件,附件为图片
  • 图片作为文件读取并与 PIL.Image 格式互换
from PIL import Image
import io
import numpy as np

import smtplib
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formatdate


title = 'Title'
mail_from = 'test0.163.com'
mail_from_passwd = 'passwd'
mail_to = ['test1.163.com', 'test2.163.com']
mail_cc = ['test3.163.com', 'test4.163.com']
text = 'begin of mail'

msg = MIMEMultipart()
msg['From'] = send_from
msg['To'] = ', '.join(mail_to)
msg['Cc'] = ', '.join(mail_cc)
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = title

msg.attach(MIMEText(text, 'html'))

# read image file as raw data & convert to pillow.Image
img_file_path = '/home/user/Downloads/test_image.jpg'
with open(img_file_path, "rb") as file:
      img = Image.open(io.BytesIO(file.read()))

w, h = img.size
# imgarr = np.asarray(img)
w0 = 200
h0 = int(h*w0/w)
imgrz = img.resize((w0, h0))

# convert pillow.Image to raw data
imgByteArr = io.BytesIO()
imgrz.save(imgByteArr, format='jpeg')
imgByteArr = imgByteArr.getvalue()

# attatch as attatchment
part = MIMEApplication(
    imgByteArr,
    Name='test_image.jpg'
)
part['Content-Disposition'] = 'attachment; filename="test_image.jpg"'
msg.attach(part)

# send email
smtp = smtplib.SMTP('163.com')
smtp.ehlo()
smtp.login(mail_from, mail_from_passwd)
smtp.sendmail(mail_from, mail_to+mail_cc, msg.as_string())
smtp.close()
posted @ 2019-07-13 14:16  keep-minding  阅读(561)  评论(0编辑  收藏  举报