Email messages from grouped email using IMAPClient in Python.

Barry Scott barry at barrys-emacs.org
Thu Sep 12 04:32:23 EDT 2019



> On 12 Sep 2019, at 06:06, Srinivas Pullabhotla <nivas.p77 at gmail.com> wrote:
> 
> Hello,
> 
> I am trying to fetch email messages from a gmail inbox. So, there will be 1000s of messages sent to Inbox and since they are 1000s, the emails are grouped 100 per each email item.
> 
> When I tried this method, the program only fetches some but not all and especially it happens with grouped email messages. How can I get all the messages from that grouped email.
> 
> import email, time, sys
>    from imapclient import IMAPClient
> 
>    with IMAPClient(HOST) as server:
>        server.login(USERNAME, PASSWORD)
>        server.select_folder('INBOX', readonly=True)
> 
>        messages = server.search(['ALL', 'UNSEEN'])
>        for uid, message_data in server.fetch(messages, 'RFC822').items():
>            email_message = email.message_from_bytes(message_data[b'RFC822'])
>            print(email_message.get_payload(None, True))
> 
> 
> The program should fetch all the email messages from the grouped email and output to the file (in my case I am grabbing the href links). How best I can achieve this ? Appreciate thoughts and suggestions.

If you have a very large number of messages then you will need to add:

# default of 10000 is too small for SEARCH results
imaplib._MAXLINE = 200000

If you want to use the MOVE command you will need this:

# MOVE is not available by default
imaplib.Commands['MOVE'] = ('SELECTED',)

As DL said you need to print out what you get back from the search() and check that it is what you expect.

Barry

> -- 
> https://mail.python.org/mailman/listinfo/python-list
> 




More information about the Python-list mailing list