Python实现报警信息实时发送至邮箱功能(实例代码)

  

Python实现报警信息实时发送至邮箱功能,具体内容如下所示:

  

程序设计

  

 Python实现报警信息实时发送至邮箱功能(实例代码)

  

实现代码

  

cpu。py
  

        # - * -编码:utf - 8 - *   进口psutil   导入的时间   从邮件发送者进口txtMail   从日志导入myloggers   进口gc   类mycpumonitor ():   #起来是cpu监控的阈值,默认是90%   def __init__(自我,=None):   自我。=90如果没有别人了   def cpu_monitor(自我):   cpu_percent=psutil.cpu_percent ()   现在= strftime (“% - % - % d % H: % m: % S”, time.localtime ())   如果cpu_percent比;self.up:   文件名=' cpu.txt '   张开(文件名,“w”) f: #如果文件名不存在会自动创建,' w '表示写数据,写之前会清空文件中的原有数据!   f.write (str(现在)+“CPU使用率超过“+ str (self.up) +“! ! ! ! \ n”)。   f.write (str(现在)+“当前CPU使用率”+ str (cpu_percent) +“! ! ! \ n”)   邮件=txtMail ()   试一试:   mail.txt_send_mail(文件名="测试。配置”,报警=文件名)   temp_msg=" CPU超标,当前CPU使用率:”+ str (cpu_percent)   logger1=myloggers (temp_msg)   logger1.maillogging ()   德尔邮件   gc.collect ()   除了:   打印(“文本文件格式不正确”)      

mem。py
  

        # - * -编码:utf - 8 - *   进口psutil   导入的时间   从邮件发送者进口txtMail   从日志导入myloggers   进口gc   类mymemmonitor ():   #起来是内存监控的阈值,默认是90%   def __init__(自我,=None):   自我。=90如果没有别人了   def mem_monitor(自我):   mem_percent=psutil.virtual_memory () [2]   现在= strftime (“% - % - % d % H: % m: % S”, time.localtime ())   如果mem_percent比;self.up:   文件名=' mem.txt '   张开(文件名,“w”) f: #如果文件名不存在会自动创建,' w '表示写数据,写之前会清空文件中的原有数据!   f.write (str(现在)+“内存使用率超过“+ str (self.up) +“! ! ! ! \ n”)。   f.write (str(现在)+“当前内存使用率”+ str (mem_percent) +“! ! ! \ n”)   邮件=txtMail ()   试一试:   mail.txt_send_mail(文件名="测试。配置”,报警=文件名)   temp_msg="内存超标,当前内存使用率:”+ str (mem_percent)   logger1=myloggers (temp_msg)   logger1.maillogging ()   德尔邮件   gc.collect ()   除了:   打印(“文本文件格式不正确”)      

watchpc。py
  

        # - * -编码:utf - 8 - *   #作者:五羊   #修改日期:07年nov2019   #功能:通过SMTP协议发送报警数据   #架构:cpu。py, mem。py等是监控服务器的性能   # Lang: Python3.7   # Env: CentOS7/WindowServer 2012 r2   导入的时间   从cpu进口mycpumonitor   从mem进口mymemmonitor   进口gc   if __name__==癬_main__”:   而真正的:   memObj=mymemmonitor (50)   memObj.mem_monitor ()   cpuObj=mycpumonitor (10)   cpuObj.cpu_monitor ()   德尔memObj   gc.collect ()   time . sleep (10)      

邮件发送者。py
  

        # - * -编码:utf - 8 - *   进口smtplib   进口chardet   进口编解码器   进口操作系统   从email.mime。文本导入MIMEText   从电子邮件。头导入头   从email.mime。多部分进口MIMEMultipart   #第三方SMTP服务   类txtMail(对象):   def __init__(自我、主机=None, auth_user=None, auth_password=None):   自我。主机=" smtp.163.com "如果主人没有别人的主机#设置发送邮件服务使用专用报警账户的用户名   自我。auth_user=皒xxxxx@163.com”如果没有别人auth_user auth_user #上线时使用专用报警账户的用户名   自我。auth_password=(   如果没有别人auth_password auth_password“xxxxxxxx”   )#上线时使用专用报警账户的密码   自我。发送方=皒xxxxxxx@163.com”   def send_mail(自我、主题msg_str、recipient_list attachment_list=None):   消息=MIMEMultipart ()   ["从"]=self.sender消息   消息[”到“]=头(”;“. join (recipient_list),“utf - 8”)   消息(“主题”)=头(主题、“utf - 8”)   消息。附加(MIMEText (msg_str,“普通”,“utf - 8”))   #如果有附件,则添加附件   如果attachment_list:   attachment_list att的:   见附件=MIMEText(开放,rb) .read (),“base64”、“utf - 8”)   附件(“内容类型”)=坝τ贸绦?八进制”   #这里文件名可以任意写,写什么名字,邮件中显示什么名字   文件名=os.path.basename (att)   attachment.add_header (   “附加”,   “附件”,   文件名=(“utf - 8”、“文件名),   )   message.attach(附件)   smtpObj=smtplib.SMTP_SSL (self.host)   smtpObj.connect(自我。主机,smtplib.SMTP_SSL_PORT)   smtpObj.login(自我。auth_user self.auth_password)   smtpObj.sendmail(自我。发送方,recipient_list message.as_string ())   smtpObj.quit ()   打印(“邮件发送成功”)   打印(attachment_list)   def guess_chardet(自我,文件名):   ”“”   :param文件名:传入一个文本文件   返回:返回文本文件的编码格式   ”“”   编码=没有   试一试:   #由于本需求所解析的文本文件都不大,可以一次性读入内存   #如果是大文件,则读取固定字节数   生=open (filename, rb) .read ()   如果raw.startswith (codecs.BOM_UTF8): #处理与BOM utf - 8   编码=" utf-8-sig "   其他:   结果=chardet.detect(生)   编码=结果(“编码”)   除了:   通过   返回编码   def txt_send_mail(自我、文件名、报警):   ”“”   :param文件名:   返回:   将指定格式的txt文件发送至邮箱,txt文件样例如下   #收件人,逗号分隔   #附件,逗号分隔   ”“”   张开(文件名,编码=self.guess_chardet(文件名))f:   行=f.readlines ()   recipient_list[0]=行.strip () .split (", ")   attachment_list=[]   行文件的[1].strip () .split (", "):   如果os.path.isfile(文件):   attachment_list.append(文件)   #如果没有附件,则为没有   如果attachment_list==[]:   attachment_list=没有   张开(报警、编码=self.guess_chardet(报警))作为f1:   lines1=f1.readlines ()   主题=lines1 [0] .strip ()   . join (lines1 msg_str=" " [1:])   self.send_mail (   主题=主题,   msg_str=msg_str,   recipient_list=recipient_list,   attachment_list=attachment_list,   )

Python实现报警信息实时发送至邮箱功能(实例代码)