邮件远程控制关机

功能描述:

  • 通过读取邮件标题控制电脑执行相关操作,比如关机、重启、打开电脑应用

开发环境:

  • windows, pycharm, os, time, time, email

以下为主程序

from GetEmail import get_email_subject
import os
import time
import getpass

# 检出邮件标题
def check_email_subject(addr, password, execute_password):
    # 指令集格式  指令: 终端执行的指令或桌面快捷方式
    command_set = {
        "重启": "shutdown -r -t ",
        "关机": "shutdown -s -t ",
    }
    while True:
        subject, read, total_num = get_email_subject(addr, password)
        # 隔离中英文逗号区别
        subject = subject.replace(',', ',')

        print("读取的邮件标题: {}".format(subject))

        # 切割邮件标题指令
        subject_list = subject.split(",")
        # 判断邮件标题是否为合法指令
        if len(subject_list) >= 3 and subject_list[1].isdecimal():
            command, execute_time, password1 = subject_list[:3]
            print("[数据类型]{}  {} 时间后执行指令 ".format(type(execute_time), execute_time))

            if int(subject_list[1]) < 120:
                execute_time = "120"
            # 拼接操作系统可执行的完整指令
            execute_command = command_set[command] + execute_time
            print("接受到的指令为:{}\n执行的指令为: {}".format(subject_list, execute_command))
            # 指令执行完成,删除邮件;避免重复执行指令
            read.dele(total_num)
            read.quit()
            # 指令密码检测
            if execute_password == password1:
                os.system(execute_command)
                break
        else:
            # 每10S检查一次
            time.sleep(10)
            continue


if __name__ == '__main__':
    email_addr = input("请输入邮箱地址: ")
    email_password = getpass.getpass("请输入邮箱第三方授权密码: ")
    control_password = input("请输入计算机执行指令的控制密码: ")
    check_email_subject(email_addr, email_password, control_password)

以下为获取邮件包(文件名: GetEmail)

#  *_* coding:utf8 *_*

import poplib
import email
from email.header import decode_header

# 获取邮件标题
def get_email_subject(addr, password):
    # 设置连接网址,获取pop3协议的邮件读取对象
    read = poplib.POP3('pop.163.com', timeout=3600)

    # 输入邮件地址与邮件登录密码
    read.user(addr)  # 163邮箱用户名
    read.pass_(password)  # 163邮箱设置中的客户端授权密码

    # allEmails = (totalNum, totalSize)
    # 读取邮件信息(邮件总数,邮件尺寸)
    total_num, total_size = read.stat()

    # top(which,howmuch)
    #  获取最新的一封邮件(第几封邮件,获取多少封)
    top_email = read.top(total_num, 1)
    # print("***** start *****\n接收的数据为: {}\n*****  end  *****\n".format(top_email))
    #
    # print("***** start *****\n[解码前]获取的初始邮件内容: {}\n*****  end  *****\n".format(top_email[1]))

    # 解码邮件信息,将解码后的邮件信息存入tmp
    tmp = []
    for s in top_email[1]:
        tmp.append(s.decode())
    # print("***** start *****\n[解码后]的邮件内容为: {}\n*****   end   *****\n".format(tmp))

    # 将解码后的邮件内容拼接为字符串
    email_str = '\n'.join(tmp)
    # 将字符串类型解析为Message类型
    message = email.message_from_string(email_str)

    # print("***** start *****\n"
    #       "[解码前]的邮件字符串内容为: [数据类型]{}\n{}\n"
    #       "--------------------------------------------\n"
    #       "[解码后]的邮件字符串内容为: [数据类型]{}\n{}\n"
    #       "*****  end  *****\n"
    #       .format(type(email_str), email_str, type(message), message))

    # 获取邮件主题
    subject_str = message['subject']
    # print("***** start *****\n[解码前]邮件标题: {}\n*****  end  *****\n".format(subject_str))

    subject = decode_header(subject_str)
    # print("***** start *****\n[解码后]邮件标题: {}\n*****  end  *****\n".format(subject))

    content = subject[0][0]
    enc_type = subject[0][1]
    if enc_type:
        subject_decode = content.decode(enc_type)
    else:
        subject_decode = content
    return subject_decode, read, total_num
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值