首页 > 编程 > Python > 正文

python3实现带多张图片、附件的邮件发送

2019-11-25 12:01:59
字体:
来源:转载
供稿:网友

本文实例为大家分享了python3实现多张图片附件邮件发送的具体代码,供大家参考,具体内容如下

直接上代码,没有注释!

from email.mime.text import MIMETextfrom email.mime.image import MIMEImagefrom email.mime.multipart import MIMEMultipartfrom email.header import Headerclass Mail(object):  def __init__(self, host, nickname, username, password, postfix):    self.host = host    self.nickname = nickname    self.username = username    self.password = password    self.postfix = postfix  def send_mail(self, to_list, subject, content, cc_list=[], encode='gbk', is_html=True, images=[]):    me = str(Header(self.nickname, encode)) + "<" + self.username + "@" + self.postfix + ">"    msg = MIMEMultipart()    msg['Subject'] = Header(subject, encode)    msg['From'] = me    msg['To'] = ','.join(to_list)    msg['Cc'] = ','.join(cc_list)    if is_html:      mail_msg = ''      for i in range(len(images)):        mail_msg += '<p><img src="cid:image%d" height="240" width="320"></p>' % (i+1)      msg.attach(MIMEText(content + mail_msg, 'html', 'utf-8'))      for i, img_name in enumerate(images):        with open(img_name, 'rb') as fp:          img_data = fp.read()        msg_image = MIMEImage(img_data)        msg_image.add_header('Content-ID', '<image%d>' % (i+1))        msg.attach(msg_image)        # 将图片作为附件        # image = MIMEImage(img_data, _subtype='octet-stream')        # image.add_header('Content-Disposition', 'attachment', filename=images[i])        # msg.attach(image)    else:      msg_content = MIMEText(content, 'plain', encode)      msg.attach(msg_content)    try:      s = smtplib.SMTP()      # s.set_debuglevel(1)      s.connect(self.host)      s.login(self.username, self.password)      s.sendmail(me, to_list + cc_list, msg.as_string())      s.quit()      s.close()      return True    except Exception as e:      print(e)      return Falsedef send_mail(to_list, title, content, cc_list=[], encode='utf-8', is_html=True, images=[]):  content = '<pre>%s</pre>' % content  m = Mail('smtp.163.com', 'TV-APP TEST', 'tvapp_qa', 'ujlnluutpfespgxz', '163.com')  m.send_mail(to_list, title, content, cc_list, encode, is_html, images)if __name__ == '__main__':  images = [    '1.png',    '2.png',    '3.png',    '4.png',  ]  import time  title = 'new images %s' % time.strftime('%H:%M:%S')  content = 'this is attach images %s' % time.time()  send_mail(['x@163.com'], title, content, ['xx@163.com', 'xxx@163.com'], 'utf-8', True, images)

后记

调试发送多张图片的时候遇到的问题:

用for循环生成的mail_msg,不能直接attach,需要和content一起attach

mail_msg = ''for i in range(len(images)):  mail_msg += '<p><img src="cid:image%d" height="240" width="320"></p>' % (i+1)  msg.attach(MIMEText(**content** + mail_msg, 'html', 'utf-8'))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表