Py3k,email header handling

T

TheSaint

Hello,
some time ago, I wrote a program to eliminate undesided emails from the
server(s) and leave those which comply to certain filter criteria.

I started it when I got to know whit Python 2.3. Now a days I'd like to
spend some time to improve it, just for my interest, however it didn't
gather anybody's interest before.
Now python 3.2 (and some version before) started to use byte, rather than
text strings, almost for all data handling in compliance to unicode. My
problem arise that my program handle text strings, so I'd like to rewrite
the code

My program reads from IMAP4 or POP3 server, I'd prefer that a function/class
will return either a list or a dictionary which contains the following
fields:

'from', 'to', 'cc', 'bcc', 'date', 'subject', 'reply-to', 'message-id'

The list may be organized as tuple (from, its_content,), etc,etc for each
field, but I think dictionary would be more efficient to use.

1) is there a way to call the IMAPlib or POPlib and pass the data directly
to email.parser.HeaderParser to achieve my intention?

2) If the above will do, do re.compile compile unicode results?
I guess yes.

3) any related documentation...
 
S

Steven D'Aprano

Now python 3.2 (and some version before) started to use byte, rather
than text strings, almost for all data handling in compliance to
unicode. My problem arise that my program handle text strings, so I'd
like to rewrite the code

Before you re-write it, you should run 2to3 over it and see how much it
can do automatically:

http://docs.python.org/library/2to3.html

My program reads from IMAP4 or POP3 server, I'd prefer that a
function/class will return either a list or a dictionary which contains
the following fields:

'from', 'to', 'cc', 'bcc', 'date', 'subject', 'reply-to', 'message-id'

The list may be organized as tuple (from, its_content,), etc,etc for
each field, but I think dictionary would be more efficient to use.

1) is there a way to call the IMAPlib or POPlib and pass the data
directly to email.parser.HeaderParser to achieve my intention?

I'm afraid I don't understand the question.

2) If the above will do, do re.compile compile unicode results? I guess
yes.

Yes. In Python 3, re.compile("some string") is automatically unicode,
because "some string" is unicode.

3) any related documentation...

http://docs.python.org/py3k/library/email.html
http://docs.python.org/py3k/library/re.html
http://docs.python.org/py3k/library/imaplib.html
http://docs.python.org/py3k/library/poplib.html


If you have any more concrete questions, please ask.
 
T

TheSaint

Steven said:
Before you re-write it, you should run 2to3 over it and see how much it
can do automatically:

Widely done, only the results from some query has radically changed on
favour of unicode. Errors raising about results which are not strings
anymore.
I'm afraid I don't understand the question.

Making an example :

from poplib import POP3 as pop3
pop3.user('userid')
pop3.pass_('password')
numMsg, total = pop3.stat()
for cnt in numMsgs:
header = pop3.top(cnt)
# here I'd like to pass the header to some function that will return
# a dictionary filling
# from', 'to', 'cc', 'bcc', 'date', 'subject', 'reply-to', 'message-id'
# keys, if nothing the leave empty string or None
dict = email.header,decode_header(header) # but might not my result
# Should I subclass this?

The same would be from the IMAP4 message parsing. Some different process
would take, would it ?
If you have any more concrete questions, please ask.

If these aren't concrete questions, forgive me, I perhaps got into wrong
news group.
In the other and I hugely apreciated your clues. I'll see the docs some more
long to achieve a clear learning.
 
T

Terry Reedy

Widely done, only the results from some query has radically changed on
favour of unicode. Errors raising about results which are not strings
anymore.

Make sure you use 3.2 and not 3.1 (or 3.0) as there were improvements to
the email module.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,566
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top