From: Paul on
Hi,
I'm trying to write a simple script which displays the basic details
of a person's mailbox. My problem is that it causes all the messages
to be marked as read on the server, which is not what I'm after, and I
also can't get the imap.sort command to work properly (currently
commented out as I replaced it with a imap.search to get the thing
working.
These are probably very simple things, but I've not tried this library
before so am a bit stuck so any help wwould be very gratefully
received.
Thanks,
Paul

Code:

# -*- coding: cp1252 -*-
import imaplib,email

# you want to connect to a server; specify which server
server= imaplib.IMAP4_SSL('imap.googlemail.com')
# after connecting, tell the server who you are
server.login('xxxx(a)gmail.com', 'xxxxxxx')
# this will show you a list of available folders
# possibly your Inbox is called INBOX, but check the list of mailboxes
code, mailboxen= server.list()
print mailboxen
# if it's called INBOX, then…
server.select("INBOX")

typ, data = server.search(None, 'ALL')
#typ, data = server.sort("Date","UTF-8", 'ALL')
print len(data[0].split())
for num in data[0].split():
typ, data = server.fetch(num, '(RFC822)')
#print 'Message %s\n%s\n' % (num, data[0][1])
msg = email.message_from_string(data[0][1])
print msg["From"]
print msg["Subject"]
print msg["Date"]
print "_______________________________"

server.close()
server.logout()
From: MRAB on
Paul Jefferson wrote:
> Hi,
> I'm trying to write a simple script which displays the basic details
> of a person's mailbox. My problem is that it causes all the messages
> to be marked as read on the server, which is not what I'm after, and
> I also can't get the imap.sort command to work properly (currently
> commented out as I replaced it with a imap.search to get the thing
> working.
> These are probably very simple things, but I've not tried this library
> before so am a bit stuck so any help wwould be very gratefully
> received.
> Thanks,
> Paul
>
> Code:
>
> # -*- coding: cp1252 -*-
> import imaplib,email
>
> # you want to connect to a server; specify which server
> server= imaplib.IMAP4_SSL('imap.googlemail.com
> <http://imap.googlemail.com>')
> # after connecting, tell the server who you are
> server.login('x...
> <http://groups.google.com/groups/unlock?_done=/group/comp.lang.python/browse_thread/thread/024b81e0ea199177&msg=c9ac781cea58a990>@gmail.com
> <http://gmail.com>', 'xxxxxxx')
> # this will show you a list of available folders
> # possibly your Inbox is called INBOX, but check the list of mailboxes
> code, mailboxen= server.list()
> print mailboxen
> # if it's called INBOX, then�
> server.select("INBOX")
>
> typ, data = server.search(None, 'ALL')
> #typ, data = server.sort("Date","UTF-8", 'ALL')
> print len(data[0].split())
> for num in data[0].split():
> typ, data = server.fetch(num, '(RFC822)')
> #print 'Message %s\n%s\n' % (num, data[0][1])
> msg = email.message_from_string(data[0][1])
> print msg["From"]
> print msg["Subject"]
> print msg["Date"]
> print "_______________________________"
>
> server.close()
> server.logout()
>
You might want to read what it says here:

http://tools.ietf.org/html/rfc2060.html#page-41

If you can use '(BODY[])' instead of '(RFC822)' then you could use
'(BODY.PEEK[])'.

Alternatively, try:

server.store(num, '-FLAGS', r'\Seen')

to mark it as unread after fetching.
From: Grant Edwards on

> I'm trying to write a simple script which displays the basic details
> of a person's mailbox. My problem is that it causes all the messages
> to be marked as read on the server,
>
> code, mailboxen= server.list()
> print mailboxen
> # if it's called INBOX, then�
> server.select("INBOX")

You probably want to try examine() instead of select(). That opens
the mailbox in a read-only mode which and should avoid changing any
flag values.

From RFC3501:

The EXAMINE command is identical to SELECT and returns the same
output; however, the selected mailbox is identified as
read-only. No changes to the permanent state of the mailbox,
including per-user state, are permitted; in particular, EXAMINE
MUST NOT cause messages to lose the \Recent flag.

--
Grant