电脑来电自启后、按需求发送邮件、无操作自动关机

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()  # 进入主事件循环

posted @ 2025-09-19 10:29  Clefairy  阅读(24)  评论(0)    收藏  举报