利用python收发邮件功能实现远程电脑的控制
2015-08-29 18:33
1001 查看
功能并非原创, 只是重复实现了 http://codecloud.net/python-control-128.html 中描述的功能.
实现功能: 通过给固定邮件地址发送命令(包含在主题中)的方式控制远程电脑实现相应功能(譬如关机等, 可以根据实际需要实现更复杂的功能)
实现原理: 远程电脑不断(每隔10s)利用 python 脚本检查邮件服务器是否有新邮件, 如有则对邮件进行分析, 如果包含可执行命令, 则执行相应命令
你需要的: 装有 PYTHON 的 PC; 最好两个邮箱(一个用于接收命令, 一个用来发邮件); 可选手机邮件客户端(可以实现在手机上发送邮件, 更高大上)
注意: 不要使用163邮箱来接受命令, 每隔 10s 的检查间隔会导致网易拒绝让你登录的~
我反正丧心病狂用学校的服务器. Python 代码如下:
运行待机情况:
然后用手机给我的学号邮箱发个邮件. 主题是 @shutdown -s -t 600
其中 @ 是前导字符, 用于给程序判断这是一个命令. shutdown 等则是10分钟后关机的命令.
等待5-10s, 在PC上就出现了等待关机的提示
同时, 手机上也受到了回复的邮件.
完.
然而暂时并没有什么卵用~
实现功能: 通过给固定邮件地址发送命令(包含在主题中)的方式控制远程电脑实现相应功能(譬如关机等, 可以根据实际需要实现更复杂的功能)
实现原理: 远程电脑不断(每隔10s)利用 python 脚本检查邮件服务器是否有新邮件, 如有则对邮件进行分析, 如果包含可执行命令, 则执行相应命令
你需要的: 装有 PYTHON 的 PC; 最好两个邮箱(一个用于接收命令, 一个用来发邮件); 可选手机邮件客户端(可以实现在手机上发送邮件, 更高大上)
注意: 不要使用163邮箱来接受命令, 每隔 10s 的检查间隔会导致网易拒绝让你登录的~
我反正丧心病狂用学校的服务器. Python 代码如下:
# -*- coding: utf-8 -*- import poplib,email,re from email.header import decode_header import smtplib from email.mime.text import MIMEText import time import os,sys import random def send_mail(to_mail_addr, message): from_mail_addr = "****@fudan.edu.cn" password = "****" smtp_server = "mail.fudan.edu.cn" #smtp_server message = "Hello, mission received: \n \t \t" + message msg = MIMEText(message, 'plain', 'gb2312') msg['Subject'] = 'This is a reply msg by PythonMailControl' msg['From'] = from_mail_addr msg['To'] = to_mail_addr server = smtplib.SMTP(smtp_server, 25) server.set_debuglevel(1) server.login(from_mail_addr, password) server.sendmail(from_mail_addr, [to_mail_addr], msg.as_string()) server.quit() def get_last_mail(): try: host = 'mail.fudan.edu.cn' # pop3 server username = '****@fudan.edu.cn' password = '****' p = poplib.POP3_SSL(host) p.user(username) p.pass_(password) ret = p.stat() except poplib.error_proto,e: print "Login failed:",e return (-2,0,0) # error code, nonsense, nonsense mail_number = ret[0] # return the total number of mails ret = p.list() down = p.retr(1) # return the last received mail return (1,mail_number,down) if __name__ == "__main__": mail_number_old = 0 while 1: (error,mail_number,down) = get_last_mail() if (error==1) and (mail_number != mail_number_old): # no error and have new mail mail_number_old = mail_number for line in down[1]: # check the mail line by line, get the sender and subject if line[0:4]=="From": from_mail_addr = re.search( '[0-9a-zA-Z_]*@[0-9a-zA-Z_.]*', line).group(0) if line[0:7]=="Subject": content = line[9:] if content[0] == '@': # response according to the subject cmd = content[1:] try: os.system(cmd) # do sth. send_mail(from_mail_addr,cmd) # reply message to the mail sender except: os.system('echo error') time.sleep(10)
运行待机情况:
然后用手机给我的学号邮箱发个邮件. 主题是 @shutdown -s -t 600
其中 @ 是前导字符, 用于给程序判断这是一个命令. shutdown 等则是10分钟后关机的命令.
等待5-10s, 在PC上就出现了等待关机的提示
同时, 手机上也受到了回复的邮件.
完.
然而暂时并没有什么卵用~
相关文章推荐
- Python 函数之参数、局部变量
- Python扫描内网存活的主机
- python2.7 beautifulsoup学习使用
- python2.7 beautifulsoup安装下载
- Python分词模块推荐:jieba中文分词
- python内置函数汇总(2)
- python类型转换、数值操作
- Python 函数之函数定义、调用、传参
- Python找回MySQL密码
- Python之包管理工具
- Python中的编码问题
- 理解Python中的with…as…语法
- python 类和对象的属性
- python 有关super
- Python爬虫框架Scrapy教程(1)—入门
- Python - 带参数的方法
- Python爬虫框架Scrapy教程(1)—入门
- 2015/8/28 Python基础(2):对象
- 2015/8/26 Python基础(1):基本规则及赋值
- python - os模块中比较有用的部分