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实现报警信息实时发送至邮箱功能(实例代码)