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,則使用標準的基於 SSL 的 POP3 埠 995。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 命令)登入 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)
在模組末尾,有一個測試部分,其中包含更廣泛的用法示例。