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

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

时间: 2024-10-07 06:07:05

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

python 收发邮件

今天记录一下如何使用python收发邮件,知识要点在python内置的poplib和stmplib模块的使用上. 1. 准备工作 首先,我们需要有一个测试邮箱,我们使用新浪邮箱,而且要进行如下设置: 在新浪邮箱首页的右上角找到设置->更多设置,然后在左边选择"客户端/pop/imap/smtp": 最后,将Pop3/smtp服务的服务状态打开即可: 2. poplib接收邮件 首先,介绍一下poplib登录邮箱和下载邮件的一些接口: self.popHost = 'pop.sin

linux 下 搭建邮件邮件服务器(Postfix+Dovecot)(二)-基于mysql的虚拟账户登陆收发邮件

使用虚拟用户收发邮件安装九.安装Courier authentication library 1.courier简介courier-authlib 是Courier组件中的认证库,它是courier组件中一个独立的子项目,用于为courier的其它组件提供认证服务.其认证功能通常包括验证登录时的账号和密码.获取一个相关的家目录或邮件目录等信息.改变账号的密码.而其认证的实现方式也包括基于PAM通过/etc/passwd和/etc/shadow进行认证,基于GDBM或DB进行认证,基于LDAP/M

深度学习入门:基于Python的理论与实现 高清中文版PDF电子版下载附源代码

本书特色1.日本深度学习入门经典畅销书,原版上市不足2年印刷已达100 000册.长期位列日亚"人工智能"类图书榜首,超多五星好评.2.使用Python 3,尽量不依赖外部库或工具,从零创建一个深度学习模型.3.示例代码清晰,源代码可下载,需要的运行环境非常简单.读者可以一边读书一边执行程序,简单易上手.4.使用平实的语言,结合直观的插图和具体的例子,将深度学习的原理掰开揉碎讲解,简明易懂.5.使用计算图介绍复杂的误差反向传播法,非常直观.6.相比AI圣经"花书",

对比学习资料《深度学习入门:基于Python的理论与实现》+《深度学习原理与实践》+《深度学习理论与实战基础篇》电子资料

我认为<深度学习入门:基于Python的理论与实现>电子书代码基本原理,简洁清楚,所用数学基本就是大一水平,适合做第一本入门书. <深度学习入门:基于Python的理论与实现>书代码实现的神经网络全是用numpy,超级适合刚刚入门想了解神经网络,数学不好看公式看不懂的人,看完这本基本就懂深度学习是弄啥子了. 如果连这本都看不懂的话,可以去看<Python神经网络编程>.我个人认为这两本书是最简单直白的方式让人理解神经网络的了. <深度学习原理与实践>电子书代

DouNet学习_收发邮件

一.收发邮件 --->第一步:发邮件首先要有发送者的邮箱地址和登录的密码才能发送 这些都写在APP里  不要写死 --->第二步:发邮件就要有网络,要添加net.Mail命名空间 要发送的邮件的对象 MaileMessage  mail=new MaileMessage(); 设置发信人的地址 maile.From=new MaileMessage(发件人的地址); 设置收信人的地址 mail.To.Add(new MaileMessage(收件人的地址)); 设置标题 mail.Subjec

python day8 学习整理

今天的学习内容如下: 1.上节课复习 面向对象的三大特性:继承,多态,封装 绑定方法与非绑定方法 反射 2.面向对象的高级用法1 __str__,属于类的内置方法和__init__一样,比如说你定义了一个类 1 class Foo: 2 def __init__(self,name,age): 3 self.name = name 4 self.age = age 5 6 obj = Foo('egon',18) 7 print(obj) ###会打印 出obj是类Foo下面的一个对象,打印内存

[Python]webservice 学习(4) -- Django+soap

前面学习使用soaplib搭建基于soap的webservice服务,我这个web项目其实只是要提供一两个webservice接口,如果直接写两个脚本外挂感觉挺麻烦,于是想能不能和web框集成到一起.于是在google上搜索,最后在github上找到了这么一段代码,原文地址为https://gist.github.com/rotaris/935809,于是我写简单写了一个demo放到了github上.代码上没有什么变化,只是直接创建了一个小项目,也许能容易看. 项目地址为: https://gi

在命令行上 使用 mutt, fetchmail, maildrop, msmtp 收发邮件

基于shell 现在已经有了 Mail.app, Thunderbird, Outlook 这些图形化工具能很方便的处理邮件,为啥还需要 mutt 这种命令行文本方式的邮件工具呢?mutt 的一个优势是占用资源小,可以很好的运行在低配置的虚拟机或古老的电脑上(应该不会有人想在 256MB 内存的虚拟机或 VPS 上用 X Window/Gnome/Thunderbird 这种组合吧).那为什么要在虚拟机上收发邮件呢,不能在自己电脑上处理邮件吗?可能有多个电脑而且电脑经常换,电脑可能被盗,硬盘可能

Python基础学习(九)

Python 多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 程序的运行速度可能加快 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. 线程在执行过程中与进程还是有区别的.每个独立的线程有一个程序运行的入口.顺序执行序列和程序的出口.