发邮件之Windows进程监控



前言

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


一、基本内容

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

这个是我测试的效果图。
Python 自动化之收发邮件(二)-LMLPHP
Python 自动化之收发邮件(二)-LMLPHP


二、基本结构

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

  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进程启动发邮件》 几乎一样,只是判断进程监控函数模块的返回值不同。


总结

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

12-16 06:14