import smtplib
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import wx
import subprocess
# 创建邮件主体对象
email = MIMEMultipart()
# 设置发件人、收件人和主题
email['From'] = '00@qq.com'
email['To'] = '11@qq.com;22@qq.com;33@foxmail.com'
email['Subject'] = Header('电脑开机提示', 'utf-8')
# 添加邮件正文内容(使用 HTML 格式)
content = """
<html>
<body style="font-family: 楷体, sans-serif;color: #333;font-size: 23px;line-height: 1.5;margin: 0; padding: 20px;background-color: #f4f4f4;">
<h2 style="display: flex;justify-content: center;align-items: center;color: #000;font-size: 28px;line-height: 1.2;margin-top: 30px;margin-bottom: 80px;">注意!注意!电脑开机啦!</h2>
<p style="margin:20px 20px 20px 50px">根据使用情况及时关机!!!</p>
<p style="margin:20px 20px 20px 150px">注意节能和安全!!!</p>
<hr style="height: 1px;width: 300px;color: black;margin-top: 120px;border-left: none;border-right: none;border-bottom: none;">
<p style="text-align: right; margin: 20px 80px 20px 20px;">祝好♥!</p>
<p style="text-align: right; margin: 20px 60px 20px 20px;font-style: italic;">电脑监视小助手</p>
</body>
</html>
"""
# 使用 HTML 格式添加邮件正文
email.attach(MIMEText(content, 'html', 'utf-8'))
# 创建SMTP_SSL对象(连接邮件服务器)
smtp_obj = smtplib.SMTP_SSL('smtp.qq.com', 465)
# 通过用户名和授权码进行登录
smtp_obj.login('00@qq.com', '授权码')
# 发送邮件(发件人、收件人、邮件内容(字符串))
smtp_obj.sendmail(
'00@qq.com',
['11@qq.com','22@qq.com','33@foxmail.com'],
email.as_string()
)
# 关闭SMTP连接
smtp_obj.quit()
# 自定义窗口类MyFrame,继承自 wx.Frame
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(None, title='开机发送邮件、无操作自动关机', size=wx.Size(800, 600))
panel = wx.Panel(parent=self) # 面板 Panel 控件
self.b = wx.Button(parent=panel, label='10分钟后自动关机\n点击此文字可取消自动关机!', style=wx.BORDER_NONE) # 创建无边框按钮 Button 对象
font = wx.Font(32, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) # 设置按钮字体大小
self.b.SetFont(font) # 将字体应用到按钮
self.b.SetBackgroundColour(wx.Colour(255, 255, 255, 0)) # 设置透明背景
self.b.SetForegroundColour(wx.Colour(0, 0, 0)) # 设置字体颜色为黑色
self.Bind(wx.EVT_BUTTON, self.on_click, self.b) # 绑定按钮单击事件
vbox = wx.BoxSizer(wx.VERTICAL) # 创建垂直方向的布局管理对象
vbox.Add(self.b, proportion=1, flag=wx.EXPAND | wx.BOTTOM, border=5) # 添加按钮b到vbox布局管理器
panel.SetSizer(vbox) # 设置面板panel采用vbox布局管理器
# 执行关机
subprocess.Popen('shutdown /s /t 600', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
def on_click(self, event):
self.b.SetLabel('自动关机已取消\n 3秒后窗口自动关闭')
subprocess.Popen('shutdown /a', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
self.start_countdown(3) # 开始倒计时
def start_countdown(self, seconds):
for i in range(seconds, 0, -1):
wx.CallLater((seconds - i) * 1000, self.update_countdown, i) # 更新倒计时文本
wx.CallLater(seconds * 1000, self.close_window) # 3秒后关闭窗口
def update_countdown(self, seconds):
self.b.SetLabel(f'自动关机已取消\n {seconds} 秒后窗口自动关闭') # 更新按钮文本
def close_window(self):
self.Close() # 关闭窗口
app = wx.App() # 创建应用程序对象
frm = MyFrame() # 创建窗口对象
frm.Centre() # 将窗口置于屏幕中央
frm.ShowFullScreen(True) # 显示全屏
frm.Show() # 显示窗口
app.MainLoop() # 进入主事件循环