標籤:

半小時自製自動郵件收作業系統

今天聽說有一幫學生和助教在吵架,助教說你們交作業郵件不寫正文很不尊重人誒,學生說本來交個作業就好的事情何必再假惺惺寫個正文問聲好,助教說你這樣子搞得我們收作業很像機械操作誒……

等等!通過電子郵件收作業本來就是個機械操作吧?我說助教們誒你們又何必通過這樣的方式來刷一點可憐的存在感呢?今天我來告訴你們怎麼半小時自己寫出一個完全自動化的郵件收作業系統吧。

技能點需求

  • Python 3
  • SQLite 3
  • POP3 協議基礎
  • DNS 配置基礎
  • 會使用電子郵件

系統架構

  • 一台郵件轉發伺服器把所有發送到特定域的電子郵件(比如 homework_label_N@homework.example.com)都轉發到某個郵箱;

  • 我們的程序從該郵箱拉取郵件列表,然後通過接收地址來區分這是哪一堂課的作業;

  • 自動下載附件到同一個文件夾。

搭建郵件轉發伺服器

這裡我們用 @experimental.swineson.me 域作為演示用的收作業郵箱域,轉發伺服器利用免費的 improvmx.com/,郵件轉發到 emaildispatcher@swineson.me 。

首先花一分鐘註冊 emaildispatcher@swineson.me 這個郵箱,打開 POP3 功能;(為了方便我用了自己域名下的郵件服務,如果用公用服務的話強烈不推薦 163 系郵箱,因為 163 系郵箱開 POP3 功能強制要求綁定手機號,很不方便;QQ 什麼的就挺好嘛。另外能關掉垃圾郵件過濾功能的話盡量關掉,因為只有附件的郵件很容易被當成垃圾郵件,不要問我怎麼知道的。)

然後花一分鐘在 experimental.swineson.me 域下面設置好 MX 記錄;

最後花一分鐘前往 improvmx.com/ 完成轉發設置;

這一部分就完成了。

自動收取郵件和下載附件

還剩 27 分鐘來寫程序,我一點都不慌。這個本地程序需要做這麼一些事情:

  • 隔一段時間輪詢新郵件
  • 如果新郵件的收件人符合預先定義的 homework_tag@experimental.swineson.me 格式,那麼下載該郵件的附件,保存到預設的文件夾中,否則無視之
  • 維護一個已下載郵件資料庫,因為 POP3 是個「離線工作的協議」,不能和伺服器傳遞已讀狀態

這一部分我們用 Python 3 來完成,因為寫起來方便嘛。代碼見 Jamesits/auto-email-homework-fetcher/blob/master/fetch.py,總共不到九十行。

要直接使用的話,

git clone https://github.com/Jamesits/auto-email-homework-fetcher.gitcd auto-email-homework-fetchercp config-example.ini config.ini

修改 config.ini,在 mailbox section 填寫 emaildispatcher@swineson.me 對應的登錄信息,參考最下面的兩個 section 增加一個新的 section,再在 config/tasks 裡面填入該 section 的名字,最後我們會得到這樣一個配置文件:

[mailbox]server = pop.exmail.qq.comport = 995username = emaildispatcher@swineson.mepassword = 不告訴你[config];; interval in seconds. set to 0 to disable.check_interval = 60db_path = data.dbbase_folder = homeworkstasks = english_homework_20160701[english_homework_20160701]receiver = 20160701@experimental.swineson.mefolder = english_20160701

運行 fetcher.py,所有發送到 20160701@experimental.swineson.me 這個地址的郵件附件就會被下載到 homeworks/english_20160701 目錄了。是不是超級方便呢?

以下是我測試期間的程序運行截圖。

完整代碼參見:Jamesits/auto-email-homework-fetcher

結語

我覺得吧,這種真?機械化操作,人還是別出來刷存在感了,交給程序來做,你也輕鬆,其他人也輕鬆。就像 Reddit 上那個自稱入職以後花了 50 小時自動化了所有工作,然後接下來六年什麼都沒幹,六年之後終於被老闆發現開除的哥們兒的偉大事迹一樣,雖然最後證明整件事情是他在吹牛逼,但這才是我們應該不懈追求的方向嘛!

推薦閱讀:

TAG:POP3 | Python |