1. 程式人生 > >用Python傳送郵件給室友使其電腦關機,室友一臉茫然以為電腦中毒

用Python傳送郵件給室友使其電腦關機,室友一臉茫然以為電腦中毒

Python 功能強大,簡單易學,很多人不知道如何學習,覺得學習很枯燥。其實趣味學習是最好的方法,比如,你經常忘記關閉辦公室的電腦,又不想半路返回單位,就可以用 Python 寫一個遠端操控的自動關機程式,試想一下,當你掏出手機進行幾步簡單的操作就可以實現對其他電腦的遠端控制,是不是很酷!

 

用Python傳送郵件給室友使其電腦關機,室友一臉茫然以為電腦中毒

想要學習Python。加群:943752371,即可免費領取一整套系統的板Python學習教程!

要點:

  • 通過郵件的自動接收與傳送實現對目標電腦的遠端操控
  • 首先在目標電腦上建立一個監聽執行緒用來實時接收郵件
  • 當使用手機對郵箱傳送關閉電腦相關主題郵件時
  • 目標電腦就會讀取郵件主題文字作為指令並執行
  • 以實現自動關機的目的

一.郵件收發

用於接收和傳送郵件的郵箱可任意指定(可以是同一郵箱),不過要想使用郵箱的自動收發功能,還需要生成特定的授權碼,一般來說 QQ、163 等郵箱都支援此類操作。以 QQ 郵箱為例,可以在“設定—賬戶”頁面進行設定(下圖)

用Python傳送郵件給室友使其電腦關機,室友一臉茫然以為電腦中毒

(1)郵件接收

首先要明確用於接收郵件的地址 ADDR、對應的 16 位授權碼 PASSWORD 以及接收郵件服務 POP_SERVER

用Python傳送郵件給室友使其電腦關機,室友一臉茫然以為電腦中毒

連線到 POP 伺服器:

用Python傳送郵件給室友使其電腦關機,室友一臉茫然以為電腦中毒

提取當前收件箱中最新的一封郵件,由於郵件資料是經過編碼的,這裡我們依次嘗試 utf8、gbk、big5 三種編碼格 式進行解碼,並提取郵件標題部分資料。

其中 emailsub 通常包括兩個資訊,一個是編碼後的標題文字資料,另一個 是其編碼格式,所以我們還需要再進行一次解碼,這時獲得的才是真正可用的標題文字資料。

用Python傳送郵件給室友使其電腦關機,室友一臉茫然以為電腦中毒

(2)郵件傳送

接下來再說一下郵件的自動傳送,至於為什麼需要設定郵件自動傳送功能後面會講到,這裡暫時不提。與郵件接收功能類似,自動傳送郵件需要提供用於傳送郵件的郵箱地址FROM_ADDR、授權碼 PASSWORD、目標 郵件地址 ADDR 以及郵件傳送服務 SMTP_SERVER

用Python傳送郵件給室友使其電腦關機,室友一臉茫然以為電腦中毒

然後連線 SMTP 服務:

用Python傳送郵件給室友使其電腦關機,室友一臉茫然以為電腦中毒

相對郵件接收來說,傳送郵件不需要進行編碼格式轉換,只需要按照特定格式設定郵件內容 msg 併發送即可

二.關機設定

現在開始設計我們的核心功能來實現自動關機,針對自動接收到的郵件標題文字進行關鍵字識別,由於這裡的關鍵字完全是自己指定的,所以說這部分的自由度非常之高,我們完全可以根據自身的需求和習慣設定任意關鍵字作為執行指令,比如我在這裡設定了兩種指令:

  • “延時關機 XX”關鍵字:觸發 shutdown 指令,使目標電腦在XX秒後關機,預設在60 秒後關機。
  • “定時關機 XX:XX”關鍵字:觸發 schtasks 指令,使目標電腦在每天的XX時XX分關機,預設在 00:00 (零點) 關機。

如果接收到有效郵件並執行了關機相關操作則返回 True,否則返回 False。程式碼如下:

用Python傳送郵件給室友使其電腦關機,室友一臉茫然以為電腦中毒

三.例項演示

目前為止幾個主要的功能模組都構建完畢了,接下來我們對其進行整合:

1).按照本文開頭所講的設計思路,需要持續監測目標郵箱中的最新郵件,如果發現關機關鍵字則執行對應的關機指令,考慮到郵件傳送的網路延時這裡對每次監測之間設定了一個 5 秒的時間間隔。

2).另外,為了避免同一封包含關機指令的郵件被反覆讀取執行,還需要在關機命令執行後自動傳送一封不包含關機指令的新郵件對其進行覆蓋,這就是設定郵件自動傳送功能的原因,實現程式碼 如下:

用Python傳送郵件給室友使其電腦關機,室友一臉茫然以為電腦中毒

現在我們進行實際操作測試,首先在目標電腦中執行程式,通過手機向目標郵箱傳送一個主題名為"延時關機"的郵 件,會發現系統彈出“1分鐘內關機”的提示,證明延時關機功能沒有問題。

用Python傳送郵件給室友使其電腦關機,室友一臉茫然以為電腦中毒

然後測試一下定時關機功能,同樣向目標郵箱傳送主題名為“定時關機 12:30”的郵件,開啟系統的任務計劃程式, 會發現多了一個定時關機的計劃任務,說明定時關機功能也是成功的。