473,385 Members | 1,324 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,385 software developers and data experts.

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

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?

If it is, is it fixed in later versions?

Whether or not it is a bug, can I rely on the mailbox
being the last item in the tuple in these cases?

--
Antoon Pardon
Nov 28 '06 #1
5 1785

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.
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
Whether or not it is a bug, can I rely on the mailbox
being the last item in the tuple in these cases?
Yes (at least for list command)

-- Leo

Nov 28 '06 #2
On 2006-11-28, Leo Kislov <Le********@gmail.comwrote:
>
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 %"'
>
>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.
>Whether or not it is a bug, can I rely on the mailbox
being the last item in the tuple in these cases?

Yes (at least for list command)
Well that is at least comforting.

--
Antoon Pardon
Nov 29 '06 #3
Antoon Pardon wrote:
On 2006-11-28, Leo Kislov <Le********@gmail.comwrote:

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

Nov 29 '06 #4
On 2006-11-29, Leo Kislov <Le********@gmail.comwrote:
Antoon Pardon wrote:
>On 2006-11-28, Leo Kislov <Le********@gmail.comwrote:
>
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.
Ah yes, I'm beginning to understand now, what is going on.

I also did a imap session by hand using telnet. That helped.
>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.
The empty line is still there using 2.4.
This is part of the session I did by hand. It doesn't seem to be a
server problem.

$ telnet machine.domain imap
Trying xxx.xxx.xxx.xxx...
Connected to machine.domain
Escape character is '^]'.
* OK maxi Cyrus IMAP4 v2.2.13 server ready
0001 LOGIN ... ....
0001 OK User logged in
0002 LIST "" user/cpapen/*
* LIST (\HasNoChildren) "/" "user/cpapen/Out"
....
* LIST (\HasNoChildren) "/" "user/cpapen/music &- beats"
* LIST (\HasNoChildren) "/" {25}
user/cpapen/newsletters %
* LIST (\HasNoChildren) "/" "user/cpapen/organisatie &- structuur"
* LIST (\HasNoChildren) "/" "user/cpapen/sociale wetenschappen"
....
Many thanks for your contribution.

--
Antoon Pardon
Nov 29 '06 #5
In article <sl********************@rcpc42.vub.ac.be>,
Antoon Pardon <ap*****@forel.vub.ac.bewrote:
....
$ telnet machine.domain imap
Trying xxx.xxx.xxx.xxx...
Connected to machine.domain
Escape character is '^]'.
* OK maxi Cyrus IMAP4 v2.2.13 server ready
0001 LOGIN ... ....
0001 OK User logged in
0002 LIST "" user/cpapen/*
* LIST (\HasNoChildren) "/" "user/cpapen/Out"
...
* LIST (\HasNoChildren) "/" "user/cpapen/music &- beats"
* LIST (\HasNoChildren) "/" {25}
user/cpapen/newsletters %
* LIST (\HasNoChildren) "/" "user/cpapen/organisatie &- structuur"
* LIST (\HasNoChildren) "/" "user/cpapen/sociale wetenschappen"

{5}\r\nhello\r\n is an IMAP "literal". It's unlucky that
Cyrus uses this for some LIST responses and not others, since
that will be a surprise to clients that use ad hoc parsing -
like imaplib users.

Donn Cave, do**@u.washington.edu
Nov 30 '06 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: redneck_kiwi | last post by:
Hi all: I have a really weird problem. I am developing a customer catalog system for my company and as such have delved into sessions for authentication and access levels. So far, I have managed...
1
by: Florian Lindner | last post by:
Hi, I'm not sure where the problems lies... I'm using optparse and I've a option defined: parser.add_option("-t", "--type", action="callback", callback=option_callback, type="string") def...
2
by: Max M | last post by:
I am using the fetch command from the imaplib to fetch messages. I get a result, but I am a bit uncertain as to how I should interpret it. The result is described at...
0
by: Wolfgang Kohnen | last post by:
Hello out there! I am new to python and so far I like it a lot. Now I want to create some IMAP mailboxes on my cyrus imapd, with quotas and each user should be subscribed to her/his own spam...
5
by: matt dittman | last post by:
I have created a windows service that reads emails from a drop directory and moves them to the appropriate mail folder every 15 seconds. I can move, rename and delete the files as needed, up...
0
by: Laszlo Nagy | last post by:
Hello, I'm trying to write a very simple program that moves all messages from INBOX into another folder. I'm not sure what am I doing wrong. This is a very simple task. I believe I need to call...
1
by: aspineux | last post by:
imaplib use exception to report errors, but some problems must be detected by checking the return value ! For example, when trying to append into a mailbox with wrong ACL, imaplib return 'NO',...
0
by: aspineux | last post by:
setacl and getacl look to be already "Cyrus" specific (according the doc), why not to extend imaplib a little bit more ? Here are some code I wrote and tested to support cyrus "expire" that...
4
by: gregpinero | last post by:
I'm trying to get a list of messages from GMAIL using it's new IMAP access. So far I've tried running this command but it just hangs. Any ideas? I figured that's the first line to run from...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...
0
by: ryjfgjl | last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.