用Python打造Kindle推送神器【玩轉郵件庫】

免費試用30天Kindle unlimited 電子書包月服務:https://amzn.to/2l0Pnl1

免費試聽30天Amazon Audible有聲讀物:https://amzn.to/2mysTZe

喜歡聽浪漫愛情故事?免費試聽Audible Escape一個月:https://amzn.to/2lE3Qnf

喜歡在線聽音樂嗎?免費試聽Amazon music Unlimited 一個月:https://amzn.to/2LAV03Z

歲月易逝,流光拋人。驀然回首,2018,已悄然進入尾聲。

過了傷春悲秋的年紀,也漸去了指點江山的激情。看淡了朋友圈裡那些花花綠綠、紛紛擾擾,也真正體會了人生的熙熙攘攘,起起伏伏。

過去的一年,很多事,我努力過。 2019,希望能做到堅守內心,專注前行,修正自我,持續成長。也希望正在讀此文的你新的一年一切安好。

——————————————————————————————————

這篇文章,作為我這個公眾號的今年的收官吧。活動回來,增加了不少關注。而我還是一如既往的疏於更新,道一聲抱歉。希望沉澱後的每篇文章,能帶給大家一點方向性的指引。

今年的雙11,買了個低配的Kindle。早就想買一個電子書閱讀器了,來推動一下多少年來一直掛在嘴邊的讀書計劃。試了試,效果還不錯,水墨屏護眼效果確實不錯,有點紙質書的感覺,還可以做筆記。但是實用中發現一個問題,就是網kindle裡推送書有點麻煩,一些格式需要USB對拷,另一些給kindle賬號發郵件的模式我很喜歡。但是每次都打開郵箱網頁登錄,寫地址、主題、添加附件,確實有些繁瑣。於是想起之前用Python發郵件的經歷,寫了以下程序。

因為是要把電子書當附件發給kindle賬戶,所以真正核心的地方在於mailSender類的attchPost方法,如下:

我們來回顧一下開發歷程吧。

難點:中文附件名亂碼問題

這一段程序其實是消耗了不少時間的,本來以為不用重複造輪子,直接拿網上的一段源碼結合菜鳥教程的例子稍加修改運行。一切Okey,就是在發到自己郵箱測試時有中文附件名亂碼問題。

這個問題的解決,參考了https://docs.python.org/3.6/library/email.header.html

算是一種數字化學習吧。

重點:同郵件多附件添加問題

最終我們用了對象列表,算是得到一個完美的解決。說起來,大家還是要有一種思維的轉變:一切皆對象。一個附件就是一個對象,更改它的屬性,就是做好了添加的準備工作。循環這些對象,就實現了單郵件多附件的發送。所以,我倒也不建議大家刻意迴避對象的概念。

理論:SMTP發送服務器問題

這其實是整個這個程序的理論基礎,我們來看個圖:

我們平時發郵件,一般基於網頁進行數據提交,其實本質是交給了發送服務器(smtp),再轉給接收服務器(pop3),收件人查看時再拉取到他本地。現在我們要做的,就是跳過網頁提交,直接控制郵件發送服務器發出郵件。大家可以理解為smtp就是一個網關,交給它了,就不用操心中間怎麼傳輸了。只不過,這麼重要的事,需要一個授權碼,不然誰都可以冒充你發郵件。因此,以上操作的前提是,你要開通郵箱的SMTP以及POP3服務賬戶控制權,並記下生成的控制碼。

怎麼樣,上一次咱們通過編程學會了PS(遊戲界面美化),這次通過編程學會了一組網絡協議,程序設計對我們專業的促進作用可見一斑。

展望:UI設計實現鼠標多附件點選

現在沒做圖形界面,可以手工把文件名輸入列表,文件放到sendMail.py同級目錄。同時發了兩個mobi格式附件,效果還不錯。其實手機可以下載個kindle閱讀器APP,就可以不用kindle而讀書了。

思想:郵件發送器的設計思想

之前寫的程序都是結構化的,通過本程序,也給大家看看面像對象的實用性吧。如果要做成一個完整的,以後直接調用的郵件發送程序,寫成類是特別方便的。因為總有一些發送方、主題什麼的共有屬性,又有發文件、發附件不同的行為需求。而屬性和行為,不正是面像對象的基本要素嗎?這裡面還我們還可以把doSend寫成私有方法,僅供類內調用,就實現了一個代碼權限問題。希望看完這個源碼,你即使不會寫,但能對面像對象思想產生一點共鳴吧。對了,面向對像這個詞,來源於“Object Oriented Program”,你也可以翻譯為“物件導向性”……

奉上源碼: https://pan.baidu.com/s/1vGja-DUHBJzG6VguaXoXQg 提取碼: inpf

本文標題:《用Python打造Kindle推送神器【玩轉郵件庫】》,本文鏈接:http://www.yunjialeguanwang.com/archives/3033.html