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 True
    return 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:21
    strTime = 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()
            # 如果函数的进程监控模块返回True
            if 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()
            # 如果函数的进程监控模块返回False
            if not is_running:
                send_mail()
            else:
                print('Process is running')

            # 每隔一段时间检查一次,例如每5秒
            time.sleep(10)

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


总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NXP应用随记(四):eMios阅读随记-整体功能概述

目录 1、eMios IP介绍 2、时钟结构 3、通道类型 4、功能介绍 5、中断与DMA 6、EMIOS -通道分配建议(针对S32K312) 1、eMios IP介绍 Emios是什么?eMIOS提供了独立的通道(UCs),您可以配置这些通道来为不同的功能生成或测量时间事件。 每个eMIOS实例最…

智能插座是什么

智能插座 电工电气百科 文章目录 智能插座前言一、智能插座是什么二、智能插座的类别三、智能插座的原理总结 前言 智能插座的应用广泛,可以用于智能家居系统中的电器控制,也可以应用在办公室、商业场所和工业控制中,方便快捷地实现电器的远…

锁--07_2---- index merge(索引合并)引起的死锁

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 案例分析生产背景死锁日志表结构执行计划 EXPLAN为什么会用 index_merge(索引合并)为什么用了 index_merge就死锁了解决方案注:M…

算法训练营Day14

#Java #二叉树层次遍历 #反转二叉树 开源学习资料 二叉树的层次遍历:力扣题目链接 二叉树的层次遍历很好理解: 就是从根结点一层一层地往下遍历(同一层,从左到右): 迭代的方式很好理解:就是…

Netty常见的设计模式

简介 设计模式在软件开发中起着至关重要的作用,它们是解决常见问题的经过验证的解决方案。而Netty作为一个优秀的网络应用程序框架,同样也采用了许多设计模式来提供高性能和可扩展性。在本文中,我们将探讨Netty中使用的一些关键设计模式&…

TS系列-keyof的妙用

案例1 1、如果,有一个接口,某个变量的类型,是这个接口的 key ? keyof 后面可以跟 一个对象类型或者一个接口类型keyof 是把后面 对象或者接口 的 键 都提取出来,组成一个联合类型 interface IStudentAttr {name: stri…

【LeetCode刷题笔记(6-1)】【Python】【三数之和】【哈希表】【中等】

文章目录 三数之和题目描述示例示例1示例2示例3 提示解决方案1:【三层遍历查找】解决方案2:【哈希表】【两层遍历】 结束语 三数之和 三数之和 题目描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! …

nodejs微信小程序+python+PHP血液中心管理平台的设计与实现-计算机毕业设计推荐

在二十一世纪的今天,我国献血总量已经不容小觑,在全国人民的不懈努力下,贫血、缺血的病人已经有了足够的血液保障。与此同时,采血工作和血液入库、出库等工作也日愈繁重。为进一步提高采血工作和血液中心的工作效率,开…

【算法与数据结构】376、LeetCode摆动序列

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题难点在于要考虑到不同序列的情况,具体来说要考虑一下几种特殊情况: 1、上…

提前预警,时刻守护:迅软DLP的数据安全先锋

许多数据泄密事件的发生,往往都是由于没有在案发事前做好安全保护,使得重要信息被随意攻击、盗取、泄密。比起在危机发生后亡羊补牢,更重要的是应该在案发之前未雨绸缪。迅软DLP作为迅软股份研发的“重磅选手”,可为政企单位在一切…

物联网智能仓库解决方案

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

OpenHarmony关于修改系统横屏导致启动视频显示不全问题解决

前言 OpenHarmony源码版本:4.0release 开发板:DAYU / rk3568 前段时间写的设置OpenHarmony启动视频,在竖屏状态下是正常的,但是横屏状态下显示不全。 链接直达:OpenHarmony 设备启动Logo和启动视频替换指南-CSDN博…

docker小白第四天

docker小白第一天 什么是镜像 1、是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就…

基于轻量级yolov5-seg全系列【n/s/m/l/x】参数模型开发构建工业场景下不同参数量级的滚珠丝杠传动表面缺陷分割检测系统

工业场景下的滚珠丝杠传动表面缺陷分割检测系统在我们前面的博文中已经有了相关的开发实践了,感兴趣的话可以自行阅读即可: 《助力工业生产质检,基于轻量级yolov5-seg开发构建工业场景下滚珠丝杠传动表面缺陷分割检测系统》 前文主要是以se…

【PS】修改 图片 文字

删除文字 1:框选要修改的文字 选择-色彩范围 调整色彩容差能看见字体的时候就OK(记住用吸管吸取文字颜色) 2:选择-修改-扩展-像素2 3:编辑-内容识别填充 现在文字去除了。 用污点画笔修复工具,对缺陷进行…

四十七、Redis分片集群

目录 一、分片集群结构 二、散列插槽 1、Redis如何判断某个key应该在哪个实例? 2、如何将同一类数据固定的保存在同一个Redis实例? 三、集群伸缩 四、故障转移 1、当集群中有一个master宕机时 (1)自动转移 (2&…

[渗透测试学习] Codify - HackTheBox

首先nmap扫描端口 nmap -sV -sC -p- -v --min-rate 1000 10.10.11.239扫出来三个端口,22端口为ssh服务,80端口有http服务,3000端口为nodejs框架 尝试访问下80端口,发现页面重定向 将该域名添加到hosts里 sudo vim /etc/hosts 成…

MySQL数据库的基础概念

目录 顾名思义,数据库是用于存储数据的,那这些数据被存储在哪呢? 文件也能存储数据,那在这个基础上,为什么还要搞出一个数据库来存储数据呢? MySQL的客户端登录/退出指令、服务端的启动/关闭指令 数据…

mysql数据库损坏后重装,数据库备份

重装 先卸载 sudo apt-get remove --purge mysql-server mysql-client mysql-common sudo apt-get autoremove sudo apt-get autoclean 然后重新安装MySQL: sudo apt-get install mysql-server mysql-client 首先要先使用无密码登录数据库一定要使用 sudo mysql -uroo…

数据结构(七):树介绍及面试常考算法

一、树介绍 1、定义 树形结构是一种层级式的数据结构,由顶点(节点)和连接它们的边组成。 树类似于图,但区分树和图的重要特征是树中不存在环路。树有以下特点: (1)每个节点有零个或多个子节点…
最新文章