python获取Windows变乱日志并发送到企业微信邮箱

打印 上一主题 下一主题

主题 907|帖子 907|积分 2721

开启企业微信的邮箱服务


  • 登录企业微信邮箱
    收件人和被抄送方的都需要开启服务。
  • 找到“设置”-“收发信设置”

  • 开启服务

  • 点击生存更改
  • 天生客户端专用暗码(发送方需要天生这个暗码)

导入所需模块

  1. import os  # 用于获取系统路径
  2. import time  # 用于获取当前时间
  3. import shutil  # 用于删除文件夹
  4. import zipfile  # 用于压缩文件夹
  5. import smtplib  # 用于发送邮件
  6. from email.mime.text import MIMEText
  7. from email.mime.multipart import MIMEMultipart
  8. from email.mime.application import MIMEApplication
  9. from email.header import Header
复制代码
获取体系变乱日志并压缩


  • 复制C:\Windows\System32\winevt\Logs下的内容,整个Logs文件夹复制并粘贴到桌面,并将Logs的名称改成当前时间+Logs
  1. # 获取桌面路径
  2. desktop_path = os.path.join(os.environ['USERPROFILE'], 'Desktop')
  3. # 定义输出文件和错误日志文件的保存路径
  4. error_log_path = os.path.join(desktop_path, 'error.log')
  5. # 获取当前时间
  6. current_time = time.strftime('%Y%m%d%H%M%S', time.localtime())
  7. # 在桌面上创建输出文件和错误日志文件
  8. if not os.path.exists(error_log_path):
  9.     with open(error_log_path, 'w', encoding='utf-8'):
  10.         pass
  11. # 复制C:\Windows\System32\winevt\Logs\下的文件包含Logs文件夹的名称
  12. # 给Logs文件夹重命名为当前时间+Logs,文件放在桌面上
  13. try:
  14.     source_folder = 'C:\\Windows\\System32\\winevt\\Logs'
  15.     target_folder = os.path.join(desktop_path, current_time + 'Logs')
  16.     # 复制文件夹到桌面,并重命名为当前时间+Logs
  17.     shutil.copytree(source_folder, target_folder)
  18.     with open(error_log_path, 'a', encoding='utf-8') as f:
  19.         f.write(str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + f'日志复制成功\n'))
  20. except Exception as e:
  21.     with open(error_log_path, 'a', encoding='utf-8') as f:
  22.         f.write(str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + f'日志复制失败:' + str(e) + '\n'))
复制代码

  • 将桌面的当前时间+Logs文件夹内的文件包含文件夹一起打包成一个.zip文件
  1. # 将重命名的文件夹打成zip压缩包,压缩包放到桌面上
  2. zip_file_name = current_time + 'Logs.zip'
  3. zip_file_path = os.path.join(desktop_path, zip_file_name)
  4. # 压缩文件夹
  5. try:
  6.     with zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED) as zf:
  7.         # 遍历文件夹 root:当前目录, dirs:子目录列表, files:文件列表
  8.         for root, dirs, files in os.walk(os.path.join(desktop_path, current_time + 'Logs')):
  9.             for file in files:
  10.                 # 创建文件的绝对路径
  11.                 file_path = os.path.join(root, file)
  12.                 # 创建文件相对于压缩包根目录的相对路径
  13.                 relative_path = os.path.relpath(file_path, os.path.dirname(zip_file_path))
  14.                 # 将文件添加到 zf 中
  15.                 zf.write(file_path, relative_path)
  16. except Exception as e:
  17.     with open(error_log_path, 'a', encoding='utf-8') as f:
  18.         f.write(str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + f'日志备份压缩失败:' + str(e) + '\n'))
复制代码
发送到企业微信邮箱

  1. # 企业微信的邮件服务器是smtp.exmail.qq.com
  2. # 企业微信的邮件服务器端口是465
  3. smtp_server = 'smtp.exmail.qq.com'
  4. smtp_port = 465
  5. # 登录信息
  6. sender = '发送者的邮箱.com'
  7. password = '发送者的邮箱的客户端密码'
  8. receiver = '接受者的邮箱.com'
  9. # 邮件主题和内容
  10. subject = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + 'Windows日志备份'
  11. content = f'附件为{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}时的Windows日志备份文件'
  12. # 邮件附件
  13. attachment = zip_file_path
  14. # 创建邮件对象
  15. msg = MIMEMultipart()
  16. msg['From'] = Header(sender)
  17. msg['To'] = Header(receiver)
  18. # 这里这个抄送者邮箱会显示在邮件头处
  19. msg["Cc"] = Header('抄送者的邮箱.com', 'utf-8')
  20. msg['Subject'] = Header(subject)
  21. # 邮件正文
  22. msg.attach(MIMEText(content, 'plain', 'utf-8'))
  23. # 附件
  24. with open(attachment, 'rb') as f:
  25.     # 设置附件的MIME和文件名 name参数是邮件中显示的名字
  26.     attach = MIMEApplication(f.read(), Name=os.path.basename(attachment))
  27.     # 加上必要的头信息 application/zip是MIME类型
  28.     attach['Content-Type'] = 'application/zip'
  29.     # content-disposition是MIME协议的扩展,表示以何种方式展示附件
  30.     attach['Content-Disposition'] = 'attachment; filename="{}"'.format(os.path.basename(attachment))
  31.     msg.attach(attach)
  32. # 发送邮件
  33. try:
  34.     # 连接到邮箱服务器
  35.     smtp_obj = smtplib.SMTP_SSL(smtp_server, smtp_port)
  36.     # 登录邮箱
  37.     smtp_obj.login(sender, password)
  38.     # 发送邮件,还要发送给cc人
  39.     smtp_obj.sendmail(sender, [receiver, '抄送者的邮箱.com'], msg.as_string())
  40.     # 关闭连接
  41.     smtp_obj.quit()
  42. except smtplib.SMTPException as e:
  43.     with open(error_log_path, 'a', encoding='utf-8') as f:
  44.         f.write(str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + f'邮件发送失败:' + str(e) + '\n'))
复制代码
删除桌面多余文件夹和压缩包
  1. # 删除重命名的文件夹
  2. try:
  3.     if os.path.exists(os.path.join(desktop_path, current_time + 'Logs')):
  4.         shutil.rmtree(os.path.join(desktop_path, current_time + 'Logs'))
  5. except Exception as e:
  6.     with open(error_log_path, 'a', encoding='utf-8') as f:
  7.         f.write(str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + f'日志备份文件夹删除失败:' + str(e) + '\n'))
  8. # 6. 删除压缩包
  9. try:
  10.     if os.path.exists(zip_file_path):
  11.         os.remove(zip_file_path)
  12. except Exception as e:
  13.     with open(error_log_path, 'a', encoding='utf-8') as f:
  14.         f.write(str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + f'日志备份压缩包删除失败:' + str(e) + '\n'))
复制代码
打包成.exe小程序

  1. # 控制台执行这句,没有pyinstaller库先运行pip install pyinstaller
  2. # -F 打包成一个可执行文件
  3. # -w运行时不显示命令框
  4. # -i 为.exe生成图标
  5. # --name 设置可执行文件的名称
  6. # xxx.py 表示打包哪一个python文件
  7. pyinstaller -F -w -i f3.ico --name=sendLogsToQW001.exe sendLogsToQW.py
复制代码
运行

这个可实验文件需要以管理员权限运行


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81429

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表