poplib — POP3プロトコルクライアント—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/library/poplib
移動先:案内検索

poplib —POP3プロトコルクライアント

ソースコード: :source: `Lib / poplib.py`



このモジュールは、クラス POP3 を定義します。このクラスは、POP3サーバーへの接続をカプセル化し、 RFC 1939 で定義されているプロトコルを実装します。 POP3 クラスは、 RFC 1939 の最小コマンドセットとオプションコマンドセットの両方をサポートします。 POP3 クラスは、 RFC 2595 で導入されたSTLSコマンドもサポートし、すでに確立されている接続で暗号化通信を有効にします。

さらに、このモジュールはクラス POP3_SSL を提供します。これは、基盤となるプロトコル層としてSSLを使用するPOP3サーバーへの接続をサポートします。

POP3は広くサポートされていますが、廃止されていることに注意してください。 POP3サーバーの実装品質は大きく異なり、あまりにも多くは非常に貧弱です。 メールサーバーがIMAPをサポートしている場合は、 imaplib.IMAP4 クラスを使用することをお勧めします。これは、IMAPサーバーがより適切に実装される傾向があるためです。

poplib モジュールは、次の2つのクラスを提供します。

class poplib.POP3(host, port=POP3_PORT[, timeout])
このクラスは、実際のPOP3プロトコルを実装します。 接続は、インスタンスが初期化されるときに作成されます。 ポートを省略すると、標準のPOP3ポート(110)が使用されます。 オプションの timeout パラメーターは、接続試行のタイムアウトを秒単位で指定します(指定されていない場合は、グローバルなデフォルトのタイムアウト設定が使用されます)。
class poplib.POP3_SSL(host, port=POP3_SSL_PORT, keyfile=None, certfile=None, timeout=None, context=None)

これは POP3 のサブクラスであり、SSL暗号化ソケットを介してサーバーに接続します。 port が指定されていない場合(995)、標準のPOP3-over-SSLポートが使用されます。 timeout は、 POP3 コンストラクターと同様に機能します。 context は、オプションの ssl.SSLContext オブジェクトであり、SSL構成オプション、証明書、および秘密鍵を単一の(潜在的に長寿命の)構造にバンドルできます。 ベストプラクティスについては、セキュリティに関する考慮事項をお読みください。

keyfile および certfile は、 context のレガシー代替手段であり、SSL接続用にそれぞれPEM形式の秘密鍵および証明書チェーンファイルを指すことができます。

バージョン3.2で変更: context パラメーターが追加されました。

バージョン3.4で変更:クラスは ssl.SSLContext.check_hostname および Server Name Indication によるホスト名チェックをサポートするようになりました( ssl.HAS_SNI を参照) )。

バージョン3.6以降非推奨: keyfile および certfile は非推奨になり、 context が優先されます。 代わりに ssl.SSLContext.load_cert_chain()を使用するか、 ssl.create_default_context()にシステムの信頼できるCA証明書を選択させてください。

1つの例外は、 poplib モジュールの属性として定義されています。

exception poplib.error_proto
このモジュールからのエラーで例外が発生しました( socket モジュールからのエラーはキャッチされません)。 例外の理由は、ストリングとしてコンストラクターに渡されます。

も参照してください

モジュール imaplib
標準のPythonIMAPモジュール。
Fetchmailに関するよくある質問
fetchmail POP / IMAPクライアントのFAQは、POPプロトコルに基づいてアプリケーションを作成する必要がある場合に役立つ可能性のあるPOP3サーバーのバリエーションとRFC非準拠に関する情報を収集します。


POP3オブジェクト

すべてのPOP3コマンドは、小文字の同じ名前のメソッドで表されます。 ほとんどは、サーバーから送信された応答テキストを返します。

POP3 インスタンスには次のメソッドがあります。

POP3.set_debuglevel(level)
インスタンスのデバッグレベルを設定します。 これは、出力されるデバッグ出力の量を制御します。 デフォルトの0は、デバッグ出力を生成しません。 1の値は、適度な量のデバッグ出力を生成します。通常、要求ごとに1行です。 2以上の値は、最大量のデバッグ出力を生成し、制御接続で送受信された各行をログに記録します。
POP3.getwelcome()
POP3サーバーから送信されたグリーティング文字列を返します。
POP3.capa()

RFC 2449 で指定されているサーバーの機能を照会します。 {'name': ['param'...]}の形式で辞書を返します。

バージョン3.4の新機能。

POP3.user(username)
ユーザーコマンドを送信します。応答は、パスワードが必要であることを示している必要があります。
POP3.pass_(password)
パスワードを送信します。応答にはメッセージ数とメールボックスサイズが含まれます。 注:サーバー上のメールボックスは、quit()が呼び出されるまでロックされます。
POP3.apop(user, secret)
より安全なAPOP認証を使用して、POP3サーバーにログインします。
POP3.rpop(user)
RPOP認証(UNIXのrコマンドと同様)を使用して、POP3サーバーにログインします。
POP3.stat()
メールボックスのステータスを取得します。 結果は、(message count, mailbox size)の2つの整数のタプルになります。
POP3.list([which])
リクエストメッセージリスト、結果は(response, ['mesg_num octets', ...], octets)の形式です。 which が設定されている場合は、リストするメッセージです。
POP3.retr(which)
メッセージ番号全体 which を取得し、表示フラグを設定します。 結果は(response, ['line', ...], octets)の形式になります。
POP3.dele(which)
削除するメッセージ番号 ' にフラグを付けます。 ほとんどのサーバーでは、削除はQUITまで実際には実行されません(主な例外はEudora QPOPであり、切断時に保留中の削除を行うことでRFCに故意に違反します)。
POP3.rset()
メールボックスの削除マークをすべて削除します。
POP3.noop()
何もしない。 キープアライブとして使用される可能性があります。
POP3.quit()
サインオフ:変更のコミット、メールボックスのロック解除、接続の切断。
POP3.top(which, howmuch)

メッセージヘッダーと、メッセージ番号 which のヘッダーの後のメッセージの howmuch 行を取得します。 結果は(response, ['line', ...], octets)の形式になります。

このメソッドが使用するPOP3TOPコマンドは、RETRコマンドとは異なり、メッセージのseenフラグを設定しません。 残念ながら、TOPはRFCで十分に指定されておらず、ブランド外のサーバーでは頻繁に壊れています。 信頼する前に、使用するPOP3サーバーに対してこの方法を手動でテストしてください。

POP3.uidl(which=None)
メッセージダイジェスト(一意のID)リストを返します。 which が指定されている場合、結果にはそのメッセージの一意のIDが'response mesgnum uidの形式で含まれます。それ以外の場合、結果はリスト(response, ['mesgnum uid', ...], octets)になります。
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 および Server Name Indication を介したホスト名チェックをサポートします( 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)

モジュールの最後には、より広範な使用例を含むテストセクションがあります。