Zmail--永不拒信,傳送簡單的python郵件模組
阿新 • • 發佈:2019-01-06
傳送郵件是個很簡單的需求,但是在實際的使用中依然碰到了很多坑,因此建立了zmail這個專案,讓你使用python傳送郵件的過程儘可能簡單。
其他輪子的缺點:
- 服務端拒信:首要問題。很多其他的輪子需要自己構造MIME和郵件頭(通常優化了過程),但經常遭遇拒信,具體原因是其沒有正確的定義郵件頭,諸如From和To的頭資訊在使用SMTP時每家服務商檢查都會有細微的差別,以及一些平臺的差異(win10 localhost亂碼導致發件拒信),甚至在你發往不同的地址檢查也會有差別(國內發國外需要額外驗證一些資訊預防垃圾郵件)。
- 構造太麻煩:特別是新增附件的時候,有些還需要額外去自定義型別,體驗很差。
- 傳送太麻煩:你需要找到你服務商的smtp地址,埠號,有些服務商不是預設的埠(@163.com),有些只能SSL驗證(@qq.com),有些需要TLS(@gmailcom),一個不小心就傳送失敗。
- 引入過多的外部包:一些輪子引入了好幾個包,可能會造成包與原來的程式版本衝突(常見於requests之類的包),並且發生錯誤無法得到及時的文件支援。在我嘗試傳送失敗後,使用django的email模組成功傳送了郵件,但是django的目的顯然不是這個,使用一個如此大的框架來實現那麼小的需求顯然不合理(並且構造過程依然複雜)。
Zmail的優勢:
- 自動填充大多數導致服務端拒信的頭資訊(From To LocalHost之類的)
- 將一個字典對映為email,構造信件就像構造字典一樣簡單
- 自動尋找郵件服務商埠號地址,自動選擇合適的協議(經過認證的)
- 只依賴於python3,嵌入其他專案時無需煩惱
你可以使用zmail來:
- 作為監控指令碼的傳送郵件模組,及時傳遞資訊
- 嵌入到已有的專案中實現功能
- 自定義郵件傳送過程,諸如準點傳送、定時傳送等
安裝
$ pip3 install zmail
也可以使用pip代替pip3
注意:zmail僅支援python3,不支援python2
簡單的例子
- 使用前注意,所有郵箱都要開啟SMTP功能,@163.com和@gmail.com 的郵箱需要額外設定SMTP密碼,網上很多資訊,具體自行百度google,這裡先行省略。
傳送郵件
import zmail
# 你的郵件內容
mail_content = {
'subject': 'Success!', # 隨便填寫
'content': 'This message from zmail!', # 隨便填寫
}
# 使用你的郵件賬戶名和密碼登入伺服器
server = zmail.server('[email protected], '你的qq郵箱密碼')
# 傳送郵件
server.send_mail('555555@qq.com', mail)
- 為你的郵件新增附件,修改 你的郵件內容 即可,其他內容同上
# 你的郵件內容
mail_content = {
'subject': 'Success!', # 隨便填寫
'content': 'This message from zmail!', # 隨便填寫
'attachments': '/Users/zyh/Documents/example.zip', # 最好使用絕對路徑,若你電腦沒有這個檔案會造成錯誤
}
- 給多個信箱發件,修改 傳送郵件 即可,其他內容同上
# 傳送郵件
server.send_mail(['[email protected]','[email protected]'], mail)
- 新增額外的頭資訊,直接加入到mail_content即可
認證過的服務商列表:
地址 | SMTP |
---|---|
@qq.com | ✓ |
@126.com | ✓ |
@yeah.net | ✓ |
@gmail.com | ✓ |
@sina.com | ✓ |
@163.com | ✓ |
不在此列表也無需擔心,經過測試,目前尚未發現不支援的郵件服務商,如果遇到問題請及時聯絡作者(本平臺或github)
更多
zmail的POP3功能請看GitHub介紹