码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-12-27 01:05:29      阅读:550      评论:0      收藏:0      [点我收藏+]

标签:

声明:本篇随笔来源于极客学院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。

 

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

标签:

原文地址:http://www.cnblogs.com/ymdz150805/p/5079291.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!