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