Python-发邮件框架【带图片和附件】
普通发件框架
#!/usr/bin/env python # -*- coding:utf-8 –*- import smtplib from email.mime.text import MIMEText def sender_mail(content): mail_host = 'mail.zjt.com' mail_user = 'zhoujt' # 发件邮箱前缀 mail_pass = 'password' sender = 'zhoujt1022@zjt.com' # 发件邮箱 receivers = ['xiaobuivr@126.com'] # 收件人 message = MIMEText(content, 'plain', 'utf-8') message['Subject'] = '小布测试发件' message['From'] = sender message['To'] = receivers[0] try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) # 端口加密 smtpObj.login(mail_user, mail_pass) smtpObj.sendmail( sender, receivers, message.as_string()) smtpObj.quit() print('success') except smtplib.SMTPException as e: print('error', e) if __name__ == '__main__': info = 'test send mail' sender_mail(content=info)
带附件框架
#!/usr/bin/env python # -*- coding:utf-8 –*- import smtplib 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 # 邮箱地址 mail.163.com 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, 666) 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 nickname = '发件人姓名' email = 'zhoujt' password = 'yourpasswd' m = Mail('mail.zjt.com', nickname, email, password, 'zjt.com') m.send_mail(to_list, title, content, cc_list, encode, is_html, images) if __name__ == '__main__': images = [ 't_image/docker-k8s.png', 't_image/kubernetes.png' ] import time title = '发送图片 %s' % time.strftime('%H:%M:%S') # content = 'this is attach images %s' % time.time() content = '新增图片' try: send_mail(['zhoujt@zjt.com'], title, content, [], 'utf-8', True, images) # 收件人zhoujt 标题title 内容content 抄送[] 字符 网页版=True 发送图片 print('successful') except smtplib.SMTPException as e: print('error\n', e)