python初级学习之基于收发邮件的远程控制程序

本文介绍如何使用Python编程实现远程控制电脑的功能,包括打开文件、播放音乐、运行软件及系统命令如关机。重点讲解了os、win32api、time、re、poplib、smtplib等模块的运用,以及SMTP和POP3协议的基本概念。通过实例代码展示了如何接收邮件触发自动化任务,发送邮件通知,以及如何执行特定命令。文章提供了邮件接收与发送的函数实现,帮助读者了解邮件协议并实践Python在自动化场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:本篇随笔来源于极客学院python学习之通过微信控制电脑,但内容不尽相同,实现的思想是面向过程,抛弃了许多东西。(如日志打印等,这里不作分析,有兴趣的读者可以去极客学院找教学视频看看)

python远程控制小程序功能简析:

1:能够打开电脑中的想要打开的文件;如打开一张照片,播放一首音乐,运行qq等。

2:能够调用电脑系统命令关机等。

要用到的知识:

模块:os(系统命令)  

        win32api(打开电脑文件)(需要下载模块pywin32),可用pip直接下载。附api文档链接 http://docs.activestate.com/activepython/2.7/pywin32/win32api.html

        time(使程序等待)  

        re(正则表达式,获取邮件标题与发信人)  

        poplib(提供收取邮件协议Pop3)        

        smtplib(提供发送邮件协议smtp)

核心代码: os.system("command");  win32api.ShellExecute(0,‘open‘,command,‘‘,‘‘,0),remail(host,username,password)(接受邮件函数),send_mail(tolist,sub,content)(发送邮件函数)

 

----------------------------------我是分割线-----------------------------------------------------------------------------------------------

什么是smtp协议?

SMTP 是一种TCP协议支持的提供可靠且有效电子邮件传输的应用层协议。SMTP 是建立在 TCP上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知

 

什么是Pop3协议?

 

POP 协议支持“离线”邮件处理。其具体过程是:邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是PC机或 MAC。一旦邮件发送到 PC 机或MAC上,邮件服务器上的邮件将会被删除。但目前的POP3邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的POP3协议。

 

文字艰涩难懂,有图有真相,smtp协议与Pop3协议运作图(来源于书本,大家将就)

技术分享

 好吧,实在是文笔水平有限!废话就不多说了,上代码

#coding:utf-8
import poplib
import re
import smtplib
import win32api
import time
from email.mime.text import MIMEText
host = pop.sina.com         #pop服务器地址
mail_host=smtp.sina.com  #smtp服务器地址
username = xxxxxx@sina.com #用户名
password = xxxxx                    #密码
mail_usr=xxxxxx                    #用户
mail_postfix=sina.com           #后缀名
mailto_list=[xxxxxxxx@sina.com]    #接受列表,这里没有什么用处
#接受邮件函数
def remail(host,username,password):
    pop_conn = poplib.POP3_SSL(host)
    pop_conn.user(username)
    pop_conn.pass_(password)
    ret=pop_conn.list()
    mailbody=pop_conn.retr(len(ret[1]))
    subject=re.search("Subject: (.*?)‘,",str(mailbody[1]).decode(utf-8),re.S).group(1)
    sender=re.search("X-Sender: (.*?)‘,",str(mailbody[1]).decode(utf-8),re.S).group(1)
    print sender,subject
    return sender,subject
#发送邮件函数
def send_mail(tolist,sub,content):
    me=self+<+mail_usr+@+mail_postfix+>
    msg=MIMEText(content,_subtype=palin,_charset=utf-8)
    msg[Subject]=sub
    msg[From]=me
    msg[To]=;.join(tolist)
    try:
        server=smtplib.SMTP()
        server.connect(mail_host)
        server.login(mail_usr,password)
        server.sendmail(me,tolist,msg.as_string())
        server.close()
        return True
    except Exception,e:
        print str(e)
        return False
#执行命令
def execute(command):
    win32api.ShellExecute(0,open,command,‘‘,‘‘,1)
#运行
def run(host,username,password):
    while True:
        sender,subjcet=remail(host,username,password) #获取第一个邮件,获取发送人信息,邮件主题
        if sender==xxxxx@qq.com:  #仅仅是特定邮箱发送过来的方才会执行命令
            execute(subjcet)
            send_mail(mailto_list,stop,‘‘) #自己发送给自己,防止再次执行命令
        if sender==xxxxxxx@sina.com:
            break
        time.sleep(5)
run(host,username,password)

注意:如果要实现运行成功上面的小程序就必须开通smtp/pop3协议,可以在邮箱设置中打开。目前,亲测能用的就是是新浪邮箱了,其他邮箱如qq邮箱,网易邮箱等由于非自身的客户端登陆需要客户端授权码(不知道是什么的可自行百度,这里不作解释),比较麻烦,所以没有尝试。有兴趣的同学,可尝试一下,如果成功了还望告知一声,万分感激。。

   总结:

          无声无息地把它运行在舍友的电脑上,当他玩游戏玩得正入迷时,突然电脑弹出个贞子的照片,脑补那画面也是醉了。。

         通过这个小程序,我了解了邮件的接收协议,以及一些我从来不知道的api,让我更加有兴趣去探索python的世界。

        人生苦短,我用python。

<think>我们正在开发一个消防报警控制器的系统软件。根据引用内容,我们可以借鉴智能火灾报警器系统(引用[1])和消防器材图像识别系统(引用[2])的设计思路,同时参考自检函数(引用[3])和智能家居中的消防系统功能(引用[4])。系统需求分析:1.监测环境参数:温度、湿度、烟雾浓度(引用[1])2.报警功能:当环境参数超过阈值时,触发声光报警(引用[1]和引用[3])3.自检功能:检查报警器硬件(LED、声音传感器)是否正常工作(引用[3])4.数据上传与远程监控:将数据上传到服务器,用户可通过手机或电脑查看(引用[1])5.扩展功能:如引用[2]中的消防器材识别(可选,但可以整合)系统架构设计:1.硬件层:传感器(温湿度、烟雾)、执行器(声光报警器)、主控板(如ESP-WROOM-32)2.软件层:运行在硬件上的MicroPython/Python程序(数据采集、报警逻辑、自检)3.服务器层(可选):接收数据并存储,提供Web界面(可以用Django,引用[2])4.客户端:手机APP或网页,展示数据折线图和报警信息(引用[1])开发步骤:第一步:硬件连接与驱动-连接温度传感器(如DS18B20)、湿度传感器(如DHT11)、烟雾传感器(MQ-2)到主控板(如ESP32)-连接LED和蜂鸣器作为声光报警器第二步:编写硬件驱动和传感器读取代码(MicroPython)-读取传感器数据并转换成实际物理量第三步:实现主循环程序(核心逻辑)-定时读取传感器数据-判断是否超过阈值,若超过则触发报警-实现自检功能(定期或手动触发)第四步:实现通信功能-通过WiFi将数据上传到服务器(使用MQTT或HTTP协议)第五步:服务器端开发(可选,如果需要远程监控)-使用Django框架搭建Web服务(引用[2])-数据库设计(MySQL,存储传感器数据、报警记录等)第六步:客户端开发-提供Web界面,展示实时数据折线图(可以使用ECharts等)-报警信息推送(如短信、邮件、App推送)第七步:系统测试-包括硬件测试、软件测试、集成测试具体代码示例(MicroPython部分):注意:以下代码仅为示例,具体硬件引脚和传感器型号可能需要调整。1.传感器读取示例:```pythonimportmachineimportdhtimportonewireimportds18x20#初始化DHT11(温湿度)dht_pin=machine.Pin(4)dht_sensor=dht.DHT11(dht_pin)#初始化DS18B20(温度,可选)ow=onewire.OneWire(machine.Pin(5))ds_sensor=ds18x20.DS18X20(ow)#初始化烟雾传感器(模拟输入)smoke_pin=machine.ADC(machine.Pin(34))smoke_pin.atten(machine.ADC.ATTN_11DB)#设置量程为0-3.3Vdefread_dht11():dht_sensor.measure()temp=dht_sensor.temperature()hum=dht_sensor.humidity()returntemp,humdefread_smoke():#读取模拟值,并转换为电压value=smoke_pin.read()voltage=value/4095*3.3#根据电压计算烟雾浓度(需要根据传感器特性校准)returnvoltage#注意:DS18B20读取需要先转换温度,然后读取,这里省略```2.报警逻辑和自检函数:```python#报警阈值TEMP_THRESHOLD=50#温度阈值,单位摄氏度SMOKE_THRESHOLD=1.0#烟雾浓度阈值(电压值,具体需校准)#报警器控制引脚buzzer=machine.Pin(12,machine.Pin.OUT)led=machine.Pin(13,machine.Pin.OUT)defalarm_on():buzzer.on()led.on()defalarm_off():buzzer.off()led.off()defself_test():#自检:先触发报警,然后关闭alarm_on()time.sleep(1)alarm_off()#检查传感器是否正常(这里简化,实际需要检查传感器返回值是否在合理范围内)temp,hum=read_dht11()iftemp<-20ortemp>80:returnFalsereturnTrue```3.主循环:```pythonimporttimeimportnetworkimporturequests#连接WiFidefconnect_wifi(ssid,password):#...连接代码...#上传数据到服务器defupload_data(temp,hum,smoke):url="http://yourserver.com/api/sensor"data={"temp":temp,"hum":hum,"smoke":smoke}response=urequests.post(url,json=data)returnresponse#主循环defmain():connect_wifi("your_ssid","your_password")whileTrue:temp,hum=read_dht11()smoke=read_smoke()#上传数据upload_data(temp,hum,smoke)#检查是否报警iftemp>TEMP_THRESHOLDorsmoke>SMOKE_THRESHOLD:alarm_on()else:alarm_off()#每小时自检一次iftime.time()%3600==0:ifnotself_test():#自检失败,记录错误或上传错误信息passtime.sleep(1)#每秒采集一次```4.服务器端(Django)示例(简要):-创建Django项目和应用-定义模型(SensorData,AlarmEvent)-创建API视图接收数据(使用DjangoRESTframework)-创建管理界面和用户界面5.前端展示:使用ECharts绘制折线图,实时展示数据。扩展:整合消防器材识别(引用[2])-可以在系统中增加一个功能模块,通过摄像头拍摄消防器材,然后使用YOLOV8模型进行识别。-这个功能需要较强的硬件支持(如树莓派+摄像头),可以作为一个独立模块。注意事项:-系统可靠性:消防报警系统对可靠性要求高,代码需要健壮,考虑异常处理。-实时性:报警响应要快,避免因网络上传阻塞主循环(可以考虑使用异步或中断)。-安全性:数据传输和存储需要加密,防止被篡改。以上是一个基本的开发方案,具体实现需要根据硬件和实际需求调整。§§相关问题§§1.如何校准烟雾传感器以获得准确的烟雾浓度?2.如何设计消防报警控制器的自检功能以确保系统可靠性?3.在MicroPython中如何处理多个传感器的并发读取?4.如何实现消防报警系统的远程通知功能(如短信、邮件)?5.如何测试消防报警系统软件以确保其可靠性和实时性?</think>### Python开发消防报警控制器系统软件方案 #### 系统架构设计 基于引用内容[1][2][4],系统采用分层架构: 1. **硬件层**:ESP-WROOM-32开发板 + 传感器(温度、湿度、烟雾)+ 声光报警器 2. **边缘计算层**:MicroPython实现传感器数据采集和实时报警 3. **服务层**:Django框架提供Web服务(引用[2]) 4. **数据层**:MySQL数据库存储历史数据(引用[2]) 5. **应用层**:Web/移动端数据可视化平台 ```mermaid graph TD A[传感器] -->|数据采集| B(ESP32-MicroPython) B -->|实时报警| C[声光报警器] B -->|数据传输| D[Django服务器] D --> E[MySQL数据库] D --> F[Web前端] D --> G[移动APP] ``` #### 核心功能实现 **1. 传感器数据采集(MicroPython)** ```python # 引用[1]中的传感器监测实现 import machine from dht import DHT11 from machine import ADC, Pin # 初始化传感器 dht = DHT11(Pin(23)) smoke_sensor = ADC(Pin(34)) def read_sensors(): dht.measure() temp = dht.temperature() hum = dht.humidity() smoke = smoke_sensor.read() return temp, hum, smoke ``` **2. 报警阈值判断与触发** ```python # 引用[1][4]的报警逻辑 ALARM_TEMP = 60 # 温度阈值(℃) ALARM_SMOKE = 700 # 烟雾浓度阈值 def check_alarm(temp, smoke): if temp > ALARM_TEMP or smoke > ALARM_SMOKE: trigger_alarm() return True return False def trigger_alarm(): buzzer = Pin(12, Pin.OUT) # 蜂鸣器 led = Pin(13, Pin.OUT) # LED buzzer.on() led.on() # 声光报警 ``` **3. 设备自检功能(引用[3])** ```python def self_test(): # 检查LED led_test = test_led() # 检查蜂鸣器 buzzer_test = test_buzzer() # 检查传感器 sensor_test = test_sensors() return { "led": led_test, "buzzer": buzzer_test, "sensors": sensor_test } ``` **4. 数据上传服务(Django实现)** ```python # 引用[2]的Django服务端 from django.db import models class SensorData(models.Model): timestamp = models.DateTimeField(auto_now_add=True) temperature = models.FloatField() humidity = models.FloatField() smoke_level = models.IntegerField() alarm_triggered = models.BooleanField() # API视图 from rest_framework.views import APIView class SensorAPI(APIView): def post(self, request): data = request.data SensorData.objects.create(**data) return Response({"status": "success"}) ``` #### 系统优化方案 1. **多级报警机制**(引用[1][4]) - 初级预警:单项参数超阈值 - 中级报警:两项参数超阈值 - 紧急响应:三项参数超阈值+持续恶化 2. **消防器材识别集成**(引用[2]) ```python # 集成YOLOV8消防器材识别 from ultralytics import YOLO def detect_fire_equipment(image_path): model = YOLO("fire_equipment.pt") # 预训练模型 results = model.predict(image_path) return results[0].boxes.cls # 返回识别结果 ``` 3. **安全增强设计** - 双冗余传感器校验 - 心跳包监测设备在线状态 - 硬件看门狗定时器防死机 #### 测试验证方案 1. **单元测试**:传感器数据采集精度验证 2. **集成测试**:报警触发与硬件响应同步 3. **压力测试**:模拟100+设备并发接入 4. **故障注入测试**:模拟传感器失效场景 #### 部署实施 1. 硬件端:MicroPython固件烧录至ESP32 2. 服务端:Django + MySQL + Nginx部署 3. 客户端:Vue.js实现数据可视化面板 4. 移动端:React Native开发跨平台APP
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值