PythonでIMAPメール操作なら、IMAPClientが便利だった件

PythonIMAPでメール受信したくなった。標準のimaplibで基本的に可能なわけですが、実は結構めんどくさい。まずフォルダ名の取得からして、結果文字列がエンコードされたままで日本語だとそのままでは読めない...。読める文字列にするには何かと面倒...。メール読みたいだけなのに、正直辛い...。
で、手元にあった本、

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

を改めて読んでみたら、IMAPには「IMAPClient」というのを使っている。こっちの方がよかった。

pip install imapclient

してインストール。
違いは下のよう。

# 標準のimaplibの場合
import imaplib
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('foo@gmail.com', 'password')
mail.list()
#取得結果のままでは日本語文字列エンコードされてて読めない...
> ('OK',
 [b'(\\HasNoChildren) "/" "INBOX"',
  b'(\\HasChildren \\Noselect) "/" "[Gmail]"',
  b'(\\All \\HasNoChildren) "/" "[Gmail]/&MFkweTBmMG4w4TD8MOs-"',
  b'(\\HasNoChildren \\Trash) "/" "[Gmail]/&MLQw33ux-"',
  b'(\\HasNoChildren \\Sent) "/" "[Gmail]/&kAFP4W4IMH8w4TD8MOs-"'])
# IMAPClientの場合
import imapclient
server = imapclient.IMAPClient("imap.gmail.com", ssl=True)
server.login(foo@gmail.com', 'password')
server.list_folders()
#取得結果がすでにデコード済みの文字列、日本語も読める!!
> 
[((b'\\HasNoChildren',), b'/', 'INBOX'),
 ((b'\\HasChildren', b'\\Noselect'), b'/', '[Gmail]'),
 ((b'\\All', b'\\HasNoChildren'), b'/', '[Gmail]/すべてのメール'),
 ((b'\\HasNoChildren', b'\\Trash'), b'/', '[Gmail]/ゴミ箱'),
 ((b'\\HasNoChildren', b'\\Sent'), b'/', '[Gmail]/送信済みメール')]

これなら嬉しい。
IMAPメール本文を読むにはさらにひと工夫いるのですが、その辺は 上述の本退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミングでは、pyzmailを使っていて、確かに便利だ。pyzmailについてはまたいつか。