本文实例为大家分享了python3实现多张图片附件邮件发送的具体代码,供大家参考,具体内容如下
直接上代码,没有注释!
- from email.mime.text import MIMEText
- from email.mime.image import MIMEImage
- from email.mime.multipart import MIMEMultipart
- from email.header import Header
-
- class 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 False
-
- def 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'))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。