开启企业微信的邮箱服务
- 登录企业微信邮箱
收件人和被抄送方的都需要开启服务。
- 找到“设置”-“收发信设置”
- 开启服务
- 点击生存更改
- 天生客户端专用暗码(发送方需要天生这个暗码)
导入所需模块
- import os # 用于获取系统路径
- import time # 用于获取当前时间
- import shutil # 用于删除文件夹
- import zipfile # 用于压缩文件夹
- import smtplib # 用于发送邮件
- from email.mime.text import MIMEText
- from email.mime.multipart import MIMEMultipart
- from email.mime.application import MIMEApplication
- from email.header import Header
复制代码 获取体系变乱日志并压缩
- 复制C:\Windows\System32\winevt\Logs下的内容,整个Logs文件夹复制并粘贴到桌面,并将Logs的名称改成当前时间+Logs
- # 获取桌面路径
- desktop_path = os.path.join(os.environ['USERPROFILE'], 'Desktop')
- # 定义输出文件和错误日志文件的保存路径
- error_log_path = os.path.join(desktop_path, 'error.log')
- # 获取当前时间
- current_time = time.strftime('%Y%m%d%H%M%S', time.localtime())
- # 在桌面上创建输出文件和错误日志文件
- if not os.path.exists(error_log_path):
- with open(error_log_path, 'w', encoding='utf-8'):
- pass
- # 复制C:\Windows\System32\winevt\Logs\下的文件包含Logs文件夹的名称
- # 给Logs文件夹重命名为当前时间+Logs,文件放在桌面上
- try:
- source_folder = 'C:\\Windows\\System32\\winevt\\Logs'
- target_folder = os.path.join(desktop_path, current_time + 'Logs')
- # 复制文件夹到桌面,并重命名为当前时间+Logs
- shutil.copytree(source_folder, target_folder)
- with open(error_log_path, 'a', encoding='utf-8') as f:
- f.write(str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + f'日志复制成功\n'))
- except Exception as e:
- with open(error_log_path, 'a', encoding='utf-8') as f:
- f.write(str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + f'日志复制失败:' + str(e) + '\n'))
复制代码
- 将桌面的当前时间+Logs文件夹内的文件包含文件夹一起打包成一个.zip文件
- # 将重命名的文件夹打成zip压缩包,压缩包放到桌面上
- zip_file_name = current_time + 'Logs.zip'
- zip_file_path = os.path.join(desktop_path, zip_file_name)
- # 压缩文件夹
- try:
- with zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED) as zf:
- # 遍历文件夹 root:当前目录, dirs:子目录列表, files:文件列表
- for root, dirs, files in os.walk(os.path.join(desktop_path, current_time + 'Logs')):
- for file in files:
- # 创建文件的绝对路径
- file_path = os.path.join(root, file)
- # 创建文件相对于压缩包根目录的相对路径
- relative_path = os.path.relpath(file_path, os.path.dirname(zip_file_path))
- # 将文件添加到 zf 中
- zf.write(file_path, relative_path)
- except Exception as e:
- with open(error_log_path, 'a', encoding='utf-8') as f:
- f.write(str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + f'日志备份压缩失败:' + str(e) + '\n'))
复制代码 发送到企业微信邮箱
- # 企业微信的邮件服务器是smtp.exmail.qq.com
- # 企业微信的邮件服务器端口是465
- smtp_server = 'smtp.exmail.qq.com'
- smtp_port = 465
- # 登录信息
- sender = '发送者的邮箱.com'
- password = '发送者的邮箱的客户端密码'
- receiver = '接受者的邮箱.com'
- # 邮件主题和内容
- subject = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + 'Windows日志备份'
- content = f'附件为{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}时的Windows日志备份文件'
- # 邮件附件
- attachment = zip_file_path
- # 创建邮件对象
- msg = MIMEMultipart()
- msg['From'] = Header(sender)
- msg['To'] = Header(receiver)
- # 这里这个抄送者邮箱会显示在邮件头处
- msg["Cc"] = Header('抄送者的邮箱.com', 'utf-8')
- msg['Subject'] = Header(subject)
- # 邮件正文
- msg.attach(MIMEText(content, 'plain', 'utf-8'))
- # 附件
- with open(attachment, 'rb') as f:
- # 设置附件的MIME和文件名 name参数是邮件中显示的名字
- attach = MIMEApplication(f.read(), Name=os.path.basename(attachment))
- # 加上必要的头信息 application/zip是MIME类型
- attach['Content-Type'] = 'application/zip'
- # content-disposition是MIME协议的扩展,表示以何种方式展示附件
- attach['Content-Disposition'] = 'attachment; filename="{}"'.format(os.path.basename(attachment))
- msg.attach(attach)
- # 发送邮件
- try:
- # 连接到邮箱服务器
- smtp_obj = smtplib.SMTP_SSL(smtp_server, smtp_port)
- # 登录邮箱
- smtp_obj.login(sender, password)
- # 发送邮件,还要发送给cc人
- smtp_obj.sendmail(sender, [receiver, '抄送者的邮箱.com'], msg.as_string())
- # 关闭连接
- smtp_obj.quit()
- except smtplib.SMTPException as e:
- with open(error_log_path, 'a', encoding='utf-8') as f:
- f.write(str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + f'邮件发送失败:' + str(e) + '\n'))
复制代码 删除桌面多余文件夹和压缩包
- # 删除重命名的文件夹
- try:
- if os.path.exists(os.path.join(desktop_path, current_time + 'Logs')):
- shutil.rmtree(os.path.join(desktop_path, current_time + 'Logs'))
- except Exception as e:
- with open(error_log_path, 'a', encoding='utf-8') as f:
- f.write(str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + f'日志备份文件夹删除失败:' + str(e) + '\n'))
- # 6. 删除压缩包
- try:
- if os.path.exists(zip_file_path):
- os.remove(zip_file_path)
- except Exception as e:
- with open(error_log_path, 'a', encoding='utf-8') as f:
- f.write(str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + f'日志备份压缩包删除失败:' + str(e) + '\n'))
复制代码 打包成.exe小程序
- # 控制台执行这句,没有pyinstaller库先运行pip install pyinstaller
- # -F 打包成一个可执行文件
- # -w运行时不显示命令框
- # -i 为.exe生成图标
- # --name 设置可执行文件的名称
- # xxx.py 表示打包哪一个python文件
- pyinstaller -F -w -i f3.ico --name=sendLogsToQW001.exe sendLogsToQW.py
复制代码 运行
这个可实验文件需要以管理员权限运行
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |