Archiving emails in Gmail

Alf P. Steinbach alfps at start.no
Tue Jun 15 03:34:29 EDT 2010


* teja, on 15.06.2010 09:03:
> Hi,
>
> I have a requirement that I want to log-in into a gmail account read
> all unread mails, mark them as read and then archive them.
> I am using libgmail (version 0.1.11) library to do so, using which I
> am able to log-in into a gmail account fetch all unread message and
> then read them one by one.
> Now my problem is that I am not able to mark the unread mail as read
> and archive it.
>
> Below is sample code that I am using.
>
>
> from libgmail import *
>
> ARCHIVE_ACTION='rc_^i'  #the action string to archive a message
> UNREAD_MAILS = "is:unread"
>
> def ArchiveAll():
>      ga = GmailAccount(name='username', pw='password')
>      print 'logging in...',
>      ga.login()
>      print 'successful'
>
>      def _getAllUnreadMails():
>          return ga.getMessagesByQuery(UNREAD_MAILS, True)
>
>      def _readMail(email):
>          emailData = ga.getRawMessage(email)
>
>      def _archiveAndMarkRead(email):
>          ga._doThreadAction(ARCHIVE_ACTION, email)
>          ga._doThreadAction(U_MARKREAD_ACTION, email)
>
>      emails = _getAllUnreadMails()
>      for email in emails:
>          eData = _readMail(email)
>          #Process email data
>          _archiveAndMarkRead(email)
>
>      print 'done'
>
> if __name__ == '__main__':
>      ArchiveAll()
>
> after executing this code I am getting following error
>
> HTTP Error 500: Internal Server Error
> Traceback (most recent call last):
>    File "test_libgmail.py", line 30, in<module>
>      ArchiveAll()
>    File "test_libgmail.py", line 26, in ArchiveAll
>      [_archiveAndMarkRead(t) for t in sr[1]]

In the code you show above there is no line

   [_archiveAndMarkRead(t) for t in sr[1]]

Instead you have

   _archiveAndMarkRead(email)

I tentatively conclude from this that the error is in your real code, as opposed 
to the code you've shown.



>    File "test_libgmail.py", line 21, in _archiveAndMarkRead
>      ga._doThreadAction(ARCHIVE_ACTION, thread)
>    File "/home/3rdparty/libgmail/libgmail.py", line 669, in
> _doThreadAction
>      items = self._parsePage(_buildURL(**params))
>    File "/home/3rdparty/libgmail/libgmail.py", line 383, in _parsePage
>      items = _parsePage(self._retrievePage(urlOrRequest))
>    File "/home/3rdparty/libgmail/libgmail.py", line 99, in _parsePage
>      lines = pageContent.splitlines()
> AttributeError: 'NoneType' object has no attribute 'splitlines'
>
> Can anyone help me in figuring out what's going wrong here?

You're passing a None value.

It originates somewhere in your real code, which it appears that you have not shown.


> I guess google has deprecated this way of marking emails, correct me
> if I am wrong here.
> But if its true, is there any other way or library in Python to meet
> my requirements?

You can access GMail via an ordinary e-mail client. What's that called, POP 
protocol? I think the protocol for sending is SMTP. Any library handling those 
two protocols can be used.


Cheers & hth.,

- Alf, who, unfortunately, wrt. to your real code, is not a telepath :-)

-- 
blog at <url: http://alfps.wordpress.com>



More information about the Python-list mailing list