專欄作家開發(fā)簡單的郵件過濾器:getlessmail身小本事大
探客網專欄作家斯特林·卡姆登開發(fā)了一個電子郵件過濾器。在本文中,作者將對其進行詳細介紹。
我的朋友,專欄作家斯特林·“芯片”·卡姆登最近將主要工作站的操作系統(tǒng)從微軟Windows遷移到FreeBSD上。由于知道我的主工作站也采用了FreeBSD操作系統(tǒng),因此,他還詢問我關于新平臺上軟件的選擇、系統(tǒng)的配置以及其它各方面事情的建議。盡管,最終他并沒有完全復制我的選擇,但從看到的情況來說,他的設置和我的建議還是非常接近的。在窗口管理器方面,他選擇的是XMonad,而我使用的AHWM,但它們都是以鍵盤為主要操作方式,并且,我自己選擇AHWM的主要目的是進行嘗試(有朝一日)。
此外,在電子郵件工具方面,我們選擇的軟件也是相同的。在筆記本計算機中,我們都使用Mutt作為郵件用戶代理(MUA)來對郵箱進行設置,利用ssmtp(簡單的SMTP)作為SMTP客戶端,POP客戶端采用的是getmail。
我們兩個人在垃圾郵件誤報處理方面都保持非常謹慎的態(tài)度。絕不讓一封垃圾郵件出現在收件箱中是非常重要的,但誤處理帶來的問題,需要收到的正常電子郵件被垃圾郵件過濾器誤判,足以讓我們放棄選擇大部分常見的垃圾郵件過濾軟件。
從我在探客網信息技術安全欄目上發(fā)表的內容中你可以看到,Mutt讓電子郵件的總體處理變得非常簡單,只要對收件箱里的垃圾郵件進行分析,就可以了解當前垃圾郵件的趨勢。我先了解到在垃圾和網絡釣魚類電子郵件出現的信息,然后就可以利用Mutt強大的排序和管理功能,來快速消除大量垃圾郵件。由于它還需要我的直接干預,所以,斯特林選擇他認為更合理的方法,以便更快地消除大量垃圾郵件是毫不奇怪的。
斯特林的方法是自己開發(fā)了一個電子郵件過濾器。用他在芯片技巧網站《利用Ruby語言開發(fā)基于腳本的電子郵件過濾器》一文中的原話來說,就是:
自從上世紀90年代初,開始使用第一個互聯網電子郵件帳戶到現在,我已經使用過所有類型的電子郵件過濾器,它們都不能滿足我的要求。我希望能夠阻止和偉哥相關的所有信息,但一位朋友或者家庭成員使用這個詞時應該屬于例外。純貝葉斯過濾器似乎總是在阻止我認識的人發(fā)送的內容,而讓一些真正的垃圾郵件通過。而白名單和黑名單技術都存在“應該先采用什么規(guī)則”的問題。
于是,他決定自己開發(fā)電子郵件過濾器,為什么叫做“getlessmail”是因為最早的設計目的是用來支持getmail運行的。他采用的方法是建立一種嵌入式領域特定語言(EDSL),用來對自己的過濾器進行配置。這樣也就意味著,如果其它人希望使用getlessmail的話,可以使用同樣的EDSL為電子郵件過濾器創(chuàng)建易于撰寫和閱讀的簡單配置。下面就是他提供的簡單配置的例子:
keep if from “mybestfriend@example.com”
spam if from "@example.com"
spam if subject "viagra|cialis"
spam if body "(?m:bnudeb.*bpicsb)"
我已經瀏覽過它的說明文件了,這個小工具看起來非常有用。我將來可能會用它來管理一個利用Mutt作為郵件用戶代理的帳戶。畢竟,我并不需要從多個電子郵件帳戶中獲得垃圾和網絡釣魚類的樣本。看起來它似乎更適合某些類型的電子郵件帳戶(只有擁有實際地址的人才知道某些類型的私人帳戶),而不是其它的(公共帳戶,讓互聯網上任何隨機的人都有可能發(fā)送給你一封正常的電子郵件)帳戶。當然,這一問題現在還沒有電子郵件過濾器可以完全解決。除了其它方面的好處外,該電子郵件過濾器采用的是開放工作授權(OWL),自由復制授權中的一種,經常看我的文章的讀者應該已經知道這是我認為安全軟件應該選擇的正確授權方式。
現在,芯片技巧的文章中已經提供了getlessmail的下載。壓縮安裝包中提供了一份說明文檔,關于OWL的授權文檔license.txt采用的是文本格式,以及一個演示,告訴你如何利用getlessmail對getmail進行配置,作為電子郵件過濾器使用,當然還有的就是getlessmail.rb程序文件本身。
在斯特林的支持下,我創(chuàng)建了一個支持getlessmail的代碼倉庫(BitBucket)項目,這樣的話,他就可以對項目進行管理,所有使用分布式版本控制系統(tǒng)Mercurial(也稱為hg)的開發(fā)者也可以進行鏡像或者添加自己需要的內容。他告訴我,在下一步,將對getlessmail進行 “更新并增加一些支持腳本”,發(fā)布后,這些內容將出現在代碼倉庫的Mercurial庫中。
【編輯推薦】