import requests
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import time
# 设置要监控的网站地址
website = "http://127.0.0.1:8989/"
# 设置发件人和收件人的邮箱地址和密码
fromaddr = "112@qq.com"
toaddr = "123@qq.com"
password = "123456"
# 创建一个邮件对象
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
# 定义一个函数,发送邮件通知
def send_email(subject, body):
msg['Subject'] = subject # 设置邮件主题
msg.attach(MIMEText(body, 'plain')) # 设置邮件正文
server = smtplib.SMTP('smtp.qq.com', 587) # 连接SMTP服务器,端口号为587
server.starttls() # 启用安全传输层协议
server.login(fromaddr, password) # 登录发件人邮箱账号和密码
text = msg.as_string() # 将邮件对象转换为字符串格式
server.sendmail(fromaddr, toaddr, text) # 发送邮件
server.quit() # 退出SMTP服务器
# 定义一个变量,记录网站是否正常运行,默认为True
website_is_up = True
# 无限循环,每隔1分钟检查一次网站状态
def monitoring():
global website_is_up
while True:
try:
response = requests.get(website) # 发送GET请求到网站地址,并获取响应对象
if response.status_code == 200: # 如果响应状态码为200,表示网站正常运行
if not website_is_up: # 如果之前网站不正常运行,则说明已经恢复了
subject = f"网站{website}已经恢复正常" # 设置邮件主题为恢复通知
body = f"经过检测,网站{website}已经恢复正常运行。" # 设置邮件正文为恢复信息
send_email(subject, body) # 调用发送邮件函数
website_is_up = True # 将网站状态变量设为True
else: # 如果之前网站也正常运行,则不需要发送任何通知
pass
else: # 如果响应状态码不是200,表示网站出现了异常
if website_is_up: # 如果之前网站正常运行,则说明刚刚出现了异常
subject = f"警告:网站{website}出现异常" # 设置邮件主题为异常通知
body = f"经过检测,网站{website}出现了异常,响应状态码为{response.status_code}。请及时处理。" # 设置邮件正文为异常信息
send_email(subject, body) # 调用发送邮件函数
website_is_up = False # 将网站状态变量设为False
else: # 如果之前网站也出现了异常,则不需要发送任何通知
pass
except Exception as e: # 如果请求过程中发生了错误
if website_is_up: # 如果之前网站正常运行,则说明刚刚出现了错误
subject = f"警告:无法连接到{website}" # 设置邮件主题为错误通知
body = f"经过检测,无法连接到{website}。错误信息如下:\n\n{e}" # 设置邮件正文为错误信息
send_email(subject, body) # 调用发送邮件
website_is_up = False # 将网站状态变量设为False
time.sleep(60) # 暂停60秒
monitoring() # 执行代码
02-02
751
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)