今天对python记录日志和发邮件两个常用功能做了封装
因为这两个是开发中经常会用到的功能,所以今天就做了简单的封装,下面是封装的代码。。。
1 import logging 2 3 class log(object): 4 5 def __init__(self): 6 # 定义handler的输出格式 7 self.formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 8 # 创建一个logger 9 self.logger = logging.getLogger('run_logger') 10 self.logger.setLevel(logging.DEBUG)#定义日志级别 11 self.ch = logging.StreamHandler() 12 self.ch.setLevel(logging.DEBUG)#定义日志级别 13 self.fh = logging.FileHandler('test.log') 14 self.fh.setLevel(logging.DEBUG)#定义日志级别 15 16 def Console_enter_info(self):# 再创建一个handler,用于输出到控制台 17 #ch = logging.StreamHandler() 18 #ch.setLevel(logging.DEBUG) 19 self.ch.setFormatter(self.formatter) 20 self.logger.addHandler(self.ch) 21 self.logger.info(99999) 22 23 def Console_enter_error(self):# 再创建一个handler,用于输出到控制台 24 #ch = logging.StreamHandler() 25 #ch.setLevel(logging.DEBUG) 26 self.ch.setFormatter(self.formatter) 27 self.logger.addHandler(self.ch) 28 self.logger.error(99999) 29 30 31 def File_enter_info(self):# 创建一个handler,用于写入日志文件 32 self.fh.setFormatter(self.formatter) 33 self.logger.addHandler(self.fh) 34 self.logger.info('this is info') 35 36 def File_enter_error(self):# 创建一个handler,用于写入日志文件 37 self.fh.setFormatter(self.formatter) 38 self.logger.addHandler(self.fh) 39 self.logger.error('this is error')
下面是发邮件功能的封装:
1 from email import encoders 2 from email.header import Header 3 from email.mime.text import MIMEText 4 from email.utils import parseaddr, formataddr 5 from email.mime.multipart import MIMEMultipart 6 import smtplib,os 7 8 class Send_email(object): 9 10 def __init__(self,username,password,title,content,send_email_host,Addressee_email,port=25): 11 try: 12 self.username = username 13 self.password = password 14 self.title = title 15 self.content = content 16 self.send_email_host = send_email_host 17 self.Addressee_email = Addressee_email 18 self.port = int(port) 19 except Exception as e: 20 print('eroor:',e) 21 22 def sendlogin_email(self): 23 24 msg = MIMEText(self.content) # 邮件内容 25 msg['Subject'] = self.title # 邮件主题 26 msg['From'] = self.username # 发送者账号 27 msg['To'] = self.Addressee_email # 接收者账号列表 28 smtp = smtplib.SMTP(self.send_email_host, port=self.port) # 连接邮箱,传入邮箱地址,和端口号,smtp的端口号是25 29 smtp.login(self.username, self.password) # 发送者的邮箱账号,密码 30 smtp.sendmail(self.username, self.Addressee_email, msg.as_string()) 31 32 def __del__(self): 33 self.smtp.quit()
1 class SendMail(object): 2 def __init__(self,username,passwd,recv,title,content, 3 file=None, 4 email_host='smtp.163.com',port=25): 5 self.username = username 6 self.passwd = passwd 7 self.recv = recv 8 self.title = title 9 self.content = content 10 self.file = file 11 self.email_host = email_host 12 self.port = port 13 def send_mail(self): 14 msg = MIMEMultipart() 15 #发送内容的对象 16 if self.file:#处理附件的 17 att = MIMEText(open(self.file).read()) 18 att["Content-Type"] = 'application/octet-stream' 19 att["Content-Disposition"] = 'attachment; filename="%s"'%self.file 20 msg.attach(att) 21 msg.attach(MIMEText(self.content))#邮件正文的内容 22 msg['Subject'] = self.title # 邮件主题 23 msg['From'] = self.username # 发送者账号 24 msg['To'] = self.recv # 接收者账号列表 25 self.smtp = smtplib.SMTP(self.email_host,port=self.port) 26 #发送邮件服务器的对象 27 self.smtp.login(self.username,self.passwd) 28 try: 29 self.smtp.sendmail(self.username,self.recv,msg.as_string()) 30 except Exception as e: 31 print('出错了。。',e) 32 else: 33 print('发送成功!') 34 def __del__(self): 35 self.smtp.quit() 36 37 if __name__ == '__main__': 38 m = SendMail( 39 username='XXX@163.com',passwd='XXX',recv='XXX@XXX.com', 40 title='新鞋的发送邮件',content='哈哈哈啊哈哈哈哈',file='like_report.txt' 41 ) 42 m.send_mail()