您的位置:首页 > 编程语言 > Python开发

python初级学习之基于收发邮件的远程控制程序

2016-01-01 21:54 786 查看
声明:本篇随笔来源于极客学院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 = ‘xxxxxx@sina.com‘ #用户名
password = ‘xxxxx‘                    #密码
mail_usr=‘xxxxxx‘                    #用户
mail_postfix=‘sina.com‘           #后缀名
mailto_list=[‘xxxxxxxx@sina.com‘]    #接受列表,这里没有什么用处
#接受邮件函数
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==‘xxxxx@qq.com‘:  #仅仅是特定邮箱发送过来的方才会执行命令
execute(subjcet)
send_mail(mailto_list,‘stop‘,‘‘) #自己发送给自己,防止再次执行命令
if sender==‘xxxxxxx@sina.com‘:
break
time.sleep(5)
run(host,username,password)


注意:如果要实现运行成功上面的小程序就必须开通smtp/pop3协议,可以在邮箱设置中打开。目前,亲测能用的就是是新浪邮箱了,其他邮箱如qq邮箱,网易邮箱等由于非自身的客户端登陆需要客户端授权码(不知道是什么的可自行百度,这里不作解释),比较麻烦,所以没有尝试。有兴趣的同学,可尝试一下,如果成功了还望告知一声,万分感激。。

   总结:

          无声无息地把它运行在舍友的电脑上,当他玩游戏玩得正入迷时,突然电脑弹出个贞子的照片,脑补那画面也是醉了。。

         通过这个小程序,我了解了邮件的接收协议,以及一些我从来不知道的api,让我更加有兴趣去探索python的世界。

        人生苦短,我用python。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: