2017-11-26 22 views
0

IMAPサーバーに次のメールボックスがあります(添付のスクリーンショットを参照)。 enter image description hereIMAPサーバーから特定のメールボックスを選択する方法は?

メールボックスFolder1のみを選択し、サブディレクトリがあるかどうかを確認します。

svr = imaplib.IMAP4_SSL(imap_address) 
svr.login(user, pwd) 
svr.select('inbox') <<<<<<<<<<<<<<<<< 
rv, data = svr.search(None, "ALL") 
test, folders = svr.list('""', '*') 
print(folders) 

私はFolder1にを選択することになり、その後、私はサブディレクトリを取得することができます「のfolder1」(矢印で示された声明)に「受信トレイ」を変更すると思った:私はすでに、次のコードを試してみました。しかし、何も起こらず、それでも「受信トレイ」と同じ結果を示しています。

誰かが私がここで間違っていることを理解するのを助けることができますか?

+0

現在選択されているメールボックスでLISTは動作しません。これはグローバルコマンドです。 list()のパラメータを変更しようとしましたか? – Max

+0

@Max私はそれに取り組み、望ましい結果を得ることができました。コードを解決策として投稿します。何か他のものを修正する必要があるか、プロセスをより速くすることができるかどうかを確認してください。 –

答えて

0

私がフォルダの名前を知らないので、私は別のアプローチを試しました。私は最初にルートディレクトリのすべてのフォルダを収集し、サブディレクトリが存在するかどうかを確認するために1つずつ解析します。

root_folders = [] 
svr = imaplib.IMAP4_SSL(imap_address) 
svr.login(user, pwd) 
svr.select('inbox') 
response, folders = svr.list('""', '*') 

def parse_mailbox(data): 
    flags, b, c = data.partition(' ') 
    separator, b, name = c.partition(' ') 
    return flags, separator.replace('"', ''), name.replace('"', '') 

def subdirectory(folder): 
    #For directories 'Deleted Items', 'Sent Items', etc. with whitespaces, 
    #the name of the directory needs to be passed with double quotes, hence '"' + name + '"' 
    test, folders = obj.list('""','"' + name+ '/*"') 
    if(folders is not None): 
     print('Subdirectory exists') # you can also call parse_mailbox to find the name of sub-directory 

for mbox in folders: 
    flags, separator, name = parse_mailbox(bytes.decode(mbox)) 
    fmt = '{0} : [Flags = {1}; Separator = {2}' 
    if len(name.split('/')) > 1: 
     continue 
    else: 
     root_folders.append(name) 

for folder in root_folders: 
    subdirectory(folder) 

これは私のスクリプトのカスタマイズされたコードですが、これは質問の解決策でなければなりません。

関連する問題