20.10. imaplib — IMAP4プロトコルクライアント—Pythonドキュメント

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

20.10。 imaplib —IMAP4プロトコルクライアント

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



このモジュールは、 IMAP4IMAP4_SSLIMAP4_stream の3つのクラスを定義します。これらのクラスは、IMAP4サーバーへの接続をカプセル化し、定義されたIMAP4rev1クライアントプロトコルの大規模なサブセットを実装します。 RFC 2060 で。 IMAP4( RFC 1730 )サーバーとの下位互換性がありますが、STATUSコマンドはIMAP4ではサポートされていないことに注意してください。

imaplib モジュールによって3つのクラスが提供されます。 IMAP4 は基本クラスです。

class imaplib.IMAP4([host[, port]])
このクラスは、実際のIMAP4プロトコルを実装します。 インスタンスが初期化されると、接続が作成され、プロトコルバージョン(IMAP4またはIMAP4rev1)が決定されます。 host が指定されていない場合は、(ローカルホスト)が使用されます。 ポートを省略すると、標準のIMAP4ポート(143)が使用されます。

IMAP4 クラスの属性として、次の3つの例外が定義されています。

exception IMAP4.error
エラーが発生すると例外が発生します。 例外の理由は、ストリングとしてコンストラクターに渡されます。
exception IMAP4.abort
IMAP4サーバーエラーにより、この例外が発生します。 これは IMAP4.error のサブクラスです。 インスタンスを閉じて新しいインスタンスをインスタンス化すると、通常、この例外からの回復が可能になることに注意してください。
exception IMAP4.readonly
この例外は、書き込み可能なメールボックスのステータスがサーバーによって変更された場合に発生します。 これは IMAP4.error のサブクラスです。 他のクライアントが書き込み権限を持っているため、書き込み権限を再度取得するには、メールボックスを再度開く必要があります。

安全な接続のためのサブクラスもあります:

class imaplib.IMAP4_SSL([host[, port[, keyfile[, certfile]]]])
これは、SSL暗号化ソケットを介して接続する IMAP4 から派生したサブクラスです(このクラスを使用するには、SSLサポートでコンパイルされたソケットモジュールが必要です)。 host が指定されていない場合は、(ローカルホスト)が使用されます。 port を省略すると、標準のIMAP4-over-SSLポート(993)が使用されます。 keyfile および certfile もオプションです。これらには、SSL接続用のPEM形式の秘密鍵と証明書チェーンファイルを含めることができます。

2番目のサブクラスは、子プロセスによって作成された接続を許可します。

class imaplib.IMAP4_stream(command)

これは、コマンドos.popen2()に渡すことによって作成されたstdin/stdoutファイル記述子に接続する IMAP4 から派生したサブクラスです。

バージョン2.3の新機能。

次のユーティリティ関数が定義されています。

imaplib.Internaldate2tuple(datestr)
IMAP4 INTERNALDATE文字列を解析し、対応する現地時間を返します。 戻り値は、 time.struct_time インスタンス、または文字列の形式が間違っている場合はNoneです。
imaplib.Int2AP(num)
セット[A ..の文字を使用して、整数を文字列表現に変換します。 P]。
imaplib.ParseFlags(flagstr)
IMAP4 FLAGS応答を個々のフラグのタプルに変換します。
imaplib.Time2Internaldate(date_time)
date_time をIMAP4 INTERNALDATE表現に変換します。 戻り値は、"DD-Mmm-YYYY HH:MM:SS +HHMM"(二重引用符を含む)の形式の文字列です。 date_time 引数は、エポックからの秒数( time.time()によって返される)を表す数値(intまたはfloat)、現地時間(によって返される)を表す9タプルにすることができます。 time.localtime())、または二重引用符で囲まれた文字列。 最後のケースでは、すでに正しい形式になっていると見なされます。

メールボックスが変更されると、IMAP4メッセージ番号が変更されることに注意してください。 特に、EXPUNGEコマンドが削除を実行した後、残りのメッセージの番号が付け直されます。 したがって、UIDコマンドで代わりにUIDを使用することを強くお勧めします。

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

も参照してください

プロトコル、およびそれを実装するサーバーのソースとバイナリを説明するドキュメントはすべて、ワシントン大学の IMAPインフォメーションセンターhttps://www.washington.edu/imap/ にあります。 ])。


20.0.1。 IMAP4オブジェクト

すべてのIMAP4rev1コマンドは、大文字または小文字の同じ名前のメソッドで表されます。

コマンドへのすべての引数は、AUTHENTICATEと、IMAP4リテラルとして渡されるAPPENDへの最後の引数を除いて、文字列に変換されます。 必要に応じて(文字列にはIMAP4プロトコルに依存する文字が含まれ、括弧または二重引用符で囲まれていません)、各文字列は引用符で囲まれます。 ただし、LOGINコマンドの password 引数は常に引用符で囲まれています。 引数文字列が引用されるのを避けたい場合(例: flags 引数からSTORE)、文字列を括弧で囲みます(例:r'(\Deleted)')。

各コマンドはタプルを返します:(type, [data, ...])ここで、 type は通常'OK'または'NO'であり、 data はコマンド応答、またはコマンドからの必須の結果。 各 data は、文字列またはタプルのいずれかです。 タプルの場合、最初の部分は応答のヘッダーであり、2番目の部分にはデータ(つまり、「リテラル」値)が含まれます。

以下のコマンドの message_set オプションは、処理対象の1つ以上のメッセージを指定する文字列です。 単純なメッセージ番号('1')、メッセージ番号の範囲('2:4')、またはコンマで区切られた連続しない範囲のグループ('1:3,6:9')の場合があります。 範囲には、無限の上限('3:*')を示すアスタリスクを含めることができます。

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

IMAP4.append(mailbox, flags, date_time, message)
名前付きメールボックスにメッセージを追加します。
IMAP4.authenticate(mechanism, authobject)

Authenticateコマンド—応答処理が必要です。

メカニズムは、使用する認証メカニズムを指定します。これは、インスタンス変数capabilitiesAUTH=mechanismの形式で表示されます。

authobject は、呼び出し可能なオブジェクトである必要があります。

data = authobject(response)

サーバー継続応答を処理するために呼び出されます。 エンコードされてサーバーに送信されるdataを返す必要があります。 代わりにクライアントアボート応答*を送信する必要がある場合は、Noneを返す必要があります。

IMAP4.check()
サーバー上のチェックポイントメールボックス。
IMAP4.close()
現在選択されているメールボックスを閉じます。 削除されたメッセージは、書き込み可能なメールボックスから削除されます。 これは、LOGOUTの前に推奨されるコマンドです。
IMAP4.copy(message_set, new_mailbox)
message_set メッセージを new_mailbox の最後にコピーします。
IMAP4.create(mailbox)
mailbox という名前の新しいメールボックスを作成します。
IMAP4.delete(mailbox)
mailbox という名前の古いメールボックスを削除します。
IMAP4.deleteacl(mailbox, who)

メールボックスのwhoに設定されているACLを削除します(権限を削除します)。

バージョン2.4の新機能。

IMAP4.expunge()
選択したメールボックスから削除されたアイテムを完全に削除します。 削除されたメッセージごとにEXPUNGE応答を生成します。 返されるデータには、EXPUNGEメッセージ番号のリストが受信順に含まれています。
IMAP4.fetch(message_set, message_parts)
メッセージ(の一部)をフェッチします。 message_parts は、括弧で囲まれたメッセージパーツ名の文字列である必要があります(例:"(UID BODY[TEXT])")。 返されるデータは、メッセージ部分のエンベロープとデータのタプルです。
IMAP4.getacl(mailbox)
メールボックスACLを入手してください。 この方法は非標準ですが、Cyrusサーバーでサポートされています。
IMAP4.getannotation(mailbox, entry, attribute)

メールボックスに指定されたANNOTATIONを取得します。 この方法は非標準ですが、Cyrusサーバーでサポートされています。

バージョン2.5の新機能。

IMAP4.getquota(root)

quota root のリソース使用量と制限を取得します。 このメソッドは、rfc2087で定義されているIMAP4QUOTA拡張機能の一部です。

バージョン2.3の新機能。

IMAP4.getquotaroot(mailbox)

名前付きメールボックスquota rootsのリストを取得します。 このメソッドは、rfc2087で定義されているIMAP4QUOTA拡張機能の一部です。

バージョン2.3の新機能。

IMAP4.list([directory[, pattern]])
パターンに一致するディレクトリのメールボックス名を一覧表示します。 directory はデフォルトで最上位のメールフォルダになり、 pattern はデフォルトで何にでも一致します。 返されるデータには、LIST応答のリストが含まれています。
IMAP4.login(user, password)
プレーンテキストのパスワードを使用してクライアントを識別します。 パスワードが引用されます。
IMAP4.login_cram_md5(user, password)

パスワードを保護するためにクライアントを識別するときに、CRAM-MD5認証の使用を強制します。 サーバーCAPABILITYの応答にフレーズAUTH=CRAM-MD5が含まれている場合にのみ機能します。

バージョン2.3の新機能。

IMAP4.logout()
サーバーへの接続をシャットダウンします。 サーバーBYEの応答を返します。
IMAP4.lsub([directory[, pattern]])
サブスクライブされたメールボックス名をディレクトリマッチングパターンで一覧表示します。 directory はデフォルトで最上位ディレクトリになり、 pattern はデフォルトで任意のメールボックスに一致します。 返されるデータは、メッセージ部分のエンベロープとデータのタプルです。
IMAP4.myrights(mailbox)

メールボックスのACLを表示する(つまり、 私がメールボックスに対して持っている権利)。

バージョン2.4の新機能。

IMAP4.namespace()

RFC2342で定義されているIMAP名前空間を返します。

バージョン2.3の新機能。

IMAP4.noop()
NOOPをサーバーに送信します。
IMAP4.open(host, port)
ホストポートへのソケットを開きます。 このメソッドは、 IMAP4 コンストラクターによって暗黙的に呼び出されます。 このメソッドによって確立された接続オブジェクトは、 IMAP4.read()IMAP4.readline()IMAP4.send()、および[ 147] IMAP4.shutdown()メソッド。 このメソッドをオーバーライドできます。
IMAP4.partial(message_num, message_part, start, length)
メッセージの切り捨てられた部分をフェッチします。 返されるデータは、メッセージ部分のエンベロープとデータのタプルです。
IMAP4.proxyauth(user)

認証をユーザーと想定します。 権限のある管理者が任意のユーザーのメールボックスにプロキシできるようにします。

バージョン2.3の新機能。

IMAP4.read(size)
リモートサーバーから size バイトを読み取ります。 このメソッドをオーバーライドできます。
IMAP4.readline()
リモートサーバーから1行を読み取ります。 このメソッドをオーバーライドできます。
IMAP4.recent()
サーバーに更新を要求します。 新しいメッセージがない場合、返されるデータはNoneです。それ以外の場合、RECENT応答の値です。
IMAP4.rename(oldmailbox, newmailbox)
oldmailbox という名前のメールボックスの名前を newmailbox に変更します。
IMAP4.response(code)
受信した場合は応答コード、またはNoneのデータを返します。 通常のタイプの代わりに、指定されたコードを返します。
IMAP4.search(charset, criterion[, ...])

一致するメッセージのメールボックスを検索します。 charsetNoneの場合があります。その場合、サーバーへの要求でCHARSETは指定されません。 IMAPプロトコルでは、少なくとも1つの基準を指定する必要があります。 サーバーがエラーを返すと、例外が発生します。

例:

# M is a connected IMAP4 instance...
typ, msgnums = M.search(None, 'FROM', '"LDJ"')

# or:
typ, msgnums = M.search(None, '(FROM "LDJ")')
IMAP4.select([mailbox[, readonly]])
メールボックスを選択します。 返されるデータは、メールボックスEXISTS応答)内のメッセージの数です。 デフォルトのメールボックス'INBOX'です。 readonly フラグが設定されている場合、メールボックスへの変更は許可されません。
IMAP4.send(data)
dataをリモートサーバーに送信します。 このメソッドをオーバーライドできます。
IMAP4.setacl(mailbox, who, what)
メールボックスACLを設定します。 この方法は非標準ですが、Cyrusサーバーでサポートされています。
IMAP4.setannotation(mailbox, entry, attribute[, ...])

メールボックスANNOTATIONを設定します。 この方法は非標準ですが、Cyrusサーバーでサポートされています。

バージョン2.5の新機能。

IMAP4.setquota(root, limits)

quota root のリソース limits を設定します。 このメソッドは、rfc2087で定義されているIMAP4QUOTA拡張機能の一部です。

バージョン2.3の新機能。

IMAP4.shutdown()
openで確立された接続を閉じます。 このメソッドは、 IMAP4.logout()によって暗黙的に呼び出されます。 このメソッドをオーバーライドできます。
IMAP4.socket()
サーバーへの接続に使用されるソケットインスタンスを返します。
IMAP4.sort(sort_criteria, charset, search_criterion[, ...])

sortコマンドは、searchの変形であり、結果のソートセマンティクスを備えています。 返されるデータには、一致するメッセージ番号のスペースで区切られたリストが含まれています。

ソートには、 search_criterion 引数の前に2つの引数があります。 sort_criteria の括弧で囲まれたリスト、および検索 charsetsearchとは異なり、 charset 引数の検索は必須であることに注意してください。 uid searchsearchに対応するのと同じように、sortに対応するuid sortコマンドもあります。 sortコマンドは、最初に、検索条件内の文字列の解釈にcharset引数を使用して、指定された検索条件に一致するメッセージをメールボックスで検索します。 次に、一致するメッセージの数を返します。

これはIMAP4rev1拡張コマンドです。

IMAP4.status(mailbox, names)
メールボックスの名前付きステータス条件を要求します。
IMAP4.store(message_set, command, flag_list)

メールボックス内のメッセージのフラグ処理を変更します。 command は、 RFC 2060 のセクション6.4.6で、「FLAGS」、「+ FLAGS」、または「-FLAGS」のいずれかとして指定されています。 「.SILENT」のサフィックス。

たとえば、すべてのメッセージに削除フラグを設定するには、次のようにします。

typ, data = M.search(None, 'ALL')
for num in data[0].split():
   M.store(num, '+FLAGS', '\\Deleted')
M.expunge()
IMAP4.subscribe(mailbox)
新しいメールボックスを購読します。
IMAP4.thread(threading_algorithm, charset, search_criterion[, ...])

threadコマンドは、searchの変形であり、結果のスレッドセマンティクスを備えています。 返されるデータには、スペースで区切られたスレッドメンバーのリストが含まれています。

スレッドメンバーは、スペースで区切られた0個以上のメッセージ番号で構成され、連続する親と子を示します。

スレッドには、 search_criterion 引数の前に2つの引数があります。 threading_algorithm 、および検索 charsetsearchとは異なり、 charset 引数の検索は必須であることに注意してください。 uid searchsearchに対応するのと同じように、threadに対応するuid threadコマンドもあります。 threadコマンドは、最初に、検索条件内の文字列の解釈にcharset引数を使用して、指定された検索条件に一致するメッセージをメールボックスで検索します。 次に、指定されたスレッドアルゴリズムに従ってスレッド化された一致するメッセージを返します。

これはIMAP4rev1拡張コマンドです。

バージョン2.4の新機能。

IMAP4.uid(command, arg[, ...])
メッセージ番号ではなく、UIDで識別されるメッセージを使用してコマンド引数を実行します。 コマンドに適切な応答を返します。 少なくとも1つの引数を指定する必要があります。 何も指定されていない場合、サーバーはエラーを返し、例外が発生します。
IMAP4.unsubscribe(mailbox)
古いメールボックスの購読を解除します。
IMAP4.xatom(name[, arg[, ...]])
CAPABILITY応答でサーバーから通知される単純な拡張コマンドを許可します。

IMAP4_SSL のインスタンスには、追加のメソッドが1つだけあります。

IMAP4_SSL.ssl()
サーバーとの安全な接続に使用されるSSLObjectインスタンスを返します。

IMAP4 のインスタンスでは、次の属性が定義されています。

IMAP4.PROTOCOL_VERSION
サーバーからのCAPABILITY応答でサポートされている最新のプロトコル。
IMAP4.debug
デバッグ出力を制御する整数値。 初期化値は、モジュール変数Debugから取得されます。 3より大きい値は、各コマンドをトレースします。


20.0.2。 IMAP4の例

メールボックスを開き、すべてのメッセージを取得して出力する最小限の例(エラーチェックなし)を次に示します。

import getpass, imaplib

M = imaplib.IMAP4()
M.login(getpass.getuser(), getpass.getpass())
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
    typ, data = M.fetch(num, '(RFC822)')
    print 'Message %s\n%s\n' % (num, data[0][1])
M.close()
M.logout()