用Python发送邮件给室友使其电脑关机,室友一脸茫然以为电脑中毒
Python 功能強(qiáng)大,簡(jiǎn)單易學(xué),很多人不知道如何學(xué)習(xí),覺得學(xué)習(xí)很枯燥。其實(shí)趣味學(xué)習(xí)是最好的方法,比如,你經(jīng)常忘記關(guān)閉辦公室的電腦,又不想半路返回單位,就可以用 Python 寫一個(gè)遠(yuǎn)程操控的自動(dòng)關(guān)機(jī)程序,試想一下,當(dāng)你掏出手機(jī)進(jìn)行幾步簡(jiǎn)單的操作就可以實(shí)現(xiàn)對(duì)其他電腦的遠(yuǎn)程控制,是不是很酷!
?
要點(diǎn):
通過(guò)郵件的自動(dòng)接收與發(fā)送實(shí)現(xiàn)對(duì)目標(biāo)電腦的遠(yuǎn)程操控
首先在目標(biāo)電腦上建立一個(gè)監(jiān)聽線程用來(lái)實(shí)時(shí)接收郵件
當(dāng)使用手機(jī)對(duì)郵箱發(fā)送關(guān)閉電腦相關(guān)主題郵件時(shí)
目標(biāo)電腦就會(huì)讀取郵件主題文字作為指令并執(zhí)行
以實(shí)現(xiàn)自動(dòng)關(guān)機(jī)的目的
一.郵件收發(fā)
用于接收和發(fā)送郵件的郵箱可任意指定(可以是同一郵箱),不過(guò)要想使用郵箱的自動(dòng)收發(fā)功能,還需要生成特定的授權(quán)碼,一般來(lái)說(shuō) QQ、163 等郵箱都支持此類操作。以 QQ 郵箱為例,可以在“設(shè)置—賬戶”頁(yè)面進(jìn)行設(shè)置(下圖),學(xué)習(xí)資料也可以加下Python扣扣裙:3零4零5零799自己下載學(xué)習(xí)下。
(1)郵件接收
首先要明確用于接收郵件的地址 ADDR、對(duì)應(yīng)的 16 位授權(quán)碼 PASSWORD 以及接收郵件服務(wù) POP_SERVER
連接到 POP 服務(wù)器:
提取當(dāng)前收件箱中最新的一封郵件,由于郵件數(shù)據(jù)是經(jīng)過(guò)編碼的,這里我們依次嘗試 utf8、gbk、big5 三種編碼格 式進(jìn)行解碼,并提取郵件標(biāo)題部分?jǐn)?shù)據(jù)。
其中 emailsub 通常包括兩個(gè)信息,一個(gè)是編碼后的標(biāo)題文本數(shù)據(jù),另一個(gè) 是其編碼格式,所以我們還需要再進(jìn)行一次解碼,這時(shí)獲得的才是真正可用的標(biāo)題文本數(shù)據(jù)。
(2)郵件發(fā)送
接下來(lái)再說(shuō)一下郵件的自動(dòng)發(fā)送,至于為什么需要設(shè)置郵件自動(dòng)發(fā)送功能后面會(huì)講到,這里暫時(shí)不提。與郵件接收功能類似,自動(dòng)發(fā)送郵件需要提供用于發(fā)送郵件的郵箱地址FROM_ADDR、授權(quán)碼 PASSWORD、目標(biāo) 郵件地址 ADDR 以及郵件發(fā)送服務(wù) SMTP_SERVER
然后連接 SMTP 服務(wù):
相對(duì)郵件接收來(lái)說(shuō),發(fā)送郵件不需要進(jìn)行編碼格式轉(zhuǎn)換,只需要按照特定格式設(shè)置郵件內(nèi)容 msg 并發(fā)送即可
二.關(guān)機(jī)設(shè)置
現(xiàn)在開始設(shè)計(jì)我們的核心功能來(lái)實(shí)現(xiàn)自動(dòng)關(guān)機(jī),針對(duì)自動(dòng)接收到的郵件標(biāo)題文本進(jìn)行關(guān)鍵字識(shí)別,由于這里的關(guān)鍵字完全是自己指定的,所以說(shuō)這部分的自由度非常之高,我們完全可以根據(jù)自身的需求和習(xí)慣設(shè)置任意關(guān)鍵字作為執(zhí)行指令,比如我在這里設(shè)置了兩種指令:
“延時(shí)關(guān)機(jī) XX”關(guān)鍵字:觸發(fā) shutdown 指令,使目標(biāo)電腦在XX秒后關(guān)機(jī),默認(rèn)在60 秒后關(guān)機(jī)。
“定時(shí)關(guān)機(jī) XX:XX”關(guān)鍵字:觸發(fā) schtasks 指令,使目標(biāo)電腦在每天的XX時(shí)XX分關(guān)機(jī),默認(rèn)在 00:00 (零點(diǎn)) 關(guān)機(jī)。
如果接收到有效郵件并執(zhí)行了關(guān)機(jī)相關(guān)操作則返回 True,否則返回 False。代碼如下:
三.實(shí)例演示
目前為止幾個(gè)主要的功能模塊都構(gòu)建完畢了,接下來(lái)我們對(duì)其進(jìn)行整合:
1).按照本文開頭所講的設(shè)計(jì)思路,需要持續(xù)監(jiān)測(cè)目標(biāo)郵箱中的最新郵件,如果發(fā)現(xiàn)關(guān)機(jī)關(guān)鍵字則執(zhí)行對(duì)應(yīng)的關(guān)機(jī)指令,考慮到郵件發(fā)送的網(wǎng)絡(luò)延時(shí)這里對(duì)每次監(jiān)測(cè)之間設(shè)置了一個(gè) 5 秒的時(shí)間間隔。
2).另外,為了避免同一封包含關(guān)機(jī)指令的郵件被反復(fù)讀取執(zhí)行,還需要在關(guān)機(jī)命令執(zhí)行后自動(dòng)發(fā)送一封不包含關(guān)機(jī)指令的新郵件對(duì)其進(jìn)行覆蓋,這就是設(shè)置郵件自動(dòng)發(fā)送功能的原因,實(shí)現(xiàn)代碼 如下:
現(xiàn)在我們進(jìn)行實(shí)際操作測(cè)試,首先在目標(biāo)電腦中運(yùn)行程序,通過(guò)手機(jī)向目標(biāo)郵箱發(fā)送一個(gè)主題名為"延時(shí)關(guān)機(jī)"的郵 件,會(huì)發(fā)現(xiàn)系統(tǒng)彈出“1分鐘內(nèi)關(guān)機(jī)”的提示,證明延時(shí)關(guān)機(jī)功能沒有問題。
然后測(cè)試一下定時(shí)關(guān)機(jī)功能,同樣向目標(biāo)郵箱發(fā)送主題名為“定時(shí)關(guān)機(jī) 12:30”的郵件,打開系統(tǒng)的任務(wù)計(jì)劃程序, 會(huì)發(fā)現(xiàn)多了一個(gè)定時(shí)關(guān)機(jī)的計(jì)劃任務(wù),說(shuō)明定時(shí)關(guān)機(jī)功能也是成功的。
總結(jié)
以上是生活随笔為你收集整理的用Python发送邮件给室友使其电脑关机,室友一脸茫然以为电脑中毒的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聊聊 CSS 中的布局模式
- 下一篇: 一个排课软件的设计