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 引數指定連線嘗試的超時時間(以秒為單位)(如果未指定,將使用全域性預設超時設定)。

使用引數 selfhostport 觸發 審計事件 poplib.connect

所有命令都將觸發 審計事件 poplib.putline,引數為 selfline,其中 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 配置選項、證書和私鑰捆綁到一個單一的(可能是長期存在的)結構中。請閱讀 安全注意事項 以瞭解最佳實踐。

使用引數 selfhostport 觸發 審計事件 poplib.connect

所有命令都將觸發 審計事件 poplib.putline,引數為 selfline,其中 line 是即將傳送到遠端主機的位元組。

版本 3.2 中的變化: 添加了 context 引數。

在 3.4 版更改: 該類現在支援透過 ssl.SSLContext.check_hostname 進行主機名檢查和*伺服器名稱指示*(參見 ssl.HAS_SNI)。

版本 3.9 中的變化: 如果 timeout 引數設定為零,它將引發 ValueError 以防止建立非阻塞套接字。

在 3.12 版更改: 已移除已棄用的 keyfilecertfile 引數。

一個異常被定義為 poplib 模組的一個屬性

exception poplib.error_proto

此模組中的任何錯誤都會引發此異常(socket 模組中的錯誤不會被捕獲)。異常的原因作為字串傳遞給建構函式。

參見

模組 imaplib

標準的 Python IMAP 模組。

Fetchmail 常見問題

fetchmail POP/IMAP 客戶端的常見問題收集了有關 POP3 伺服器差異和 RFC 不符合的資訊,如果您需要基於 POP 協議編寫應用程式,這可能很有用。

POP3 物件

所有 POP3 命令都由同名的小寫方法表示;大多數方法返回伺服器傳送的響應文字。

一個 POP3 例項具有以下方法

POP3.set_debuglevel(level)

設定例項的除錯級別。這控制了列印的除錯輸出量。預設值 0 不產生除錯輸出。值為 1 產生適量的除錯輸出,通常每個請求一行。值為 2 或更高產生最大量的除錯輸出,記錄控制連線上傳送和接收的每一行。

POP3.getwelcome()

返回 POP3 伺服器傳送的問候字串。

POP3.capa()

查詢伺服器的功能,如 RFC 2449 中所指定。以 {'name': ['param'...]} 的形式返回一個字典。

在 3.4 版本加入。

POP3.user(username)

傳送 user 命令,響應應指示需要密碼。

POP3.pass_(password)

傳送密碼,響應包括訊息計數和郵箱大小。注意:伺服器上的郵箱在呼叫 quit() 之前被鎖定。

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)

在模組的末尾,有一個測試部分,其中包含一個更廣泛的用法示例。