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

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

# -*- 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

利用python 通过邮件执行系统命令的相关文章

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

功能并非原创, 只是重复实现了 http://codecloud.net/python-control-128.html 中描述的功能. 实现功能: 通过给固定邮件地址发送命令(包含在主题中)的方式控制远程电脑实现相应功能(譬如关机等, 可以根据实际需要实现更复杂的功能) 实现原理: 远程电脑不断(每隔10s)利用 python 脚本检查邮件服务器是否有新邮件, 如有则对邮件进行分析, 如果包含可执行命令, 则执行相应命令 你需要的: 装有 PYTHON 的 PC; 最好两个邮箱(一个用于接收命

windows linux 使用python执行系统命令并将结果保存到变量

最近需要用到os.system 发现不能赋值到变量 后查有更新的模块,如下: os.system os.spawn* os.popen* popen2.* commands.* 重新使用content=os.popen('help').read() 就能获取到了 import pyodbcimport sysimport osimport commands #python conn sql server2008R2conn = pyodbc.connect( driver='{sql serve

Windows下利用Python动态检测外网IP并发邮件给邮箱

我们知道,运营商给分配的都是动态IP,IP地址过一段时间会自己变化,这就给需要静态地址的应用带来不便,例如搭建服务器或者远程控制电脑,这种情况必须知道自己电脑的IP,利用Python可以方便的自动检测并向邮箱发送邮箱. 但是,个人网络一般都是通过路由器来上网,直接检测电脑的IP并不可行,需要得到外网的IP.内网电脑可以通过端口映射来映射到外网.检测的原理如下: 1.通过自己的电脑信息不太好获取外网IP,幸好有一些雷锋网站可以帮助我们来检测,例如 http://city.ip138.com/ip2

Python执行系统命令的方法

Python中执行系统命令常见方法有两种: 两者均需 import os (1) os.system # 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 system(command) -> exit_statusExecute the command (a string) in a subshell. # 如果再命令行下执行,结果直接打印出来 1 >>> os.system('ls') 2 04101419778.CHM   bash      document  

Python中执行系统命令常见的几种方法--转载

Python中执行系统命令常见的几种方法 Python中执行系统命令常见的几种方法有: (1)os.system # 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 # 如果再命令行下执行,结果直接打印出来 例如: >>> import os >>> os.system('ls') chk_err_log.py CmdTool.log  install_log.txt  install_zabbix.sh  manage_deploy.sh  MegaSA

python利用unittest进行测试用例执行的几种方式

利用python进行测试时,测试用例的加载方式有2种: 一种是通过unittest.main()来启动所需测试的测试模块:  一种是添加到testsuite集合中再加载所有的被测试对象,而testsuit里存放的就是所需测试的用例,下面分别列出3种方法的具体使用方式:1.通过unittest.main()来执行测试用例的方式: import unittest class UCTestCase(unittest.TestCase):    def setUp(self):        #测试前需

转 Python执行系统命令的方法

传送门 Python执行系统命令的方法 http://www.linux-field.com/?p=15 Python中执行系统命令常见方法有两种: 两者均需 import os (1) os.system # 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 system(command) -> exit_statusExecute the command (a string) in a subshell. # 如果再命令行下执行,结果直接打印出来 1 >>> os.

python基础之使用os.system来执行系统命令

今天我们来尝试使用python 的os.system来执行系统命令 可以使用如下方法: import osprint os.system('ping www.baidu.com') 输出的结果是:64 bytes from 223.26.58.21: icmp_seq=0 ttl=245 time=36.798 ms64 bytes from 223.26.58.21: icmp_seq=1 ttl=244 time=37.561 ms64 bytes from 223.26.58.21: ic

使用Python执行系统命令方法有哪些?

Python是一款操作简单的编程语言,内置丰富的库,能够很容易的实现强大的功能,在使用Python进行框架搭建时,往往需要用到Python执行系统命令,一些开发人员对此不熟悉,以下是具体的操作方法: 1. os.system() 这个方法直接调用标准C的system()函数,仅仅在一个子终端运行系统命令,而不能获取执行返回的信息. >>> import os >>> output = os.system('cat  /proc/cpuinfo') processor :