1. 程式人生 > >Python開源專案介紹:用zmail簡單地發郵件

Python開源專案介紹:用zmail簡單地發郵件

640?wx_fmt=jpeg

CodingGo技術社群自由的程式設計學習平臺640?wx_fmt=jpeg

傳送郵件是個很簡單的需求,但是在實際的使用中依然碰到了很多坑,因此建立了zmail這個專案,讓你使用python傳送郵件的過程儘可能簡單。

  1. GitHub:https://github.com/ZYunH/zmail

其他輪子的缺點:

服務端拒信:首要問題。很多其他的輪子需要自己構造MIME和郵件頭(通常優化了過程),但經常遭遇拒信,具體原因是其沒有正確的定義郵件頭,諸如From和To的頭資訊在使用SMTP時每家服務商檢查都會有細微的差別,以及一些平臺的差異(win10 localhost亂碼導致發件拒信),甚至在你發往不同的地址檢查也會有差別(國內發國外需要額外驗證一些資訊預防垃圾郵件)。

構造太麻煩:特別是新增附件的時候,有些還需要額外去自定義型別,體驗很差。

傳送太麻煩:你需要找到你服務商的smtp地址,埠號,有些服務商不是預設的埠(@http://163.com),有些只能SSL驗證(@http://qq.com),有些需要TLS(@gmailcom),一個不小心就傳送失敗。

解析郵件複雜:Bytes坑多,還有boundary,各種格式亂碼錯誤

引入過多的外部包:一些輪子引入了好幾個包,可能會造成包與原來的程式版本衝突(常見於requests之類的包),並且發生錯誤無法得到及時的文件支援。在我嘗試傳送失敗後,使用django的email模組成功傳送了郵件,但是django的目的顯然不是這個,使用一個如此大的框架來實現那麼小的需求顯然不合理(並且構造過程依然複雜)。

Zmail的優勢:

  • 自動填充大多數導致服務端拒信的頭資訊(From To LocalHost之類的)

  • 將一個字典對映為email,構造信件就像構造字典一樣簡單

  • 自動尋找郵件服務商埠號地址,自動選擇合適的協議(經過認證的)

  • 只依賴於python3,嵌入其他專案時無需煩惱

你可以使用zmail來:

  • 作為監控指令碼的傳送&接收郵件模組,及時傳遞資訊

  • 嵌入到已有的專案中實現郵件功能

  • 自定義郵件傳送過程,諸如準點傳送、定時傳送、自動監控等

安裝

  1. $ pip3 install zmail

也可以使用pip代替pip3

注意:zmail僅支援python3,不支援python2,使用前所有郵箱都要開啟SMTP功能,@http://163.com和@http://gmail.com 的郵箱需要額外設定SMTP密碼,網上很多資訊,具體自行百度google,這裡先行省略。

傳送郵件

  1. import zmail

  2. # 你的郵件內容

  3. mail_content = {

  4. 'subject': 'Success!',  # 隨便填寫

  5. 'content': 'This message from zmail!',  # 隨便填寫

  6. }

  7. # 使用你的郵件賬戶名和密碼登入伺服器

  8. server = zmail.server('[email protected], '你的qq郵箱密碼')

  9. # 傳送郵件

  10. server.send_mail('[email protected].com', mail)

  • 為你的郵件新增附件,修改你的郵件內容 即可,其他內容同上

  1. # 你的郵件內容

  2. mail_content = {

  3. 'subject': 'Success!',  # 隨便填寫

  4. 'content': 'This message from zmail!',  # 隨便填寫

  5. 'attachments': '/Users/zyh/Documents/example.zip',  # 最好使用絕對路徑,若你電腦沒有這個檔案會造成錯誤

  6. }

  • 給多個信箱發件,修改傳送郵件 即可,其他內容同上

  1. # 傳送郵件

  2. server.send_mail(['[email protected]','[email protected]'], mail)

  • 新增額外的頭資訊,直接加入到mail_content即可

取回你的郵件

  • 取得最新的郵件

  1. import zmail

  2. server = zmail.server('[email protected], 'yourpassword')

  3. mail = server.get_latest()

  • 依據id取回郵件

  1. mail = server.get_mail(2)

  • 依據 (subject,after,before,sender)取回一個列表的郵件

  1. mail = server.get_mails(subject='GitHub',after='2018-1-1',sender='github')

示例中, 如果 'GitHub' 在郵件的主題中,這封郵件將會被匹配, 例如' [GitHub] Your password has changed'

sender亦是如此

  • 得到所有郵件的標頭檔案資訊.一個由字典組成的列表,每個字典包含了所有能夠提取的標頭檔案.

  1. mail_info = server.get_info()

  • 得到郵箱的資訊

  1. mailbox_info = server.stat()

結果為包含兩個整型的元組: (郵件的數量, 郵箱的大小).

解析你的郵件

在zmail中,接收到的郵件被對映為一個字典,你可以通過訪問python字典的形式來訪問你的郵件,字典中的所有key在下方郵件結構中有列出,例如

  1. subject = mail['subject']

展示你的郵件,使用 zmail.show()

  1. import zmail

  2. server = zmail.server('[email protected], 'yourpassword')

  3. mail = server.get_latest()

  4. zmail.show(mail)

輸出 :

  1. content-type multipart/mixed

  2. subject Success!

  3. to zmail_user

  4. from zmail<[email protected]>

  5. date 2018-2-301:42:29 +0800

  6. boundary ===============9196441298519098157==

  7. content ['This message from zmail!']

  8. contents [[b'Content-Type: text/plain; charset="utf-8"', b'MIME-Version: 1.0', b'Content-Transfer-Encoding: base64', b'', b'VGhpcyBtZXNzYWdlIGZyb20gem1haWwh', b'']]

  9. attachments None

  10. id 5

郵件的結構

  • content-type: 郵件內容的型別

  • subject: 郵件主題

  • to:收件人

  • from:寄件人

  • date: 年-月-日 時間 時區

  • boundary: 如果郵件為multiple - - - parts,你可以得到其分界線

  • content: 郵件的文字內容(僅在text/plain時可以被解析)

  • contents: 郵件的body,裡面包含著由分界線分割的每一個段落

  • attachments: None 或者 [['附件名稱;編碼方式','附件的二進位制內容']...]

  • id: 在郵箱中的id

獲得附件

  1. import zmail

  2. server = zmail.server('[email protected], 'yourpassword')

  3. mail = server.get_latest()

  4. zmail.get_attachment(mail)

你可以重新命名你的附件,使用

  1. zmail.get_attachment(mail,'example.zip')

支援的郵件服務商 列表中的郵件服務商已經被測試可正常使用

640?wx_fmt=jpeg

如果你的郵箱不在此列,前往Github提交issue。

本文作者

ZYunH,the best or nothing

部落格:zhihu.com/people/zhang-yun-hao-14

640?wx_fmt=jpeg

點選下方閱讀原文,加入程式設計互助學習社群

相關推薦

Python開源專案介紹zmail簡單郵件

CodingGo技術社群自由的程式設計學習平臺傳送郵件是個很簡單的需求,但是在實際的使用中依然碰

Python開源專案介紹網站日誌分析工具

CodingGo技術社群自由的程式設計學習平臺 日誌分析 日誌分析在web系統中故障排查、效能分析方面有著非常重要的作用。該工具的側重點不是通常的PV,UV等展示,而是在指定時間段內提供細粒度(最小分鐘級別,即一分鐘內的日誌做抽象和彙總)的異常定位和效能分析。 環境安裝

2018年最火熱的十個Python開源專案!你過哪些?

  過去一個月,MyBridge 從將近 250 個 Python 開源專案中選擇出了最好的 10 個專案: 這些專案在 GitHub 上平均獲得 1140 個 star 專案涵蓋話題包括效能分析、圖表提取、HTTP 框架、HTTP API、程式碼重構和論文爬取等

推薦|23個Python爬蟲開源專案程式碼爬取微信、淘寶、豆瓣、知乎、微博等

今天為大家整理了23個Python爬蟲專案。整理的原因是,爬蟲入門簡單快速,也非常適合新入門的小夥伴培養信心。所有連結指向GitHub,祝大家玩的愉快 1、WechatSogou [1]– 微信公眾號爬蟲。 基於搜狗微信搜尋的微信公眾號爬蟲介面,可以擴充套件成基於搜狗搜尋的爬

Python專案實現簡單的web伺服器

本部落格是整理在學習實驗樓的課程過程中記錄下的筆記形成的,參考:https://www.shiyanlou.com/courses/552。不同之處在於實驗樓使用python2.7,而博主這裡使用的是python3.6。在學習中也因為python版本不同遇到了一些坑,這裡寫

Python 新手實戰之機器學習實現簡單驗證碼識別(一)PIL簡單繪製驗證碼

驗證碼生成 from PIL import Image, ImageDraw, ImageFont import random, os def draw(): #隨機生成背景顏色 (RGB顏色範圍為0-255,越高越接近白色),背景顏色不宜過深,

Python基礎語法介紹面向對象編程

Python 面向對象 面向對象編程 面向對象編程,簡稱OOP:是一種解決軟件服用的設計和編程方法。這種方法把軟件系統中相似的邏輯操作、數據、狀態等以類的形式描述出來,通過對象實例在軟件系統中復用,從而提高軟件開發效率。 類和對象 類:一個事物的抽象,定義了一類事物的屬性和行為。類具有繼承,多態的特性

Python學習筆記1戶登錄

\n win col lines %s courier class for ID 1 import getpass,sys 2 u=0 3 while u< 3: 4 user_name = input(‘Please input you

目前最受歡迎的12個Python開源框架,你過幾個?

python 爬蟲 web 入門 開源 今天給大家帶來了12個在GitHub等開源網站中最受歡迎的Python開源框架。如果你正在學習python,那麽這12個開源框架,千萬別錯過,這些框架包括事件I/O,OLAP,Web開發,高性能網絡通信,測試,爬蟲等。雖說不上是全都有,但也足夠滿足你

python作業/練習/實戰1、簡單登錄腳本

lan href else 次數 成功 welcom lse 學習 教程 作業要求 寫一個登陸的小程序 username = xiaoming passwd = 123456 1、輸入賬號密碼,輸入正確就登陸成功,   提示:歡迎xxxx登陸,今天的日

python實戰專案示例 揭祕微信朋友圈

通過python,連線到微信賬號,收集好友性別、城市、個性簽名等公開資訊,使用 Python 進行資料統計與分析,得到你專屬的朋友圈的分析報告! 1、準備工作 1.1 環境配置 編譯環境:Windows10 程式語言:Python3.6 編譯器IDE:Pycharm 瀏覽器工

精選Python開源專案Top10!

作者 | MyBridge 譯者 | Linstancy 整理 | Jane 出品 | AI科技大本營   【導讀】過去一個月裡,我們對近 250 個 Python 開源專案進行了排名,並挑選出熱度前 10 的

python 學習彙總28itertools-tool簡單實用( tcy)

Itertools-擴充套件工具 2018/11/14 說明: 1.用途:    用現有itertools構建塊建立擴充套件工具集的配方。2.優點:    擴充套件工具提供了與底層工具集相同的高效能。  &nb

2018年10月份GitHub上最熱門的Python開源專案

本文我們將和大家介紹 GitHub 上 10 月份最受歡迎的 11 個Python開源專案,在這些專案中,你有在用或用過哪些呢? 1TensorFlow-Course https://github.com/open-source-for-science/TensorFlow-Cour

2018年GitHub上最流行50大Python開源專案(上)

近日開源眾包平臺IssueHunt(這是一個開源專案的賞金平臺)評選出了2018年GitHub上最流行的50個Python開源專案 下面我們一起來看看上榜的專案都有哪些: 1) TensorFlow Models 如果你對機器學習和深度學習感興趣

9月Python開源專案Top10

作者 | Mybridge 譯者 | 王天宇 整理 | Jane 出品 | AI科技大本營 【導讀】我們從過去一個月近 250 個 Python 的開源專案中,精心挑選出了最熱門的 10 個。在挑選過程中,我們始終在各個專案之間作比較,並基於大量的因素來估量專案

一系列自動化測試的開源專案介紹

       在如今開源的時代,我們就不要再閉門造車了,熱烈的擁抱開源吧!本文針對性能測試、Web UI 測試、API 測試、資料庫測試、介面測試、單元測試等方面,為大家整理了github或碼雲上優秀的自動化測試開源專案,希望能給大家帶來一點幫助。 一

這裡有10個優質Python開源專案,希望對你學習有幫助

導讀:在過去的一個月中,我們對近250個Python開源專案進行了排名,選出了前十。 我們比較了在此期間有新的釋出或是重大發布的專案。Mybridge AI基於多種因素對專案進行排名,以衡量其在專業人員眼中的質量。 開源專案對程式設計師大有裨益。希望你找到一個有意思的專案,讓你有所啟發。

《轉載-Github上的python開源專案

Python開源專案,期待大家和我們一起共同維護 說明 Feedback 期望大家隨時能提出寶貴的意見(直接提交issues即可)。請廣大網友只按照目錄結構(即使目錄結構有問題)新增三方庫,並提交pull request。目錄問題大家提出issues後樓主會及時更改

推薦5個值得關注的Python開源專案

今天小編看到了五個開源專案,覺得還錯,推薦給大家。 1、Wagtail CMS Wagtail是一個基於Django的CMS系統 它擁有優質的使用者體驗 並且為設計人員和開發人員提供了高度定製的介面。   文件:http://docs.wagtail.i