Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)


Posted in Python onNovember 19, 2019

0. 我们如何通过邮件系统完成远程控制电脑(关机、重启等)?

实现思路:

需要有两个邮箱:接收指令邮箱(A)发送指令邮箱(B)

被控制的电脑(查看 A 邮箱):
1. 每隔指定时间监听 A 邮箱 查看最近的邮件
2. 打开最近邮件,看是否是 B 邮箱地址发来的执行命令
3. 向 A 和 B 邮箱都发送 主题为:反馈 内容为:“目标计算机已收到指令!开始执行:xxx 指令!” 邮件
4. 执行指定邮箱发送的执行命令

远程人员操作:

登录 B 邮箱,向 A 邮箱发送 主题为:“目标计算机执行” 内容为:xxx指令(例如:关机)

1. 代码编写

import poplib
import smtplib
import os
import time
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddr
from email.mime.text import MIMEText
from email.header import Header
 
email_params = dict()
email_params['email_message'] = '反馈'
email_params['email_subject'] = '目标计算机反馈'
email_params['email_from'] = 'A邮箱'
email_params['email_user'] = 'A邮箱'
email_params['email_exec'] = 'B邮箱'
email_params['email_to'] = ['A邮箱', 'B邮箱']
email_params['email_smtp'] = 'smtp.163.com'
email_params['email_pop'] = 'pop.163.com'
email_params['email_pass'] = 'A邮箱的密码(smtp、pop3的密码)'
interval_time = 5
 
 
def decode_str(s):
  value, charset = decode_header(s)[0]
  if charset:
    value = value.decode(charset)
  return value
 
 
def get_headers(message):
  headers = dict()
  for header in ['From', 'To', 'Subject']:
    value = message.get(header, '')
    if value:
      if header == 'Subject':
        headers['Subject'] = decode_str(value)
      elif header == 'From':
        hdr, addr = parseaddr(value)
        headers['From'] = decode_str(addr)
      elif header == 'To':
        hdr, addr = parseaddr(value)
        headers['To'] = decode_str(addr)
  return headers
 
 
def guess_charset(message):
  charset = message.get_charset()
  if charset is None:
    content_type = message.get('Content-Type', '').lower()
    pos = content_type.find('charset=')
    if pos >= 0:
      charset = content_type[pos + 8:].strip()
  return charset
 
 
def get_content(message):
  for part in message.walk():
    content_type = part.get_content_type()
    charset = guess_charset(part)
    if content_type == 'text/plain' and charset:
      try:
        return part.get_payload(decode=True).decode(charset)
      except AttributeError:
        print('type error')
      except LookupError:
        print("unknown encoding: utf-8")
 
 
def receive_email():
  email_server = poplib.POP3_SSL(email_params['email_pop'])
  email_server.user(email_params['email_user'])
  email_server.pass_(email_params['email_pass'])
  resp, mails, octets = email_server.list()
  index = len(mails)
  if index == 0:
    return None, None
  resp, lines, octets = email_server.retr(index)
  message = b'\r\n'.join(lines).decode('utf-8', 'ignore')
  message = Parser().parsestr(message)
  email_server.quit()
  return get_headers(message), get_content(message)
 
 
def send_email(email_message):
  message = MIMEText(email_message, 'plain', 'utf-8')
  message['Subject'] = Header(email_params['email_subject'], 'utf-8')
  message['From'] = Header(email_params['email_from'])
  message['To'] = Header(','.join(email_params['email_to']), 'utf-8')
 
  email_server = smtplib.SMTP_SSL(email_params['email_smtp'])
  email_server.login(email_params['email_from'], email_params['email_pass'])
  email_server.sendmail(email_params['email_from'], email_params['email_to'], message.as_string())
  email_server.close()
 
 
def exec_operator(exec_content):
  if exec_content == '关机':
    os.system("shutdown -s -t 1")
  elif exec_content == '重启':
    os.system("shutdown -r")
  else:
    os.system(exec_content)
 
 
if __name__ == '__main__':
  while True:
    headers, content = receive_email()
    if headers and content and headers['From'] == email_params['email_exec'] and headers['Subject'] == '目标计算机执行':
      email_message = "目标计算机已接收到指令!开始执行: " + content + " 指令!"
      send_email(email_message)
      exec_operator(content)
    time.sleep(interval_time)

2. 解释说明

A 邮箱:是 163 邮箱,需要开启 smtp、pop3 服务

Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)

上面所说的 smtp、pop3 密码,指的是开启上图所示的服务要设定的密码!!!

B 邮箱:是 QQ 邮箱,只是用来发送执行命令到 A 邮箱的,所以不必开启 smtp、pop2 服务

3. 运行截图

B 邮箱向 A 邮箱发送命令 ?

Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)

B 邮箱从 A 邮箱接收到的反馈邮件 ?

Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)

至于关机的画面,就不展示了,大家自己运行后尝试看吧!(*^_^*)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python入门篇之函数
Oct 20 Python
举例讲解Python程序与系统shell交互的方式
Apr 09 Python
Python版微信红包分配算法
May 04 Python
python 3.5实现检测路由器流量并写入txt的方法实例
Dec 17 Python
Python解决N阶台阶走法问题的方法分析
Dec 28 Python
python 显示数组全部元素的方法
Apr 19 Python
python3实现小球转动抽奖小游戏
Apr 15 Python
python ChainMap 合并字典的实现步骤
Jun 11 Python
Python解释器以及PyCharm的安装教程图文详解
Feb 26 Python
Pyspark获取并处理RDD数据代码实例
Mar 27 Python
jupyter 使用Pillow包显示图像时inline显示方式
Apr 24 Python
Python自然语言处理之切分算法详解
Apr 25 Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 #Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 #Python
Python算法中的时间复杂度问题
Nov 19 #Python
wxPython窗体拆分布局基础组件
Nov 19 #Python
Python解压 rar、zip、tar文件的方法
Nov 19 #Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
Nov 19 #Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
Nov 19 #Python
You might like
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
PHP使用HTML5 FormData对象提交表单操作示例
2019/07/02 PHP
javascript写的一个链表实现代码
2009/10/25 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
jQuery中ajax的post()方法用法实例
2014/12/26 Javascript
JS数组返回去重后数据的方法解析
2017/01/03 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
Vue cli 引入第三方JS和CSS的常用方法分享
2018/01/20 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
Python批量修改文件后缀的方法
2014/01/26 Python
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
Python基础之文件读取的讲解
2019/02/16 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
Python接口测试文件上传实例解析
2020/05/22 Python
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
技校生自我鉴定范文
2013/09/26 职场文书
个人生活学习自我评价范文
2013/11/26 职场文书
平面网站制作专科生的自我评价分享
2013/12/11 职场文书
主持人演讲稿范文
2013/12/28 职场文书
七一党日活动总结
2014/07/08 职场文书
先进事迹演讲稿
2014/09/01 职场文书
干部竞争上岗演讲稿
2014/09/11 职场文书
2014年招生工作总结
2014/11/26 职场文书
2015年中个人总结范文
2015/03/10 职场文书
2015年学校远程教育工作总结
2015/07/20 职场文书