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,其中引數為 selfline,其中 line 是即將傳送到遠端主機的位元組。

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

class poplib.POP3_SSL(host, port=POP3_SSL_PORT, *, timeout=None, context=None)

這是 POP3 的子類,它透過 SSL 加密套接字連線到伺服器。如果未指定 port,則使用標準的基於 SSL 的 POP3 埠 995。timeout 的工作方式與 POP3 建構函式中相同。context 是一個可選的 ssl.SSLContext 物件,它允許將 SSL 配置選項、證書和私鑰捆綁到一個(可能長期存在的)結構中。請閱讀 安全考慮 以獲得最佳實踐。

使用引數 self, host, port 引發一個審計事件 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 命令)登入 POP3 伺服器。

POP3.stat()

獲取郵箱狀態。結果是一個包含 2 個整數的元組:(訊息數量, 郵箱大小)

POP3.list([which])

請求訊息列表,結果的形式為 (響應, ['訊息編號 位元組數', ...], 位元組數)。如果設定了 *which*,則它是要列出的訊息。

POP3.retr(which)

檢索訊息編號 *which* 的完整訊息,並設定其已讀標誌。結果的形式為 (響應, ['行', ...], 位元組數)

POP3.dele(which)

標記訊息編號 *which* 以進行刪除。在大多數伺服器上,刪除操作實際上不會執行,直到 QUIT 命令(主要例外是 Eudora QPOP,它故意違反 RFC,在任何斷開連線時執行待刪除操作)。

POP3.rset()

刪除郵箱的所有刪除標記。

POP3.noop()

不執行任何操作。可以用作保持連線的活動狀態。

POP3.quit()

登出:提交更改、解鎖郵箱、斷開連線。

POP3.top(which, howmuch)

檢索訊息編號為 *which* 的訊息頭以及訊息頭後 *howmuch* 行的內容。結果的形式為 (響應, ['行', ...], 位元組數)

此方法使用的 POP3 TOP 命令與 RETR 命令不同,它不會設定訊息的已讀標誌;不幸的是,TOP 在 RFC 中定義不明確,並且在非品牌伺服器中經常出現問題。在使用此方法之前,請手動針對您將使用的 POP3 伺服器進行測試。

POP3.uidl(which=None)

返回訊息摘要(唯一 ID)列表。如果指定了 *which*,則結果包含該訊息的唯一 ID,形式為 '響應 訊息編號 uid',否則結果為列表 (響應, ['訊息編號 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)

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