利用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?=" <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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】