Python发送邮件告警通知(附代码全)

颜色块

root@bogon:~ 2024-04-18 16:16:40# cat DefaultColor.py 
#########################################################################
#    File Name: DefaultColor.py
#    Author: eight
#    Mail: 18847097110@163.com 
#    Created Time: Thu 11 Apr 2024 10:25:31 PM CST
#########################################################################
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Color:END = '\033[0m'  # normalBOLD = '\033[1m'  # boldRED = '\033[1;91m'  # redGREEN = '\033[1;92m'  # greenORANGE = '\033[1;93m'  # orangeBLUE = '\033[1;94m'  # bluePURPLE = '\033[1;95m'  # purpleUNDERLINE = '\033[4m'  # underlineCYAN = '\033[1;96m'  # cyanGREY = '\033[1;97m'  # grayBR = '\033[1;97;41m'  # background redBG = '\033[1;97;42m'  # background greenBY = '\033[1;97;43m'  # background yellow

邮件代码

#########################################################################
#    File Name: inspection.py
#    Author: eight
#    Mail: 18847097110@163.com 
#    Created Time: Thu 11 Apr 2024 09:52:04 PM CST
#########################################################################
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import time
import platform
import subprocess
import psutil
import DefaultColor
import smtplib
import socket
from email.mime.text import MIMEText
from email.header import Headerclass MonitorCheck():def get_netcard(self):print("---------------------------------------------------------")# 检查网卡,定义一个列表,如果第一个值为2并且ip不是127.0.0.1 将其加入列表里netcard_info = []info = psutil.net_if_addrs()for netcard, ip_list in info.items():for item in ip_list:if item.family == 2 and item.address != '127.0.0.1':netcard_info.append((netcard, item.address))print("网络接口信息:")for netcard, ip in netcard_info:print(f"接口: {netcard}, IP: {ip}")return netcard_info                                                                def get_time(self):print("---------------------------------------------------------")system_time = time.strftime("%Y-%m-%d %X",time.localtime())print(f"当前系统时间是:{system_time}")print("---------------------------------------------------------")return system_timedef basic_info(self):																																								  #调用系统命令输出结果,输出内容为字节,需要decode解码result = subprocess.run(["cat","/etc/os-release"], stdout=subprocess.PIPE)stdout = result.stdout.decode("utf-8")print("当前系统版本:")print()print(stdout)print("---------------------------------------------------------")return stdoutdef check_disk(self):																																															    #检查根分区的剩余容量:Availdisk_info = psutil.disk_usage('/')disk_free = disk_info.free / 1024 / 1024 / 1024print("系统根分区剩余:%s%.2f G%s" % (DefaultColor.Color.GREEN, disk_free, DefaultColor.Color.END))print("---------------------------------------------------------")if disk_free < 12:ip_info = self.get_netcard()time_info = self.get_time()version_info = self.basic_info()self.send_mail("硬盘", disk_free, ip_info, time_info, version_info)def check_memory(self):#检查内存total和free的空间memory_info = psutil.virtual_memory()memory_total = memory_info.total / 1024 / 1024 / 1024memory_free = memory_info.free / 1024 / 1024 / 1024print("系统总内存:%s%.2f G%s" % (DefaultColor.Color.GREEN, memory_total, DefaultColor.Color.END))print("系统可用内存:""%.2f" % memory_free,"G")print("---------------------------------------------------------")if memory_free < 3:ip_info = self.get_netcard()time_info = self.get_time()version_info = self.basic_info()self.send_mail("内存", memory_free, ip_info, time_info, version_info)def send_mail(self, resource, free_space, ip_info, time_info, version_info):# 设置发件人、收件人、主题、内容from_address = '18847097110@163.com'to_address = '963268595@qq.com'subject = f"系统{resource}告警"body = f"系统{resource}可用空间低于{'12GB' if resource == '硬盘' else '3GB'},当前可用空间:{free_space:.2f}GB,请及时处理.\n 系统IP:{ip_info}\n 系统时间:{time_info}\n系统版本:\n{version_info}  "# SMTP邮件服务器smtp_server = 'smtp.163.com'smtp_port = 25# 发件人账号和密码username = '18847097110@163.com'password = 'your password'# 创建邮件内容msg = MIMEText(body, 'plain', 'utf-8')msg['From'] = from_addressmsg['To'] = to_addressmsg['Subject'] = Header(subject, 'utf-8')server = None  # 初始化 servertry:# 检查端口是否通畅sock = socket.create_connection((smtp_server, smtp_port), timeout=5)sock.close()# 连接邮件服务器并发送邮件server = smtplib.SMTP(smtp_server, smtp_port)server.login(username, password)server.sendmail(from_address, to_address, msg.as_string())print('Email send successfully!')#捕获socket的errorexcept socket.error as e:print('Socket error occurred:', e)#捕获smtplib的errorexcept smtplib.SMTPException as e:print('SMTP error occurred:', e)#捕获任何类型的异常except Exception as e:print('An error occurred:', e)#无论是否发生异常,此模块下的代码都会执行finally:if server is not None:																																																					server.quit()if __name__ == '__main__':resp = MonitorCheck()resp.check_disk()resp.check_memory()

效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/631131.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高档次定制线缆知名智造品牌-精工电联:高效响应与持续改进的服务典范

在当今科技互联的时代&#xff0c;定制集成化线缆的需求日益增长。作为业界领先的定制线缆供应商&#xff0c;精工电联以高效响应和持续改进的服务&#xff0c;正逐渐成为行业内的服务典范。 精工电联的定制线缆具有高精度、高性能、高可靠性的特点&#xff0c;确保您的设备连接…

Matlab对多个输入信号进行数值排序提取特定值

1、将多个信号转为一个数组信号输出&#xff0c;在这里需要注意&#xff0c;数据类型是否统一&#xff1b; 2、使用Sort模块&#xff0c;进行排序&#xff08;可设置排序方向&#xff09;&#xff0c;得到排序后的新数组以及对应的索引号&#xff1b; 3、设置想要的索引号&…

Python:可迭代对象与迭代器

相关阅读 Pythonhttps://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 根据Python官方文档&#xff0c;可迭代对象(iterable)是“一种能够逐个返回其成员项的对象”。具体来说&#xff0c;这种对象要么定义了一个返回迭代器(iterator)的魔术…

C++ | Leetcode C++题解之第35题搜索插入位置

题目&#xff1a; 题解&#xff1a; class Solution { public:int searchInsert(vector<int>& nums, int target) {int n nums.size();int left 0, right n - 1, ans n;while (left < right) {int mid ((right - left) >> 1) left;if (target < n…

GitHub登录收不到邮箱验证码

由于长时间没有登录GitHub&#xff0c;浏览器可能清除了相应的cookie信息&#xff0c;所以需要对应绑定邮箱进行验证&#xff0c;但因为邮箱长时间没有收到验证码&#xff0c;所以给到以下一种可能解决的方法&#xff1a; 需要输入验证码进行验证 我们可以打开QQ邮箱&#xff0…

OneLink 与 appsflyer配合

https://support.appsflyer.com/hc/zh-cn/articles/208874366-OneLink%E9%93%BE%E6%8E%A5%E4%B8%8E%E7%94%A8%E6%88%B7%E4%BD%93%E9%AA%8C

Mac中隐私安全性设置-打开任何来源

文章目录 **Mac中隐私安全性设置-打开任何来源**一、目的二、打开方式 Mac中隐私安全性设置-打开任何来源 一、目的 从外部下载的软件频繁打不开&#xff0c;需要从隐私安全性中重新选择一下&#xff1b;默认Mac隐藏了任何来源 二、打开方式 打开终端&#xff0c;输入一下命…

Linux 5.10 Pstore 学习之(二) 原理学习

目录 编译框架模块初始化pstore子系统ramoops模块初始化实例化注册回调数据结构 pstore_blk模块pstore_zone模块 测试扩展调试 编译框架 目标结构 linux_5.10/fs/pstore/ ├── blk.c ├── ftrace.c ├── inode.c // 核心1 ├── internal.h ├── Kconfig ├── …

小球反弹(蓝桥杯)

文章目录 小球反弹【问题描述】答案&#xff1a;1100325199.77解题思路模拟 小球反弹 【问题描述】 有一长方形&#xff0c;长为 343720 单位长度&#xff0c;宽为 233333 单位长度。在其内部左上角顶点有一小球&#xff08;无视其体积&#xff09;&#xff0c;其初速度如图所…

修改npm全局安装模式的路径

修改npm全局安装模式的路径 由于之前安装过nodejs&#xff0c;并且配置环境变量以及cache 、prefix 的信息&#xff1b; 由于项目需求安装最新版本的Nodejs&#xff0c;把环境变量的path相关目录进行调整&#xff0c;然后使用一下命令进行安装cnpm命令&#xff1b; npm insta…

Hive 解决数据倾斜方法

数据倾斜问题&#xff0c; 通常是指参与计算的数据分布不均&#xff0c; 即某个 key 或者某些 key 的数据量远超其他 key&#xff0c; 导致在 shuffle 阶段&#xff0c; 大量相同 key 的数据被发往同一个 Reduce&#xff0c; 进而导致该 Reduce 所需的时间远超其他 Reduce&…

telegraph + influxdb + grafana 实现交换机流量展示

实验环境 influxdb2&#xff1a;2.7.5 telegraf&#xff1a;1.30.1 grafana&#xff1a;10.4.2 influxdb 官方文档见https://docs.influxdata.com/influxdb/v2/&#xff0c;网络上很多文档比较老&#xff0c;可能是v1版本的influxdb。 部署方法1&#xff1a;二进制 从http…