發(fā)送郵件是個(gè)很簡(jiǎn)單的需求,但是在實(shí)際的使用中依然碰到了很多坑,因此創(chuàng)建了zmail這個(gè)項(xiàng)目,讓你使用python發(fā)送郵件的過(guò)程盡可能簡(jiǎn)單。
GitHub:https://github.com/ZYunH/zmail
其他輪子的缺點(diǎn):
服務(wù)端拒信:首要問(wèn)題。很多其他的輪子需要自己構(gòu)造MIME和郵件頭(通常優(yōu)化了過(guò)程),但經(jīng)常遭遇拒信,具體原因是其沒(méi)有正確的定義郵件頭,諸如From和To的頭信息在使用SMTP時(shí)每家服務(wù)商檢查都會(huì)有細(xì)微的差別,以及一些平臺(tái)的差異(win10 localhost亂碼導(dǎo)致發(fā)件拒信),甚至在你發(fā)往不同的地址檢查也會(huì)有差別(國(guó)內(nèi)發(fā)國(guó)外需要額外驗(yàn)證一些信息預(yù)防垃圾郵件)。
構(gòu)造太麻煩:特別是添加附件的時(shí)候,有些還需要額外去自定義類型,體驗(yàn)很差。
發(fā)送太麻煩:你需要找到你服務(wù)商的smtp地址,端口號(hào),有些服務(wù)商不是默認(rèn)的端口(@http://163.com),有些只能SSL驗(yàn)證(@http://qq.com),有些需要TLS(@gmailcom),一個(gè)不小心就發(fā)送失敗。
解析郵件復(fù)雜:Bytes坑多,還有boundary,各種格式亂碼錯(cuò)誤
引入過(guò)多的外部包:一些輪子引入了好幾個(gè)包,可能會(huì)造成包與原來(lái)的程序版本沖突(常見于requests之類的包),并且發(fā)生錯(cuò)誤無(wú)法得到及時(shí)的文檔支持。在我嘗試發(fā)送失敗后,使用django的email模塊成功發(fā)送了郵件,但是django的目的顯然不是這個(gè),使用一個(gè)如此大的框架來(lái)實(shí)現(xiàn)那么小的需求顯然不合理(并且構(gòu)造過(guò)程依然復(fù)雜)。
Zmail的優(yōu)勢(shì):
自動(dòng)填充大多數(shù)導(dǎo)致服務(wù)端拒信的頭信息(From To LocalHost之類的)
將一個(gè)字典映射為email,構(gòu)造信件就像構(gòu)造字典一樣簡(jiǎn)單
自動(dòng)尋找郵件服務(wù)商端口號(hào)地址,自動(dòng)選擇合適的協(xié)議(經(jīng)過(guò)認(rèn)證的)
只依賴于python3,嵌入其他項(xiàng)目時(shí)無(wú)需煩惱
你可以使用zmail來(lái):
作為監(jiān)控腳本的發(fā)送&接收郵件模塊,及時(shí)傳遞信息
嵌入到已有的項(xiàng)目中實(shí)現(xiàn)郵件功能
自定義郵件發(fā)送過(guò)程,諸如準(zhǔn)點(diǎn)發(fā)送、定時(shí)發(fā)送、自動(dòng)監(jiān)控等
安裝
$ pip3 install zmail
也可以使用pip代替pip3
注意:zmail僅支持python3,不支持python2,使用前所有郵箱都要開啟SMTP功能,@http://163.com和@http://gmail.com 的郵箱需要額外設(shè)定SMTP密碼,網(wǎng)上很多信息,具體自行百度google,這里先行省略。
發(fā)送郵件
import zmail
# 你的郵件內(nèi)容
mail_content = {
'subject': 'Success!', # 隨便填寫
'content': 'This message from zmail!', # 隨便填寫
}
# 使用你的郵件賬戶名和密碼登錄服務(wù)器
server = zmail.server('12345678@qq.com, '你的qq郵箱密碼')
# 發(fā)送郵件
server.send_mail('555555@qq.com', mail)
為你的郵件添加附件,修改你的郵件內(nèi)容 即可,其他內(nèi)容同上
# 你的郵件內(nèi)容
mail_content = {
'subject': 'Success!', # 隨便填寫
'content': 'This message from zmail!', # 隨便填寫
'attachments': '/Users/zyh/Documents/example.zip', # 最好使用絕對(duì)路徑,若你電腦沒(méi)有這個(gè)文件會(huì)造成錯(cuò)誤
}
給多個(gè)信箱發(fā)件,修改發(fā)送郵件 即可,其他內(nèi)容同上
# 發(fā)送郵件
server.send_mail(['555555@qq.com','666666@qq.com'], mail)
添加額外的頭信息,直接加入到mail_content即可
取回你的郵件
取得最新的郵件
import zmail
server = zmail.server('yourmail@example.com, 'yourpassword')
mail = server.get_latest()
依據(jù)id取回郵件
mail = server.get_mail(2)
依據(jù) (subject,after,before,sender)取回一個(gè)列表的郵件
mail = server.get_mails(subject='GitHub',after='2018-1-1',sender='github')
示例中, 如果 'GitHub' 在郵件的主題中,這封郵件將會(huì)被匹配, 例如' [GitHub] Your password has changed'
sender亦是如此
得到所有郵件的頭文件信息.一個(gè)由字典組成的列表,每個(gè)字典包含了所有能夠提取的頭文件.
mail_info = server.get_info()
得到郵箱的信息
mailbox_info = server.stat()
結(jié)果為包含兩個(gè)整型的元組: (郵件的數(shù)量, 郵箱的大小).
解析你的郵件
在zmail中,接收到的郵件被映射為一個(gè)字典,你可以通過(guò)訪問(wèn)python字典的形式來(lái)訪問(wèn)你的郵件,字典中的所有key在下方郵件結(jié)構(gòu)中有列出,例如
subject = mail['subject']
展示你的郵件,使用 zmail.show()
import zmail
server = zmail.server('yourmail@example.com, 'yourpassword')
mail = server.get_latest()
zmail.show(mail)
輸出 :
content-type multipart/mixed
subject Success!
to zmail_user
from zmail
date 2018-2-301:42:29 +0800
boundary ===============9196441298519098157==
content ['This message from zmail!']
contents [[b'Content-Type: text/plain; charset="utf-8"', b'MIME-Version: 1.0', b'Content-Transfer-Encoding: base64', b'', b'VGhpcyBtZXNzYWdlIGZyb20gem1haWwh', b'']]
attachments None
id 5
郵件的結(jié)構(gòu)
content-type: 郵件內(nèi)容的類型
subject: 郵件主題
to:收件人
from:寄件人
date: 年-月-日 時(shí)間 時(shí)區(qū)
boundary: 如果郵件為multiple - - - parts,你可以得到其分界線
content: 郵件的文本內(nèi)容(僅在text/plain時(shí)可以被解析)
contents: 郵件的body,里面包含著由分界線分割的每一個(gè)段落
attachments: None 或者 [['附件名稱;編碼方式','附件的二進(jìn)制內(nèi)容']...]
id: 在郵箱中的id
獲得附件
import zmail
server = zmail.server('yourmail@example.com, 'yourpassword')
mail = server.get_latest()
zmail.get_attachment(mail)
你可以重命名你的附件,使用
zmail.get_attachment(mail,'example.zip')
支持的郵件服務(wù)商列表中的郵件服務(wù)商已經(jīng)被測(cè)試可正常使用
如果你的郵箱不在此列,前往Github提交issue。
-
模塊
+關(guān)注
關(guān)注
7文章
2695瀏覽量
47431 -
郵件
+關(guān)注
關(guān)注
0文章
32瀏覽量
18805 -
python
+關(guān)注
關(guān)注
56文章
4792瀏覽量
84627
原文標(biāo)題:Python開源項(xiàng)目介紹:用zmail簡(jiǎn)單地發(fā)郵件
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論