神操作!发个邮件用Python实现远程自动关机

Python功能强大,简单易学,很多人不知道如何学习,觉得学习很枯燥。其实趣味学习是最好的方法,比如,你经常忘记关闭办公室的电脑,又不想半路返回单位,就可以用python写一个远程操控的自动关机程序,试想一下,当你掏出手机进行几步简单的操作就可以实现对其他电脑的远程控制,是不是很酷!

要点:

通过邮件的自动接收与发送实现对目标电脑的远程操控

首先在目标电脑上建立一个监听线程用来实时接收邮件

当使用手机对邮箱发送关闭电脑相关主题邮件时

目标电脑就会读取邮件主题文字作为指令并执行

以实现自动关机的目的

一.邮件收发

用于接收和发送邮件的邮箱可任意指定(可以是同一邮箱),不过要想使用邮箱的自动收发功能,还需要生成特定的授权码,一般来说QQ、163等邮箱都支持此类操作。以QQ邮箱为例,可以在“设置—账户”页面进行设置(下图)

(1)邮件接收

首先要明确用于接收邮件的地址ADDR、对应的16位授权码PASSWORD以及接收邮件服务POP_SERVER

连接到POP服务器:

提取当前收件箱中最新的一封邮件,由于邮件数据是经过编码的,这里我们依次尝试utf8、gbk、big5三种编码格式进行解码,并提取邮件标题部分数据

其中emailsub通常包括两个信息,一个是编码后的标题文本数据,另一个是其编码格式,所以我们还需要再进行一次解码,这时获得的才是真正可用的标题文本数据。

(代码可以左右滑动)

(2)邮件发送

接下来再说一下邮件的自动发送,至于为什么需要设置邮件自动发送功能后面会讲到,这里暂时不提。

与邮件接收功能类似,自动发送邮件需要提供用于发送邮件的邮箱地址FROM_ADDR、授权码PASSWORD、目标邮件地址ADDR以及邮件发送服务SMTP_SERVER

然后连接SMTP服务:

(代码可以左右滑动)

相对邮件接收来说,发送邮件不需要进行编码格式转换,只需要按照特定格式设置邮件内容msg并发送即可

(代码可以左右滑动)

二.关机设置

现在开始设计我们的核心功能来实现自动关机,针对自动接收到的邮件标题文本进行关键字识别,由于这里的关键字完全是自己指定的,所以说这部分的自由度非常之高,我们完全可以根据自身的需求和习惯设置任意关键字作为执行指令,比如我在这里设置了两种指令:

“延时关机 XX”关键字:触发shutdown指令,使目标电脑在XX秒后关机,默认在60秒后关机。

“定时关机 XX:XX”关键字:触发schtasks指令,使目标电脑在每天的XX时XX分关机,默认在00:00(零点) 关机。

如果接收到有效邮件并执行了关机相关操作则返回True,否则返回False。代码如下:

(代码可以左右滑动)

三.实例演示

目前为止几个主要的功能模块都构建完毕了,接下来我们对其进行整合:

1).按照本文开头所讲的设计思路,需要持续监测目标邮箱中的最新邮件,如果发现关机关键字则执行对应的关机指令,考虑到邮件发送的网络延时这里对每次监测之间设置了一个5秒的时间间隔。

2).另外,为了避免同一封包含关机指令的邮件被反复读取执行,还需要在关机命令执行后自动发送一封不包含关机指令的新邮件对其进行覆盖,这就是设置邮件自动发送功能的原因,实现代码如下:

现在我们进行实际操作测试,首先在目标电脑中运行程序,通过手机向目标邮箱发送一个主题名为"延时关机"的邮件,会发现系统弹出“1分钟内关机”的提示,证明延时关机功能没有问题。

然后测试一下定时关机功能,同样向目标邮箱发送主题名为“定时关机 12:30”的邮件,打开系统的任务计划程序,会发现多了一个定时关机的计划任务,说明定时关机功能也是成功的。

其实整个思路非常简单,跟我们上次的Python量化文章类似都是利用Python的smtp,email和poplib模块来监控我们的邮箱,然后提取关键字进行处理,非常有趣。上面只是抛砖引玉,大家可以发散增加很多功能!

小密圈:菜鸟玩Python

发现很多同学有入门的问题,一个人很容易放弃,遇到问题没有人系统全面的指导,想要快速入门,抱团取暖,借力发力才是王道。

现在我们菜鸟学Python开放了第二期小密圈,对于零基础的同学,我们一条龙服务,尽全力帮你入门。

当然我们的内容不只是入门,有很多趣味和实战的训练营活动,等你来参加。

扫码加入小密圈

联系小助手,跟我们保持联系

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181016B0PTI400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券