python收发邮件控制键盘_利用python收发邮件功能实现远程电脑的控制

功能并非原创, 只是重复实现了 http://codecloud.net/python-control-128.html 中描述的功能.

实现功能: 通过给固定邮件地址发送命令(包含在主题中)的方式控制远程电脑实现相应功能(譬如关机等, 可以根据实际需要实现更复杂的功能)

实现原理: 远程电脑不断(每隔10s)利用 python 脚本检查邮件服务器是否有新邮件, 如有则对邮件进行分析, 如果包含可执行命令, 则执行相应命令

你需要的: 装有 PYTHON 的 PC; 最好两个邮箱(一个用于接收命令, 一个用来发邮件); 可选手机邮件客户端(可以实现在手机上发送邮件, 更高大上)

注意: 不要使用163邮箱来接受命令, 每隔 10s 的检查间隔会导致网易拒绝让你登录的~

我反正丧心病狂用学校的服务器.  Python 代码如下:

1 #-*- coding: utf-8 -*-

2

3 importpoplib,email,re4 from email.header importdecode_header5 importsmtplib6 from email.mime.text importMIMEText7 importtime8 importos,sys9 importrandom10

11

12 defsend_mail(to_mail_addr, message):13 from_mail_addr = "****@fudan.edu.cn"

14 password = "****"

15 smtp_server = "mail.fudan.edu.cn" #smtp_server

16

17 message = "Hello, mission received: \n \t \t" +message18 msg = MIMEText(message, 'plain', 'gb2312')19 msg['Subject'] = 'This is a reply msg by PythonMailControl'

20 msg['From'] =from_mail_addr21 msg['To'] =to_mail_addr22

23 server = smtplib.SMTP(smtp_server, 25)24 server.set_debuglevel(1)25 server.login(from_mail_addr, password)26 server.sendmail(from_mail_addr, [to_mail_addr], msg.as_string())27 server.quit()28

29

30 defget_last_mail():31 try:32 host = 'mail.fudan.edu.cn' #pop3 server

33 username = '****@fudan.edu.cn'

34 password = '****'

35 p =poplib.POP3_SSL(host)36 p.user(username)37 p.pass_(password)38 ret =p.stat()39 exceptpoplib.error_proto,e:40 print "Login failed:",e41 return (-2,0,0) #error code, nonsense, nonsense

42

43 mail_number = ret[0] #return the total number of mails

44 ret =p.list()45 down = p.retr(1) #return the last received mail

46 return (1,mail_number,down)47

48

49 if __name__ == "__main__":50 mail_number_old =051 while 1:52 (error,mail_number,down) =get_last_mail()53 if (error==1) and (mail_number != mail_number_old): #no error and have new mail

54 mail_number_old =mail_number55 for line in down[1]: #check the mail line by line, get the sender and subject

56 if line[0:4]=="From":57 from_mail_addr = re.search( '[0-9a-zA-Z_]*@[0-9a-zA-Z_.]*', line).group(0)58 if line[0:7]=="Subject":59 content = line[9:]60 if content[0] == '@': #response according to the subject

61 cmd = content[1:]62 try:63 os.system(cmd) #do sth.

64 send_mail(from_mail_addr,cmd) #reply message to the mail sender

65 except:66 os.system('echo error')67 time.sleep(10)

运行待机情况:

然后用手机给我的学号邮箱发个邮件. 主题是 @shutdown -s -t 600

其中 @ 是前导字符, 用于给程序判断这是一个命令. shutdown 等则是10分钟后关机的命令.

等待5-10s, 在PC上就出现了等待关机的提示

同时, 手机上也受到了回复的邮件.

完.

然而暂时并没有什么卵用~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值