python應用POP3、IMAP、SMTP 協議,獲取郵箱驗證碼

POP3和IMAP是郵件相關的協議,IMAP是比POP3更高級一點的協議,實現了了客戶端和服務端的交互;郵件協議在實際工作中的應用較為廣泛。

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

v2-78083983667898d47dfe4e1e599addc8_hd.j



SMTP
SMTP?的全稱是“Simple Mail Transfer Protocol”,即簡單郵件傳輸協議。它是一組用于從源地址到目的地址傳輸郵件的規范,通過它來控制郵件的中轉方式。SMTP 協議屬于 TCP/IP 協議簇,它幫助每臺計算機在發送或中轉信件時找到下一個目的地。SMTP 服務器就是遵循 SMTP 協議的發送郵件服務器。?
SMTP 認證,簡單地說就是要求必須在提供了賬戶名和密碼之后才可以登錄 SMTP 服務器,這就使得那些垃圾郵件的散播者無可乘之機。?
增加 SMTP 認證的目的是為了使用戶避免受到垃圾郵件的侵擾。

IMAP
IMAP全稱是Internet Mail Access Protocol,即交互式郵件存取協議,它是跟POP3類似郵件訪問標準協議之一。不同的是,開啟了IMAP后,您在電子郵件客戶端收取的郵件仍然保留在服務器上,同時在客戶端上的操作都會反饋到服務器上,如:刪除郵件,標記已讀等,服務器上的郵件也會做相應的動作。

v2-b96ae558ea9280fb6f200d755f97059e_hd.j


在python中支持POP3協議,也支持IMAP協議,但是IMAP因為其交互性逐漸取代了POP3成為了郵件服務器與客戶端的交互,下面主要使用IMAP協議來獲取郵件正文、附件、移動或刪除郵件。
import re
import email
from imapclient import IMAPClient
import traceback


class?EmailRead(object):
"""實現讀取郵件正文、讀取附件功能、移動郵件、刪除郵件"""

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: 需要查找的郵件主題滿足的正則表達式
:param move_file: 將郵件移動到該文件夾
:param server_adderss: 郵件服務器地址
:param port: 郵件服務器IMAP協議端口
"""
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):
"""
查找郵件并根據附件類型下載附件
: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']

"""正則匹配標題中的 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):
"""用于匹配主題正則表達式"""
for i in self.re_list:
mso_re = re.search(i, subject)
if mso_re:
return True
else:
pass
return False

defclose(self):

self.server.logout()

該系統也可以用于解決部分郵件驗證的,可以直接從郵件獲取到驗證碼的正文,并進一步提取。

v2-7660a7ef312c282e70bc1aae6919624a_hd.j

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279942.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279942.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279942.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

固件中啟用的虛擬化否_哪些固件或硬件機制可啟用強制關機?

固件中啟用的虛擬化否At one time or another, all of us have had to force our computers to shut down by pushing and holding the power button down until they powered off. Is this mechanism hardware-based, firmware-based, or both? Today’s SuperUser Q&A p…

簡述閉包

閉包 這是我對閉包的一點小理解.有問題請直接指出,在此先謝過! 閉包的含義 封閉隔離的空間,在javascript中,只有函數能夠符合這種特性; 為什么要用閉包呢? 因為在引用外部js文件(如jquery,各種框架)時防止變量重名造成的問題,同時也使代碼更具隱私性; 獲取閉包中數據的方法: …

Confluence 6 配置服務器基礎地址備注

使用不同 URL。如果你配置了不同的基礎 URL 地址或者你站點的訪問者使用了不同的 URL 地址來訪問你的 Confluence 地址,你有很大概率可能會受到錯誤信息。修改上下文地址。如果你修改了基礎 URL 地址的上下文地址,你同時也需要修改下面的配置&#xff1a…

2019第10周知識總結

react 事件綁定 函數寫法 文檔總結 https://react.docschina.org/docs/handling-events.html 1 通過 constroucor綁定 class Toggle extends React.Component {constructor(props) {super(props);this.state {isToggleOn: true};// This binding is necessary to make this wo…

.NET 云原生架構師訓練營(基于 OP Storming 和 Actor 的大型分布式架構二)--學習筆記...

▲ 點擊上方“DotNet NB”關注公眾號回復“1”獲取開發者路線圖學習分享 丨作者 / 鄭 子 銘 這是DotNet NB 公眾號的第202篇原創文章目錄為什么我們用 OrleansDapr VS OrleansActor 模型Orleans 的核心概念結合 OP Storming 的實踐結合 OP Storming 的實踐業務模型設計模型代…

PHP 多維數組轉json對象

PHP 多維數組轉json對象 php 數組轉json對象&#xff0c;可能大家都知道要用json_encode,但是轉換出來的格式多有不同&#xff0c;此處做個小小的記錄&#xff01; 1. 一維數組轉json對象 <?php $arr_1 [one, two, three]; var_dump(json_encode($arr_1)); $arr_2 [0 >…

微軟文本檢索_如何在Microsoft Word中引用其他文檔中的文本

微軟文本檢索You probably have some text that you type often in your Word documents, such as addresses. Instead of retyping this text every time you need it, you can put this common text into one Word document and reference it in other documents–it’ll eve…

Hadoop-Flume-類比吸塵器圖解

2019獨角獸企業重金招聘Python工程師標準>>> 這是我自己理解Hadoop-Flume的方式 轉載于:https://my.oschina.net/u/3697442/blog/1560613

BZOJ4327:[JSOI2012]玄武密碼(SAM)

Description 在美麗的玄武湖畔&#xff0c;雞鳴寺邊&#xff0c;雞籠山前&#xff0c;有一塊富饒而秀美的土地&#xff0c;人們喚作進香河。相傳一日&#xff0c;一縷紫氣從天而至&#xff0c;只一瞬間便消失在了進香河中。老人們說&#xff0c;這是玄武神靈將天書藏匿在此。 很…

ChatGPT 之后,再玩玩 Stable-Diffusion

前些天體驗的 ChatGPT 主要用來進行文本方面的處理&#xff0c;那么圖片生成有沒有這樣的 AI 工具 呢&#xff1f;答案是肯定的。例如&#xff1a;和菜頭公眾號的題圖和文章中的插圖大多都是使用 Stable-Diffusion 的 AI 圖形生成工具創作的。順著 Stable-Diffusion 搜索了下相…

滲透測試入門DVWA 教程1:環境搭建

首先歡迎新萌入坑。哈哈。你可能抱著好奇心或者疑問。DVWA 是個啥&#xff1f; DVWA是一款滲透測試的演練系統&#xff0c;在圈子里是很出名的。如果你需要入門&#xff0c;并且找不到合適的靶機&#xff0c;那我就推薦你用DVWA。 我們通常將演練系統稱為靶機&#xff0c;下面請…

指派問題(匈牙利算法)

問題描述&#xff1a; 在生活中經常遇到這樣的問題&#xff0c;某單位需完成n項任務&#xff0c;恰好有n個人可承擔這些任務。由于每人的專長不同&#xff0c;各人完成任務不同(或所費時間)&#xff0c;效率也不同。于是產生應指派哪個人去完成哪項任務&#xff0c;使完成n項任…

移動硬盤改臺式機硬盤_如何在臺式機或移動設備上離線使用Google云端硬盤

移動硬盤改臺式機硬盤If there’s any drawback to using cloud-based services for all your productivity and organization needs, it’s that if you can’t get an Internet connection, you’re basically out of luck. 如果使用基于云的服務來滿足您的所有生產力和組織需…

你可能不知道的容器鏡像安全實踐

大家好&#xff0c;我是Edison。最近在公司搭建CI流水線&#xff0c;涉及到容器鏡像安全的話題&#xff0c;形成了一個筆記&#xff0c;分享與你&#xff0c;也希望我們都能夠提高對安全的重視。時代背景近年來應用程序逐步廣泛運行在容器內&#xff0c;容器的采用率也是逐年上…

從零基礎到拿到網易Java實習offer,談談我的學習經驗

微信公眾號【程序員江湖】作者黃小斜&#xff0c;斜杠青年&#xff0c;某985碩士&#xff0c;阿里研發工程師&#xff0c;于2018 年秋招拿到 BAT 頭條、網易、滴滴等 8 個大廠 offer個人擅長領域 &#xff1a;自學編程、技術校園招聘、軟件工程考研&#xff08;關注公眾號后回復…

【Win 10 應用開發】UI Composition 札記(二):基本構件

在上一篇中&#xff0c;老周用一個示例&#xff0c;演示了框架視圖的創建過程&#xff0c;在本篇中&#xff0c;老周將給大伙伴們說一下 Composition 構建 UI 的一些“零件”。 UI Composition 有一個核心類——對&#xff0c;就是 Compositor 類&#xff0c;它是總生產車間&am…

禁用內置鍵盤_如何禁用Windows 10的所有內置廣告

禁用內置鍵盤Windows 10 has a lot of built-in advertising. This isn’t just about the free upgrade offer: Even if you purchase a new PC that comes with a Windows 10 license or spend $200 for a copy of Windows 10 Professional, you’ll see ads in your operati…

zbb20180710 maven Failed to read artifact descriptor--maven

Failed to read artifact descriptor--maven2016年09月10日 13:30:46閱讀數&#xff1a;13036在開發的過程中,作為新手,經常遇到Maven下載依賴的時候,"Failed to read artifact descriptor for xxx:jar"的錯誤對于這種非業務相關的問題,耽誤時間非常不效率,看到網站很…

震驚!頂著 39.5℃高燒 ,我和這哥倆都聊了些啥?

這是頭哥侃碼的第271篇原創上周三&#xff0c;我邀請了兩位嘉賓進入直播間&#xff0c;即便自己頂著 39.5 度的高燒&#xff0c;還是強打精神與這哥倆聊了倆小時。相信關注我的朋友們都知道&#xff0c;我是頭哥侃碼的主理人&#xff0c;同時也是上海TGO上海分會董事會成員。趙…

CAS原理分析及ABA問題詳解

什么是CAS CAS即Compare And Swap的縮寫&#xff0c;翻譯成中文就是比較并交換&#xff0c;其作用是讓CPU比較內存中某個值是否和預期的值相同&#xff0c;如果相同則將這個值更新為新值&#xff0c;不相同則不做更新&#xff0c;也就是CAS是原子性的操作(讀和寫兩者同時具有原…