当前位置: 首页 > news >正文

Python+QQ邮箱调用定时监控——以网站监测为例

Python+QQ邮箱调用定时监控——以网站监测为例

前台执行monitor_urls.py

import requests
import time
from datetime import datetime
import smtplib
import ssl
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart# 定义要监测的URL列表
urls = ["https://developer.d-robotics.cc/","https://en.developer.d-robotics.cc/"
]# 设置检查间隔(以秒为单位)
CHECK_INTERVAL = 5 * 60  # 5分钟# 定义请求超时时间(以秒为单位)
TIMEOUT = 10# 邮件配置
SMTP_SERVER = "smtp.qq.com"
SMTP_PORT = 465  # 使用SSL
SENDER_EMAIL = "替换为你的QQ邮箱地址@qq.com"        # 替换为你的QQ邮箱地址
SENDER_PASSWORD = "替换为你生成的授权码"            # 替换为你生成的授权码
RECEIVER_EMAIL = "替换为接收通知的邮箱地址"  # 替换为接收通知的邮箱地址
EMAIL_SUBJECT = "D-robotic Website_Monitor_Alarm"def check_url(url):try:response = requests.get(url, timeout=TIMEOUT)# 判断状态码是否为200if response.status_code == 200:return True, f"可访问 (Status Code: {response.status_code})"else:return False, f"不可访问 (Status Code: {response.status_code})"except requests.exceptions.RequestException as e:return False, f"不可访问 (错误: {e})"def send_QQ_email_plain(message):sender = user = SENDER_EMAIL  # 发送方的邮箱账号passwd = SENDER_PASSWORD       # 授权码receiver = RECEIVER_EMAIL# 纯文本内容msg = MIMEText(f'{message}', 'plain', 'utf-8')# From 的内容是有要求的,前面的abc为自己定义的 nickname,如果是ASCII格式,则可以直接写msg['From'] = SENDER_EMAILmsg['To'] = receivermsg['Subject'] = EMAIL_SUBJECT  # 点开详情后的标题try:# 建立 SMTP 、SSL 的连接,连接发送方的邮箱服务器smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)# 登录发送方的邮箱账号smtp.login(user, passwd)# 发送邮件 发送方,接收方,发送的内容smtp.sendmail(sender, receiver, msg.as_string())print('邮件发送成功')smtp.quit()except Exception as e:print(e)print('发送邮件失败')
def monitor_urls():while True:print(f"\n[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 开始检测网页可访问性:")for url in urls:accessible, message = check_url(url)if accessible:print(f"✅ {url} - {message}")else:print(f"❌ {url} - {message}")# 构建邮件内容email_body = f"网页 {url} 在 {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} 不可访问。\n\n状态信息: {message}"# 发送邮件通知send_QQ_email_plain(email_body)print(f"等待 {CHECK_INTERVAL / 60} 分钟后再次检测...\n")time.sleep(CHECK_INTERVAL)if __name__ == "__main__":monitor_urls()

后台执行

 nohup ./monitor_urls.py > monitor.log 2>&1 &

实现思路

1.通过对于浏览器请求头里面的只有是200才是正常访问,这个200代表对于网页的请求返回了所有html元素,别的状态码都是有问题的,丢失等等

2.一旦出现非200状态码,调用QQ邮箱,向指定邮箱进行发送邮件提醒。

至于怎么获取状态码,按照这个步骤:

第一步

image-20241224213706644

第二步

image-20241224213911950

第三部

image-20241224214046672

第四步

image-20241224214258548

结果

我那个英文无法访问原因是我的py脚本库,不能访问国外,其实这个问题我从大二就开始研究了,还没整好为啥其实,我再研究研究,之前研究过一段时间配置编辑器代理,但是这个是通过编辑器实现,一旦换个人的电脑那个人就用不了所以就没采用,一直给这个问题困扰好多了,尤其是代码访问github,我得再去好好研究研究。

​ 其实还有一个很难搞的问题,一旦开启了代理,运行py脚本国内也无法访问,这个又涉及到本地代理端口转发冲突问题,我得再去好好研究研究。

但是其实国内国外网站是一个好像,我记得,我这里加了en不是全局代理也能访问的链接

image-20241224214438590
代理,运行py脚本国内也无法访问,这个又涉及到本地代理端口转发冲突问题,我得再去好好研究研究。

但是其实国内国外网站是一个好像,我记得,我这里加了en不是全局代理也能访问的链接

[外链图片转存中…(img-x8NytmW2-1735048261197)]


http://www.mrgr.cn/news/81238.html

相关文章:

  • 使用Excel制作通达信自定义外部数据,安排!!!
  • 2.4 网络概念(分层、TCP)
  • linux springboot项目启动端口被占用 Port 8901 was already in use.
  • Kubernetes常见部署工具介绍与对比【知识干货】
  • EasyPoi 使用$fe:模板语法生成Word动态行
  • vue中的css深度选择器v-deep 配合!important
  • ArKTS基础组件3
  • Linux系统文件
  • LinkedList类 (链表)
  • 电子电气架构 --- 什么是EPS?
  • MySQL中Seconds_Behind_Master是怎么计算的
  • ‘pnpm’ 不是内部或外部命令,也不是可运行的程序或批处理文件。
  • 24.12.25 AOP
  • 【C++】模板与泛型编程(一):定义模板,控制实例化、效率与灵活性
  • NLP 中文拼写检测纠正论文-02-2019-SOTA FASPell Chinese Spell Checke github 源码介绍
  • 本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——12使用YOLO-Bin
  • MacroSan 2500_24A配置
  • 重温设计模式--工厂模式(简单、工厂、抽象)
  • Genesis世界模型的上手与测试
  • 【蓝桥杯——物联网设计与开发】拓展模块4 - 脉冲模块
  • 一起学Git【第五节:git版本回退】
  • js的节流与防抖方法封装
  • 大数据实验三
  • 重温设计模式--组合模式
  • 百度慧眼百度热力图数据处理,可直接用于论文
  • 如何与AI对话,写好Prompt