实现思路:通过检测收件箱中的指定用户发过来的邮件,检测邮件标题,执行指定命令。程序定时检测收件箱中的邮件,分离收件箱中第一封邮件的发件人和标题,若发件人不是指定用户则忽略该邮件;若发件人匹配,检测邮件中的标题,并执行标题中指定指定命令,同时会发送两封邮件出去,一封无意义标题的邮件给自己,防止重复执行命令,一封发到指定用户,告知该用户相应命令已执行。
# -*- coding: cp936 -*- import os, sys, string import poplib import smtplib import time def receive_mail(): #检测邮箱是否接收到指定邮箱发过来的命令邮件 host = "pop3.126.com" # pop3服务器地址 username = "[email protected]" # 用户名 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?=" <[email protected]>‘: 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="[email protected]" #发件邮箱 send_mail_passwd="password" #发件邮箱密码 receive_mail=‘[email protected]‘ #接收邮箱 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: [email protected] <"+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="[email protected]" #发件邮箱 send_mail_passwd="password" #发件邮箱密码 receive_mail=‘[email protected]‘ #接收邮箱 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: [email protected] <"+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
时间: 2024-09-29 16:32:51