Python 自动化之收发邮件(二)

发邮件之Windows进程监控


文章目录

  • 发邮件之Windows进程监控
  • 前言
  • 一、基本内容
  • 二、基本结构
  • 三、库模块
  • 四、函数模块
    • 1.进程监控
    • 2.邮件发送
  • 五、程序运行模块
    • 1.获取时间
    • 2.用户输入
    • 3.进程监控
      • 3.1进程启动发邮件
      • 3.2进程停止发邮件
  • 总结


前言

上一篇简单写了一下如何进行邮件的收发操作。那么这篇在此基础上呢添加了一些触发条件,让程序替我们监控一些东西,有问题了就发邮件给我们。


一、基本内容

监控Windows系统中的某个进程,共两种模式:一是程序进程启动触发发邮件操作;二是程序进程停止触发发邮件操作。同时,邮件中会写明什么时间《日期格式 2023-02-11 06:45:21》什么程序启动还是停止。

这个是我测试的效果图。
在这里插入图片描述
在这里插入图片描述


二、基本结构

本程序主要分为三大部分:

  1. 库模块

  2. 函数模块:

             进程监控邮件发送
    
  3. 程序运行模块

             获取日期用户输入程序判断
    

三、库模块

代码如下:

# 用来做程序进程的监控
import psutil# 用来记录当前时间
import time# 用来发送邮件
import smtplib# 用来编写邮件正文内容
from email.mime.text import MIMEText

每个库的作用已经注释出来了,记得看注释。


四、函数模块

1.进程监控

代码如下:

def is_process_running():for proc in psutil.process_iter():if proc.name() == target_process:return Truereturn False

此处是监测用户输入的进程是否在运行。是,则返回True;否,则返回False。
后面会用这两个布尔值做判断。


2.邮件发送

代码如下:

def send_mail():# 创建邮件对象msg['Subject'] = 'Test Message'  #  这个是邮件的标题msg['From'] = ' xxxxxxxxx@163.com'msg['To'] = 'xxxxxxxxxxx@qq.com'# 设置服务器的地址和端口smtpobj = smtplib.SMTP_SSL('smtp.163.com', 465)# 向邮件服务器打招呼,这很重要smtpobj.ehlo()# 登录到smtp服务器smtpobj.login('xxxxxxxxx@163.com', 'LSxxxxxxxxx')# 发送邮件smtpobj.sendmail(msg['From'], [msg['To']], msg.as_string())# 从smtp服务器断开smtpobj.quit()

记得看代码注释哦。要是还是有点不懂点击这个链接《Python 自动化之收发邮件(一)》https://blog.csdn.net/weixin_57061292/article/details/134983850

注意:msg[‘Subject’] = ‘Test Message’ 这个是设置邮件的标题的代码。


五、程序运行模块

1.获取时间

代码如下:


if __name__ == '__main__':# 获得当前时间时间戳后转化为本地时间timeStruct = time.localtime(int(time.time()))# 日期格式 2023-02-11 06:45:21strTime = time.strftime("%Y-%m-%d %H:%M:%S", timeStruct)

第一步是获取时间。第二步是把时间转换成用户想要的格式。
if name == ‘main’: 这个的作用是当这个python文件中的函数被别的文件导入使用时候,程序运行模块不会运行。

后续代码都会在这个下面写。


2.用户输入

代码如下:

    # 要监控的进程的名称print('please input the process(例子:notepad.exe) ', end='')target_process = input()# 选择监控模式print('please choose 1 程序运行发邮件 2 程序停止发邮件: ', end='')choice = int(input())

用户需要输入监控的进程的名称,比如:notepad.exe。然后选择如何进行监控。


3.进程监控

3.1进程启动发邮件

代码如下:

    if choice == 1:# 设置邮件正文内容msg = MIMEText(f'At {strTime}, the process of {target_process} has been started.')while True:is_running = is_process_running()# 如果函数的进程监控模块返回Trueif is_running:send_mail()else:print('Process is not running')# 每隔一段时间检查一次,例如每5秒time.sleep(10)

首先,设置要发送的邮件正文的内容。然后,搞一个while循环一直检测。
需要注意的是,要设置时间间隔监测,要不然会很吃资源。


3.2进程停止发邮件

代码如下:

    elif choice == 2:# 设置邮件正文内容msg = MIMEText(f'At {strTime}, the process of {target_process} has been stop.')while True:is_running = is_process_running()# 如果函数的进程监控模块返回Falseif not is_running:send_mail()else:print('Process is running')# 每隔一段时间检查一次,例如每5秒time.sleep(10)

《3.1进程启动发邮件》 几乎一样,只是判断进程监控函数模块的返回值不同。


总结

看完之后,是不是觉得很简单呀,不过如此哈哈哈哈哈哈
这个东西其实也是自动化运维中很重要的一样东西,其中的原理跟我写的这个估计也大差不差的。

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

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

相关文章

LeetCode 2415. 反转二叉树的奇数层:深度优先搜索(DFS)

【LetMeFly】2415.反转二叉树的奇数层:深度优先搜索(DFS) 力扣题目链接:https://leetcode.cn/problems/reverse-odd-levels-of-binary-tree/ 给你一棵 完美 二叉树的根节点 root ,请你反转这棵树中每个 奇数 层的节点值。 例如&#xff0c…

部署LVS的NET模式

实验准备 #负载调度器# 192.168.116.40 #内网 12.0.0.100 #外网 先添加双网卡 #web服务器# 192.168.116.20 #web1 192.168.116.30 #web2 #nfs共享服务# 192.168.116.10 #nfs systemctl stop firewalld setenforce 0 1.nfs共享文件 1…

Axure元件库的介绍以及个人简介和登录界面案例展示

目录 一. 元件介绍 二. 基本元件的使用 2.1 形状元件 2.2 图片元件 2.3 占位符 2.4 文本 2.5 线段元件 2.6 热区文件 三. 表单元件的使用 3.1 文本框 3.2 文本域 3.3 下拉列表 3.4 列表框 3.5 复选框 3.6 单选按钮 四. 菜单与表格元件的使用 4.1 树 4.2 表格…

持续集成交付CICD:GitLabCI操作Harbor仓库

目录 一、实验 1.GitLabCI操作Harbor仓库 二、问题 1.gitlab-runner连接docker daemon报错 一、实验 1.GitLabCI操作Harbor仓库 (1)修改GitLabCI共享库代码并提交到mater CI.yaml .pipelineInit:tags:- buildstage: .prevariables:GIT_CHECKOUT: …

金蝶云星空协同开发环境应用内执行单据类型脚本

文章目录 金蝶云星空协同开发环境应用内执行单据类型脚本业务界面查询单据类型表数据导出数据执行数据库脚本单据类型xml检验是否执行成功检查数据库检查业务数据 金蝶云星空协同开发环境应用内执行单据类型脚本 业务界面 查询单据类型表数据 先使用类型中文在单据类型多语言…

C++使用回调函数的两种方式

一.函数指针 #include <iostream>typedef void (*callback)(int ,int); class MyTest { public:void setCallback(callback cb){m_callback = cb;}void add(int a, int b){m_callback(a, b);}private:callback m_callback; };void onCallback(int a, int b) {std::cout …

[C++]——学习模板

了解模板——初阶 前言&#xff1a;一、模板1.1 什么是模板1.2 模板的概念1.3 模板可以做什么1.4 泛型模板 二、函数模板2.1 函数模板概念和格式2.2 函数模板原理2.3 函数模板实例化2.3.1 隐式实例化2.3.2 显式实例化 2.4 模板参数的匹配原则2.5 函数模板声明定义分离 三、类模…

若依框架springboot——修改前端图片上传样式

简述 使用过若依框架的&#xff0c;一定知道若依前端框架上传图片的样式&#xff0c;是一个正方形加号图片&#xff0c;但是如果你要使用自定义样式呢。 比如将下面这个图进行修改呢 修改后的样式 你可以直接找到element-ui 修改上传图片的组件&#xff0c;也可以加入新的组…

AcWing 1250. 格子游戏(并查集)

题目链接 活动 - AcWing本课程系统讲解常用算法与数据结构的应用方式与技巧。https://www.acwing.com/problem/content/1252/ 题解 当两个点已经是在同一个连通块中&#xff0c;再连一条边&#xff0c;就围成一个封闭的圈。一般用x * n y的形式将&#xff08;x, y&#xff0…

CentOS 防火墙管理及使用的redis基本常用命令

文章目录 防火墙管理使用systemctl管理防火墙启动、关闭使用firewalld-cmd配置访问防火墙策略firewalld配置文件修改限制来源IP docker使用 redis 防火墙管理 需要关闭防火墙或者开启对应端口 使用systemctl管理防火墙启动、关闭 启动防火墙&#xff1a; systemctl start fi…

设计模式——桥接模式(结构型)

引言 桥接模式是一种结构型设计模式&#xff0c; 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构&#xff0c; 从而能在开发时分别使用。 问题 抽象&#xff1f; 实现&#xff1f; 听上去挺吓人&#xff1f; 让我们慢慢来&#xff0c; 先考虑一个简单的…

物联网智能仓库解决方案

物联网智能仓库解决方案是一种基于物联网技术的仓库管理系统&#xff0c;通过自动化设备、智能化管理系统和大数据分析等技术&#xff0c;实现仓库的智能化运营和管理。 物联网智能仓库解决方案包括&#xff1a; 仓库设备自动化&#xff1a;通过自动化设备和技术&#xff0c;实…

18--日志(了解)

1、日志 1.1 什么是日志 日志用来记录用户操作、系统运行状态等&#xff0c;是一个系统的重要组成部分。对于一些简单的小程序&#xff0c;可能并不需要在如何记录日志的问题上花费太多精力。但是对于作为基础平台为很多产品提供服务的后端程序&#xff0c;就必须要考虑如何依…

KVM虚拟机console使用

注意这些设置都在你要进入虚拟机里设置&#xff0c;不是在你的物理机设置 首先debian12 需要设置 grep ttyS0 /etc/securetty #没有则加上 echo ttyS0 >> /etc/securetty #启动 systemctl start serial-gettyttyS0 systemctl enable serial-gettyttyS0#CentOS Stream …

Springboot+vue的公寓报修管理系统(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的公寓报修管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的公寓报修管理系统&#xff0c;采用M&#xff08;model&…

Winform高效获取控件(Control)方法 + 源码分析

背景&#xff1a;风好大&#xff0c;睡觉有点怕&#xff0c;起床敲代码了 之前学的都是都是通过遍历控件&#xff08;Controls&#xff09;&#xff0c;判断控件名是否相等来获取Control 其实直接通过:Controls["控件名"]&#xff0c;就可以获得需要的控件 为什么呢…

Unity中 URP Shader 常量缓冲区CBUFFER

文章目录 前言一、常量缓冲区CBUFFER 使用步骤1、在属性面版定义我们需要使用的属性2、在Pass中&#xff0c;使用前需要提前声明3、使用时&#xff0c;直接使用即可 二、使用 常量缓冲区CBUFFER 的好处三、ShaderGraph属性 和 对应Shader的功能1、我们创建一个颜色属性2、使用&…

nodejs+vue+微信小程序+python+PHP全国天气可视化分析系统-计算机毕业设计推荐

3.2.1前台用户功能 前台用户可分为未注册用户需求和以注册用户需求。 未注册用户的功能如下&#xff1a; 注册账号&#xff1a;用户填写个人信息&#xff0c;并验证手机号码。 浏览天气资讯&#xff1a;用户可以浏览天气资讯信息详情。 已注册用户的功能如下&#xff1a; 登录&…

壹[1],函数:ReadImage

C形式 LIntExport void ReadImage( HObject* Image, const HTuple& FileName); //参数1&#xff1a;读取的Image //参数2&#xff1a;图片地址//备注说明&#xff1a; //头文件&#xff1a;halconcpp/HOperatorSet.h //命名空间&#xff1a;namespace HalconCpp C#形式 …

Android画布Canvas绘图scale translate,Kotlin

Android画布Canvas绘图scale & translate&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <androidx.appcompat.widget.LinearLayoutCompat xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"…