poplib
— POP3 協議客戶端¶
原始碼: Lib/poplib.py
此模組定義了一個類,POP3
,它封裝了與 POP3 伺服器的連線並實現了 RFC 1939 中定義的協議。POP3
類支援 RFC 1939 中的最小和可選命令集。POP3
類還支援 RFC 2595 中引入的 STLS
命令,以在已建立的連線上啟用加密通訊。
此外,此模組還提供了一個類 POP3_SSL
,它提供對使用 SSL 作為底層協議層的 POP3 伺服器的連線支援。
請注意,POP3 儘管得到廣泛支援,但已過時。POP3 伺服器的實現質量差異很大,而且很多都相當差。如果您的郵件伺服器支援 IMAP,那麼最好使用 imaplib.IMAP4
類,因為 IMAP 伺服器往往實現得更好。
可用性:非 WASI。
此模組在 WebAssembly 上不起作用或不可用。有關更多資訊,請參閱 WebAssembly 平臺。
poplib
模組提供了兩個類
- class poplib.POP3(host, port=POP3_PORT[, timeout])¶
此類實現了實際的 POP3 協議。連線在例項初始化時建立。如果省略 port,則使用標準 POP3 埠 (110)。可選的 timeout 引數指定連線嘗試的超時時間(以秒為單位)(如果未指定,將使用全域性預設超時設定)。
使用引數
self
、host
、port
觸發 審計事件poplib.connect
。所有命令都將觸發 審計事件
poplib.putline
,引數為self
和line
,其中line
是即將傳送到遠端主機的位元組。版本 3.9 中的變化: 如果 timeout 引數設定為零,它將引發
ValueError
以防止建立非阻塞套接字。
- class poplib.POP3_SSL(host, port=POP3_SSL_PORT, *, timeout=None, context=None)¶
這是
POP3
的一個子類,它透過 SSL 加密套接字連線到伺服器。如果未指定 port,則使用 995,即標準的 POP3-over-SSL 埠。timeout 的工作方式與POP3
建構函式中相同。context 是一個可選的ssl.SSLContext
物件,它允許將 SSL 配置選項、證書和私鑰捆綁到一個單一的(可能是長期存在的)結構中。請閱讀 安全注意事項 以瞭解最佳實踐。使用引數
self
、host
、port
觸發 審計事件poplib.connect
。所有命令都將觸發 審計事件
poplib.putline
,引數為self
和line
,其中line
是即將傳送到遠端主機的位元組。版本 3.2 中的變化: 添加了 context 引數。
在 3.4 版更改: 該類現在支援透過
ssl.SSLContext.check_hostname
進行主機名檢查和*伺服器名稱指示*(參見ssl.HAS_SNI
)。版本 3.9 中的變化: 如果 timeout 引數設定為零,它將引發
ValueError
以防止建立非阻塞套接字。在 3.12 版更改: 已移除已棄用的 keyfile 和 certfile 引數。
一個異常被定義為 poplib
模組的一個屬性
參見
- 模組
imaplib
標準的 Python IMAP 模組。
- Fetchmail 常見問題
fetchmail POP/IMAP 客戶端的常見問題收集了有關 POP3 伺服器差異和 RFC 不符合的資訊,如果您需要基於 POP 協議編寫應用程式,這可能很有用。
POP3 物件¶
所有 POP3 命令都由同名的小寫方法表示;大多數方法返回伺服器傳送的響應文字。
一個 POP3
例項具有以下方法
- POP3.set_debuglevel(level)¶
設定例項的除錯級別。這控制了列印的除錯輸出量。預設值
0
不產生除錯輸出。值為1
產生適量的除錯輸出,通常每個請求一行。值為2
或更高產生最大量的除錯輸出,記錄控制連線上傳送和接收的每一行。
- POP3.getwelcome()¶
返回 POP3 伺服器傳送的問候字串。
- POP3.user(username)¶
傳送 user 命令,響應應指示需要密碼。
- POP3.apop(user, secret)¶
使用更安全的 APOP 認證登入 POP3 伺服器。
- POP3.rpop(user)¶
使用 RPOP 認證(類似於 UNIX r-commands)登入 POP3 伺服器。
- POP3.stat()¶
獲取郵箱狀態。結果是一個包含 2 個整數的元組:
(訊息計數, 郵箱大小)
。
- POP3.list([which])¶
請求訊息列表,結果形式為
(響應, ['mesg_num octets', ...], 八位位元組)
。如果設定了 which,則它是要列出的訊息。
- POP3.retr(which)¶
檢索整個訊息號 which,並設定其已讀標記。結果形式為
(響應, ['line', ...], 八位位元組)
。
- POP3.dele(which)¶
標記訊息號 which 以進行刪除。在大多數伺服器上,刪除操作實際上要等到 QUIT 命令執行後才進行(主要例外是 Eudora QPOP,它透過在任何斷開連線時執行待處理刪除來故意違反 RFC)。
- POP3.rset()¶
移除郵箱的任何刪除標記。
- POP3.noop()¶
什麼也不做。可能用作保持連線。
- POP3.quit()¶
登出:提交更改,解鎖郵箱,斷開連線。
- POP3.top(which, howmuch)¶
檢索訊息號 which 的訊息頭以及訊息頭之後 howmuch 行的訊息。結果形式為
(響應, ['line', ...], 八位位元組)
。此方法使用的 POP3 TOP 命令與 RETR 命令不同,它不設定訊息的已讀標記;不幸的是,TOP 在 RFC 中規範不佳,並且在非主流伺服器中經常出現問題。在使用此方法之前,請針對您將使用的 POP3 伺服器手動測試它。
- POP3.uidl(which=None)¶
返回訊息摘要(唯一 ID)列表。如果指定了 which,結果包含該訊息的唯一 ID,形式為
'response mesgnum uid'
,否則結果是列表(響應, ['mesgnum uid', ...], 八位位元組)
。
- POP3.utf8()¶
嘗試切換到 UTF-8 模式。如果成功,返回伺服器響應,否則引發
error_proto
。在 RFC 6856 中指定。在 3.5 版本加入。
- POP3.stls(context=None)¶
按照 RFC 2595 中的規定,在活動連線上啟動一個 TLS 會話。這隻允許在使用者認證之前進行。
context 引數是一個
ssl.SSLContext
物件,它允許將 SSL 配置選項、證書和私鑰捆綁到一個單一的(可能是長期存在的)結構中。請閱讀 安全注意事項 以瞭解最佳實踐。此方法支援透過
ssl.SSLContext.check_hostname
和 伺服器名稱指示(參見ssl.HAS_SNI
)進行主機名檢查。在 3.4 版本加入。
POP3_SSL
的例項沒有額外的方法。此子類的介面與其父類相同。
POP3 示例¶
這是一個最小的示例(沒有錯誤檢查),它開啟一個郵箱並檢索和列印所有訊息
import getpass, poplib
M = poplib.POP3('localhost')
M.user(getpass.getuser())
M.pass_(getpass.getpass())
numMessages = len(M.list()[1])
for i in range(numMessages):
for j in M.retr(i+1)[1]:
print(j)
在模組的末尾,有一個測試部分,其中包含一個更廣泛的用法示例。