473,704 Members | 2,448 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

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("cyru s", "cOn-A1r")
rc, lst = cyr.list('""', "user/%s/*" % user)
for el in lst:
print "%r" % (el,)

And the result is:

'(\\HasNoChildr en) "/" "user/cpapen/Out"'
'(\\HasNoChildr en) "/" "user/cpapen/Punten"'
'(\\HasNoChildr en) "/" "user/cpapen/Spam"'
'(\\HasNoChildr en) "/" "user/cpapen/agoog to be"'
'(\\HasNoChildr en) "/" "user/cpapen/artistiek &- kunst"'
'(\\HasNoChildr en) "/" "user/cpapen/copains et copinnes =x="'
'(\\HasNoChildr en) "/" "user/cpapen/cp &- writing"'
'(\\HasNoChildr en) "/" "user/cpapen/examen"'
'(\\HasNoChildr en) "/" "user/cpapen/important info (pass)"'
'(\\HasNoChildr en) "/" "user/cpapen/lesmateriaal"'
'(\\HasNoChildr en) "/" "user/cpapen/love &- flesh for fantasy"'
'(\\HasNoChildr en) "/" "user/cpapen/media"'
'(\\HasNoChildr en) "/" "user/cpapen/music &- beats"'
('(\\HasNoChild ren) "/" {25}', 'user/cpapen/newsletters %')
''
'(\\HasNoChildr en) "/" "user/cpapen/organisatie &- structuur"'
'(\\HasNoChildr en) "/" "user/cpapen/sociale wetenschappen"'
'(\\HasNoChildr en) "/" "user/cpapen/the closest ones to me [x]"'
'(\\HasNoChildr en) "/" "user/cpapen/vubrations"'
'(\\HasNoChildr en) "/" "user/cpapen/wm2addressbook" '
'(\\HasNoChildr en) "/" "user/cpapen/wm2prefs"'
'(\\HasNoChildr en) "/" "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 1807

Antoon Pardon wrote:
This little program gives IMO a strange result.

import imaplib

user = "cpapen"

cyr = imaplib.IMAP4(" imap.vub.ac.be" )
cyr.login("cyru s", "cOn-A1r")
rc, lst = cyr.list('""', "user/%s/*" % user)
for el in lst:
print "%r" % (el,)

And the result is:

'(\\HasNoChildr en) "/" "user/cpapen/Out"'
'(\\HasNoChildr en) "/" "user/cpapen/Punten"'
'(\\HasNoChildr en) "/" "user/cpapen/Spam"'
'(\\HasNoChildr en) "/" "user/cpapen/agoog to be"'
'(\\HasNoChildr en) "/" "user/cpapen/artistiek &- kunst"'
'(\\HasNoChildr en) "/" "user/cpapen/copains et copinnes =x="'
'(\\HasNoChildr en) "/" "user/cpapen/cp &- writing"'
'(\\HasNoChildr en) "/" "user/cpapen/examen"'
'(\\HasNoChildr en) "/" "user/cpapen/important info (pass)"'
'(\\HasNoChildr en) "/" "user/cpapen/lesmateriaal"'
'(\\HasNoChildr en) "/" "user/cpapen/love &- flesh for fantasy"'
'(\\HasNoChildr en) "/" "user/cpapen/media"'
'(\\HasNoChildr en) "/" "user/cpapen/music &- beats"'
('(\\HasNoChild ren) "/" {25}', 'user/cpapen/newsletters %')
''
'(\\HasNoChildr en) "/" "user/cpapen/organisatie &- structuur"'
'(\\HasNoChildr en) "/" "user/cpapen/sociale wetenschappen"'
'(\\HasNoChildr en) "/" "user/cpapen/the closest ones to me [x]"'
'(\\HasNoChildr en) "/" "user/cpapen/vubrations"'
'(\\HasNoChildr en) "/" "user/cpapen/wm2addressbook" '
'(\\HasNoChildr en) "/" "user/cpapen/wm2prefs"'
'(\\HasNoChildr en) "/" "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********@gma il.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("cyr us", "cOn-A1r")
rc, lst = cyr.list('""', "user/%s/*" % user)
for el in lst:
print "%r" % (el,)

And the result is:

'(\\HasNoChild ren) "/" "user/cpapen/Out"'
'(\\HasNoChild ren) "/" "user/cpapen/Punten"'
'(\\HasNoChild ren) "/" "user/cpapen/Spam"'
'(\\HasNoChild ren) "/" "user/cpapen/agoog to be"'
'(\\HasNoChild ren) "/" "user/cpapen/artistiek &- kunst"'
'(\\HasNoChild ren) "/" "user/cpapen/copains et copinnes =x="'
'(\\HasNoChild ren) "/" "user/cpapen/cp &- writing"'
'(\\HasNoChild ren) "/" "user/cpapen/examen"'
'(\\HasNoChild ren) "/" "user/cpapen/important info (pass)"'
'(\\HasNoChild ren) "/" "user/cpapen/lesmateriaal"'
'(\\HasNoChild ren) "/" "user/cpapen/love &- flesh for fantasy"'
'(\\HasNoChild ren) "/" "user/cpapen/media"'
'(\\HasNoChild ren) "/" "user/cpapen/music &- beats"'
('(\\HasNoChil dren) "/" {25}', 'user/cpapen/newsletters %')
''
'(\\HasNoChild ren) "/" "user/cpapen/organisatie &- structuur"'
'(\\HasNoChild ren) "/" "user/cpapen/sociale wetenschappen"'
'(\\HasNoChild ren) "/" "user/cpapen/the closest ones to me [x]"'
'(\\HasNoChild ren) "/" "user/cpapen/vubrations"'
'(\\HasNoChild ren) "/" "user/cpapen/wm2addressbook" '
'(\\HasNoChild ren) "/" "user/cpapen/wm2prefs"'
'(\\HasNoChild ren) "/" "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:

'(\\HasNoChildr en) "/" "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********@gma il.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("cyru s", "cOn-A1r")
rc, lst = cyr.list('""', "user/%s/*" % user)
for el in lst:
print "%r" % (el,)

And the result is:

'(\\HasNoChildr en) "/" "user/cpapen/Out"'
'(\\HasNoChildr en) "/" "user/cpapen/Punten"'
'(\\HasNoChildr en) "/" "user/cpapen/Spam"'
'(\\HasNoChildr en) "/" "user/cpapen/agoog to be"'
'(\\HasNoChildr en) "/" "user/cpapen/artistiek &- kunst"'
'(\\HasNoChildr en) "/" "user/cpapen/copains et copinnes =x="'
'(\\HasNoChildr en) "/" "user/cpapen/cp &- writing"'
'(\\HasNoChildr en) "/" "user/cpapen/examen"'
'(\\HasNoChildr en) "/" "user/cpapen/important info (pass)"'
'(\\HasNoChildr en) "/" "user/cpapen/lesmateriaal"'
'(\\HasNoChildr en) "/" "user/cpapen/love &- flesh for fantasy"'
'(\\HasNoChildr en) "/" "user/cpapen/media"'
'(\\HasNoChildr en) "/" "user/cpapen/music &- beats"'
('(\\HasNoChild ren) "/" {25}', 'user/cpapen/newsletters %')
''
'(\\HasNoChildr en) "/" "user/cpapen/organisatie &- structuur"'
'(\\HasNoChildr en) "/" "user/cpapen/sociale wetenschappen"'
'(\\HasNoChildr en) "/" "user/cpapen/the closest ones to me [x]"'
'(\\HasNoChildr en) "/" "user/cpapen/vubrations"'
'(\\HasNoChildr en) "/" "user/cpapen/wm2addressbook" '
'(\\HasNoChildr en) "/" "user/cpapen/wm2prefs"'
'(\\HasNoChildr en) "/" "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:

'(\\HasNoChildr en) "/" "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:

("\\HasNoChildr en", "/", "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********@gma il.comwrote:
Antoon Pardon wrote:
>On 2006-11-28, Leo Kislov <Le********@gma il.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:

'(\\HasNoChildr en) "/" "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:

("\\HasNoChildr en", "/", "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.washingt on.edu
Nov 30 '06 #6

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

Similar topics

3
2078
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 to get a working system just about finished. I am building an interface for our customer service folks to use to manage registered customers and am seeing some weird behavior.
1
1177
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 option_callback(option, opt, value, parser, *args, **kwargs): if (str(option) == "-t/--type") and (opt in ("mailbox", "ftp")): print "Error!"
2
3182
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 http://pydoc.org/2.3/imaplib.html as:: (typ, ) = <instance>.fetch(message_set, message_parts) In RFC 2060 it says: "The data items to be fetched can be either a single atom or a parenthesized list."
0
1752
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 folder. This is what I've attempted: > >>> import imaplib, getpass > >>> cyrus = imaplib.IMAP4() > >>> cyrus.login("cyrus", getpass.getpass()) > Password:
5
1113
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 until the CDO.DropDirectory.GetMessages() method is called. At this point, the files are locked until I shut down the service. After processing and delivery, I need to be able to delete all the files in the drop directory. I can delete them via...
0
935
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 these methods: - search -get all message UIDs in the INBOX - copy -copy all messages to another folder - store -mark all messages in INBOX as deleted
1
2143
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', but dont raise any exception (I give a sample at the end). This make error handling more complicate, because any imap statement is supposed to be followed by a test of the returned value! Why not report all problems using exceptions ?
0
1543
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 manage how long a message can stay into a mailbox. This is usefull for NEWS server ! The code is preceded by lot of sample.
4
11774
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 this example: http://docs.python.org/lib/imap4-example.html Here are the configuration settings GMAIL says to use:
0
8764
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
9266
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
9130
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
9020
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
1
6603
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 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 a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
5926
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
4694
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
3130
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
3
2074
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

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.