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)
モジュールの最後には、より広範な使用例を含むテストセクションがあります。