声明:本篇随笔来源于极客学院python学习之通过微信控制电脑,但内容不尽相同,实现的思想是面向过程,抛弃了许多东西。(如日志打印等,这里不作分析,有兴趣的读者可以去极客学院找教学视频看看)
python远程控制小程序功能简析:
1:能够打开电脑中的想要打开的文件;如打开一张照片,播放一首音乐,运行qq等。
2:能够调用电脑系统命令关机等。
要用到的知识:
模块:os(系统命令)
win32api(打开电脑文件)(需要下载模块pywin32),可用pip直接下载。附api文档链接 http://docs.activestate.com/activepython/2.7/pywin32/win32api.html
time(使程序等待)
re(正则表达式,获取邮件标题与发信人)
poplib(提供收取邮件协议Pop3)
smtplib(提供发送邮件协议smtp)
核心代码: os.system("command"); win32api.ShellExecute(0,‘open‘,command,‘‘,‘‘,0),remail(host,username,password)(接受邮件函数),send_mail(tolist,sub,content)(发送邮件函数)
----------------------------------我是分割线-----------------------------------------------------------------------------------------------
什么是smtp协议?
SMTP 是一种TCP协议支持的提供可靠且有效电子邮件传输的应用层协议。SMTP 是建立在 TCP上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知
什么是Pop3协议?
POP 协议支持“离线”邮件处理。其具体过程是:邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是PC机或 MAC。一旦邮件发送到 PC 机或MAC上,邮件服务器上的邮件将会被删除。但目前的POP3邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的POP3协议。
文字艰涩难懂,有图有真相,smtp协议与Pop3协议运作图(来源于书本,大家将就)
好吧,实在是文笔水平有限!废话就不多说了,上代码
#coding:utf-8 import poplib import re import smtplib import win32api import time from email.mime.text import MIMEText host = ‘pop.sina.com‘ #pop服务器地址 mail_host=‘smtp.sina.com‘ #smtp服务器地址 username = ‘[email protected]‘ #用户名 password = ‘xxxxx‘ #密码 mail_usr=‘xxxxxx‘ #用户 mail_postfix=‘sina.com‘ #后缀名 mailto_list=[‘[email protected]‘] #接受列表,这里没有什么用处 #接受邮件函数 def remail(host,username,password): pop_conn = poplib.POP3_SSL(host) pop_conn.user(username) pop_conn.pass_(password) ret=pop_conn.list() mailbody=pop_conn.retr(len(ret[1])) subject=re.search("Subject: (.*?)‘,",str(mailbody[1]).decode(‘utf-8‘),re.S).group(1) sender=re.search("X-Sender: (.*?)‘,",str(mailbody[1]).decode(‘utf-8‘),re.S).group(1) print sender,subject return sender,subject #发送邮件函数 def send_mail(tolist,sub,content): me=‘self‘+‘<‘+mail_usr+‘@‘+mail_postfix+‘>‘ msg=MIMEText(content,_subtype=‘palin‘,_charset=‘utf-8‘) msg[‘Subject‘]=sub msg[‘From‘]=me msg[‘To‘]=‘;‘.join(tolist) try: server=smtplib.SMTP() server.connect(mail_host) server.login(mail_usr,password) server.sendmail(me,tolist,msg.as_string()) server.close() return True except Exception,e: print str(e) return False #执行命令 def execute(command): win32api.ShellExecute(0,‘open‘,command,‘‘,‘‘,1) #运行 def run(host,username,password): while True: sender,subjcet=remail(host,username,password) #获取第一个邮件,获取发送人信息,邮件主题 if sender==‘[email protected]‘: #仅仅是特定邮箱发送过来的方才会执行命令 execute(subjcet) send_mail(mailto_list,‘stop‘,‘‘) #自己发送给自己,防止再次执行命令 if sender==‘[email protected]‘: break time.sleep(5) run(host,username,password)
注意:如果要实现运行成功上面的小程序就必须开通smtp/pop3协议,可以在邮箱设置中打开。目前,亲测能用的就是是新浪邮箱了,其他邮箱如qq邮箱,网易邮箱等由于非自身的客户端登陆需要客户端授权码(不知道是什么的可自行百度,这里不作解释),比较麻烦,所以没有尝试。有兴趣的同学,可尝试一下,如果成功了还望告知一声,万分感激。。
总结:
无声无息地把它运行在舍友的电脑上,当他玩游戏玩得正入迷时,突然电脑弹出个贞子的照片,脑补那画面也是醉了。。
通过这个小程序,我了解了邮件的接收协议,以及一些我从来不知道的api,让我更加有兴趣去探索python的世界。
人生苦短,我用python。