Problem with imaplib (weird result if mailbox contains a %)

Leo Kislov Leo.Kislov at gmail.com
Wed Nov 29 07:33:10 EST 2006


Antoon Pardon wrote:
> On 2006-11-28, Leo Kislov <Leo.Kislov at gmail.com> wrote:
> >
> > Antoon Pardon wrote:
> >> This little program gives IMO a strange result.
> >>
> >> import imaplib
> >>
> >> user = "cpapen"
> >>
> >> cyr = imaplib.IMAP4("imap.vub.ac.be")
> >> cyr.login("cyrus", "cOn-A1r")
> >> rc, lst = cyr.list('""', "user/%s/*" % user)
> >> for el in lst:
> >>   print "%r" % (el,)
> >>
> >> And the result is:
> >>
> >> '(\\HasNoChildren) "/" "user/cpapen/Out"'
> >> '(\\HasNoChildren) "/" "user/cpapen/Punten"'
> >> '(\\HasNoChildren) "/" "user/cpapen/Spam"'
> >> '(\\HasNoChildren) "/" "user/cpapen/agoog to be"'
> >> '(\\HasNoChildren) "/" "user/cpapen/artistiek &- kunst"'
> >> '(\\HasNoChildren) "/" "user/cpapen/copains et copinnes =x="'
> >> '(\\HasNoChildren) "/" "user/cpapen/cp &- writing"'
> >> '(\\HasNoChildren) "/" "user/cpapen/examen"'
> >> '(\\HasNoChildren) "/" "user/cpapen/important info (pass)"'
> >> '(\\HasNoChildren) "/" "user/cpapen/lesmateriaal"'
> >> '(\\HasNoChildren) "/" "user/cpapen/love &- flesh for fantasy"'
> >> '(\\HasNoChildren) "/" "user/cpapen/media"'
> >> '(\\HasNoChildren) "/" "user/cpapen/music &- beats"'
> >> ('(\\HasNoChildren) "/" {25}', 'user/cpapen/newsletters %')
> >> ''
> >> '(\\HasNoChildren) "/" "user/cpapen/organisatie &- structuur"'
> >> '(\\HasNoChildren) "/" "user/cpapen/sociale wetenschappen"'
> >> '(\\HasNoChildren) "/" "user/cpapen/the closest ones to me [x]"'
> >> '(\\HasNoChildren) "/" "user/cpapen/vubrations"'
> >> '(\\HasNoChildren) "/" "user/cpapen/wm2addressbook"'
> >> '(\\HasNoChildren) "/" "user/cpapen/wm2prefs"'
> >> '(\\HasNoChildren) "/" "user/cpapen/wm2signature"'
> >>
> >>
> >> What I have a problem with is the 14th and 15th line.
> >> All other entries are strings but the 14th is a tuple.
> >> and the 15th is an empty string. As far as I can tell
> >> every time a "%" is in the mailbox name I get this kind of
> >> result.
> >>
> >> I'm using python 2.3.3 and the imap sytem is Cyrus.
> >>
> >> Can someone explain what is going one?
> >>
> >> Is this a bug?
> >
> > Empty string seems to be a bug. But tuple is by design, read the docs
> > and imap rfc. The protocol is convoluted in the first place, and so is
> > python interface.
>
> Are there more docs than at http://www.python.org/doc/. I don't find
> those very helpfull in explaining this.
>
> I also took a look at rfc 2060 and to be honest I don't find anything
> there to explain this difference. I only took a closer look at section
> 7.2.2. So maybe I should look somewehere else but after reading section
> 7.2.2. I don't understand why the list method returned a tuple for this
> mailbox instead of the following string:
>
>    '(\\HasNoChildren) "/" "user/cpapen/newsletters %"'

This is described in section 4.3. imaplib is too close to the protocol.
It should interpret response for each command separately. For example
list method could return list of tuples like:

("\\HasNoChildren", "/", "user/cpapen/newsletters %")

Without this abstraction level in imaplib you have to build it
yourself.

> >
> >> If it is, is it fixed in later versions?
> >
> > Why don't you try to pull imaplib.py from later versions? I don't think
> > it changed that much so it should be compatible with python 2.3
>
> I could take my hands on a 2.4 version and the result was the same.

I was talking only about empty string response. Is it still there?
Anyway, this issue requires investigation. That could also be a bug in
the server.

  -- Leo




More information about the Python-list mailing list