实现思路:通过检测收件箱中的指定用户发过来的邮件,检测邮件标题,执行指定命令。程序定时检测收件箱中的邮件,分离收件箱中第一封邮件的发件人和标题,若发件人不是指定用户则忽略该邮件;若发件人匹配,检测邮件中的标题,并执行标题中指定指定命令,同时会发送两封邮件出去,一封无意义标题的邮件给自己,防止重复执行命令,一封发到指定用户,告知该用户相应命令已执行。
# -*- coding: cp936 -*-
import os, sys, string
import poplib
import smtplib
import time
def receive_mail(): #检测邮箱是否接收到指定邮箱发过来的命令邮件
host = "pop3.126.com" # pop3服务器地址
username = "abc@126.com" # 用户名
password = "password" # 密码
pp = poplib.POP3(host) # 创建一个pop3对象,这个时候实际上已经连接上服务器了
pp.set_debuglevel(1) # 设置调试模式,可以看到与服务器的交互信息
pp.user(username) # 向服务器发送用户名
pp.pass_(password) # 向服务器发送密码
ret = pp.stat() # 获取服务器上信件信息,返回是一个列表,第一项是一共有多上封邮件,第二项是共有多少字节
down = pp.retr(ret[0]) #获取第一封邮件
# 输出邮件内容
#for line in down[1]:
# print line
getfrom=down[1][9].decode('utf-8')0
getsubject=down[1][11].decode('utf-8')
pp.quit() # 退出
if getfrom!='From: "=?utf-8?B?5qKB6ZSm5r2u?=" <cde@126.com>':
pass
else:
if getsubject=='Subject: reboot':
return 1
elif getsubject=='Subject: restartmq':
return 2
elif getsubject=='Subject: ifconfig':
return 3
else:
return 0
def sendmail():
send_mail="abc@126.com" #发件邮箱
send_mail_passwd="password" #发件邮箱密码
receive_mail='abc@126.com' #接收邮箱
send_mail_server='smtp.126.com' #发件邮箱smtp服务器
mail_to = smtplib.SMTP(send_mail_server,25)
mail_to.login(send_mail,send_mail_passwd)
msg = "From: 123@123.com <"+send_mail+""">
To: <"""+receive_mail+""">
Subject: igorn mess
igorn mess
"""
mail_to.sendmail(send_mail,receive_mail,msg)
mail_to.close()
def sendreply():
send_mail="abc@126.com" #发件邮箱
send_mail_passwd="password" #发件邮箱密码
receive_mail='cde@126.com' #接收邮箱
send_mail_server='smtp.126.com' #发件邮箱smtp服务器
mail_to = smtplib.SMTP(send_mail_server,25)
mail_to.login(send_mail,send_mail_passwd)
msg = "From: 123@123.com <"+send_mail+""">
To: <"""+receive_mail+""">
Subject: order excu
order excu
"""
mail_to.sendmail(send_mail,receive_mail,msg)
mail_to.close()
if __name__=='__main__':
while 1:
time.sleep(5)
if receive_mail()==1:
sendmail()
sendreply()
os.system('shutdown -r now')
elif receive_mail()==2:
sendmail()
sendreply()
os.system('restartmq')
elif receive_mail()==3:
sendmail()
sendreply()
os.system('ifconfig')
else:
pass