python應(yīng)用POP3、IMAP讹开、SMTP 協(xié)議盅视,獲取郵箱驗證碼

POP3和IMAP是郵件相關(guān)的協(xié)議,IMAP是比POP3更高級一點的協(xié)議萧吠,實現(xiàn)了了客戶端和服務(wù)端的交互左冬;郵件協(xié)議在實際工作中的應(yīng)用較為廣泛。

POP3
它是因特網(wǎng)電子郵件的第一個離線協(xié)議標(biāo)準(zhǔn),POP3允許用戶從服務(wù)器上把郵件存儲到本地主機(即自己的計算機)上,POP3協(xié)議允許電子郵件客戶端下載服務(wù)器上的郵件纸型,但是在客戶端的操作(如移動郵件、標(biāo)記已讀等),不會反饋到服務(wù)器上

image

SMTP
SMTP 的全稱是“Simple Mail Transfer Protocol”狰腌,即簡單郵件傳輸協(xié)議除破。它是一組用于從源地址到目的地址傳輸郵件的規(guī)范,通過它來控制郵件的中轉(zhuǎn)方式琼腔。SMTP 協(xié)議屬于 TCP/IP 協(xié)議簇瑰枫,它幫助每臺計算機在發(fā)送或中轉(zhuǎn)信件時找到下一個目的地。SMTP 服務(wù)器就是遵循 SMTP 協(xié)議的發(fā)送郵件服務(wù)器丹莲。
  SMTP 認(rèn)證光坝,簡單地說就是要求必須在提供了賬戶名和密碼之后才可以登錄 SMTP 服務(wù)器,這就使得那些垃圾郵件的散播者無可乘之機甥材。
  增加 SMTP 認(rèn)證的目的是為了使用戶避免受到垃圾郵件的侵?jǐn)_盯另。

IMAP
IMAP全稱是Internet Mail Access Protocol,即交互式郵件存取協(xié)議洲赵,它是跟POP3類似郵件訪問標(biāo)準(zhǔn)協(xié)議之一鸳惯。不同的是,開啟了IMAP后叠萍,您在電子郵件客戶端收取的郵件仍然保留在服務(wù)器上芝发,同時在客戶端上的操作都會反饋到服務(wù)器上,如:刪除郵件苛谷,標(biāo)記已讀等辅鲸,服務(wù)器上的郵件也會做相應(yīng)的動作。

image

在python中支持POP3協(xié)議腹殿,也支持IMAP協(xié)議独悴,但是IMAP因為其交互性逐漸取代了POP3成為了郵件服務(wù)器與客戶端的交互,下面主要使用IMAP協(xié)議來獲取郵件正文赫蛇、附件绵患、移動或刪除郵件。

import re
import email
from imapclient import IMAPClient
import traceback

class **EmailRead**(object):
"""實現(xiàn)讀取郵件正文悟耘、讀取附件功能落蝙、移動郵件、刪除郵件"""

def **__init__**(self, user, passwd, index_file, re_list, server_adderss, port, move_file=None):
"""

:param user: 登陸用戶名
:param passwd: 登陸密碼
:param index_file: 需要查詢的郵件文件夾
:param re_list: 需要查找的郵件主題滿足的正則表達(dá)式
:param move_file: 將郵件移動到該文件夾
:param server_adderss: 郵件服務(wù)器地址
:param port: 郵件服務(wù)器IMAP協(xié)議端口
"""
self.server_address = server_adderss
self.user = user
self.password = passwd
self.index_file = index_file
self.move_file = move_file
self.re_list = re_list
self.server = None
self.port = port
self.item = None
self.file_type_list = ['image/jpeg', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']

def **reade_email**(self):
"""
查找郵件并根據(jù)附件類型下載附件
:return: 
"""
self.server = IMAPClient(self.server_address, port=993, ssl=True)
self.server.login(self.user, self.password)
self.server.select_folder(self.index_file, readonly=False)
result = self.server.search(['all']) # 獲取所有郵件

if result:
self.messages = self.server.fetch(result, ['BODY.PEEK[]'])
for message_id, message in self.messages.items():
e = email.message_from_string(message[b'BODY[]'].decode())
# 生成Message類型 e
try:
subject = str(email.header.make_header(
email.header.decode_header(e['SUBJECT']))) # 解碼subject
except:
subject = e['SUBJECT']

"""正則匹配標(biāo)題中的 MSO """
if self.subject_re(subject):
"""獲取附件和正文"""
for part in e.walk():
filename = part.get_filename()
content_type = part.get_content_type()
con = part.get_payload(decode=False)
if not filename and content_type == 'text/html':
if isinstance(con, bytes):
con = part.get_payload(decode=True).decode()
elif filename and content_type in self.file_type_list:
con = part.get_payload(decode=True)
with open(filename, 'wb') as f:
f.write(con)
f.close()
else:
# list返回附件對象作用類似于e
pass

def **move_email**(self, *id):
"""郵件移動和刪除功能:傳入的move_file是None則不移動只刪除"""
messages = self.server.fetch(list(id), ['BODY.PEEK[]'])
if None!= self.move_file:
self.server.copy(messages, self.move_file) # move
self.server.delete_messages(messages) # delete
self.server.expunge() # save delete

def **subject_re**(self, subject):
"""用于匹配主題正則表達(dá)式"""
for i in self.re_list:
mso_re = re.search(i, subject)
if mso_re:
return True
else:
pass
return False

def**close**(self):

self.server.logout()

該系統(tǒng)也可以用于解決部分郵件驗證的暂幼,可以直接從郵件獲取到驗證碼的正文筏勒,并進(jìn)一步提取。

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旺嬉,一起剝皮案震驚了整個濱河市管行,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌邪媳,老刑警劉巖捐顷,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荡陷,死亡現(xiàn)場離奇詭異,居然都是意外死亡迅涮,警方通過查閱死者的電腦和手機废赞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叮姑,“玉大人唉地,你說我怎么就攤上這事〈福” “怎么了耘沼?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長朱盐。 經(jīng)常有香客問我群嗤,道長,這世上最難降的妖魔是什么托享? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任骚烧,我火速辦了婚禮,結(jié)果婚禮上闰围,老公的妹妹穿的比我還像新娘赃绊。我一直安慰自己,他們只是感情好羡榴,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布碧查。 她就那樣靜靜地躺著,像睡著了一般校仑。 火紅的嫁衣襯著肌膚如雪忠售。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天迄沫,我揣著相機與錄音稻扬,去河邊找鬼。 笑死羊瘩,一個胖子當(dāng)著我的面吹牛泰佳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尘吗,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逝她,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了睬捶?” 一聲冷哼從身側(cè)響起黔宛,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎擒贸,沒想到半個月后臀晃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體觉渴,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年积仗,在試婚紗的時候發(fā)現(xiàn)自己被綠了疆拘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜕猫。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡寂曹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出回右,到底是詐尸還是另有隱情隆圆,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布翔烁,位于F島的核電站渺氧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蹬屹。R本人自食惡果不足惜侣背,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望慨默。 院中可真熱鬧贩耐,春花似錦、人聲如沸厦取。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虾攻。三九已至铡买,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霎箍,已是汗流浹背奇钞。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留漂坏,地道東北人景埃。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像樊拓,于是被迫代替她去往敵國和親纠亚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容