利用python 通过邮件执行系统命令


实现思路:通过检测收件箱中的指定用户发过来的邮件,检测邮件标题,执行指定命令。程序定时检测收件箱中的邮件,分离收件箱中第一封邮件的发件人和标题,若发件人不是指定用户则忽略该邮件;若发件人匹配,检测邮件中的标题,并执行标题中指定指定命令,同时会发送两封邮件出去,一封无意义标题的邮件给自己,防止重复执行命令,一封发到指定用户,告知该用户相应命令已执行。

# -*- 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?=" ':
        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